From e43f9ce8f0137e09575e65f63a7ac0ce09503e97 Mon Sep 17 00:00:00 2001 From: taifu yuan <515789026@qq.com> Date: Mon, 21 Feb 2022 13:37:11 +0800 Subject: [PATCH] feat:(cert_alias_manage_contract.go) add cert alias --- certmgr/cert_alias_manage_contract.go | 541 ++++++++++++++++++++++++++ certmgr/cert_manage_contract.go | 72 +++- go.mod | 4 +- go.sum | 12 +- 4 files changed, 602 insertions(+), 27 deletions(-) create mode 100644 certmgr/cert_alias_manage_contract.go diff --git a/certmgr/cert_alias_manage_contract.go b/certmgr/cert_alias_manage_contract.go new file mode 100644 index 0000000..7ef9e03 --- /dev/null +++ b/certmgr/cert_alias_manage_contract.go @@ -0,0 +1,541 @@ +/* + * Copyright (C) BABEC. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package certmgr + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "fmt" + "strconv" + "strings" + + accesscontrolPb "chainmaker.org/chainmaker/pb-go/v2/accesscontrol" + commonPb "chainmaker.org/chainmaker/pb-go/v2/common" + "chainmaker.org/chainmaker/protocol/v2" + "chainmaker.org/chainmaker/utils/v2" + "github.com/gogo/protobuf/proto" +) + +func (r *CertManageRuntime) AddAlias(txSimContext protocol.TxSimContext, params map[string][]byte) ( + result []byte, err error) { + // 1. get params and verify fmt + // 2. verify exist + // 3. save alias info + // 4. return + name := string(params[paramNameAlias]) + name = strings.TrimSpace(name) + if utils.IsAnyBlank(name) { + err = fmt.Errorf("add alias failed, alias name is nil") + r.log.Warn(err) + return nil, err + } + if !aliasNameReg.MatchString(name) { + err = fmt.Errorf("add alias failed, alias name[%s] must match %s", name, aliasNameRegStr) + r.log.Warn(err) + return nil, err + } + sender := txSimContext.GetTx().Sender.Signer + if sender.MemberType != accesscontrolPb.MemberType_CERT { + err = fmt.Errorf("add alias failed, MemberType must be MemberType_CERT ") + r.log.Warn(err) + return nil, err + } + + certAliasInfo, err := r.getAliasFromDb(txSimContext, name) + if err != nil { + err = fmt.Errorf("add alias failed, %s", err.Error()) + r.log.Warn(err) + return nil, err + } + if certAliasInfo != nil && len(certAliasInfo.NowCert.Cert) > 0 { + err = fmt.Errorf("add alias failed, alias[%s] already exist", name) + r.log.Warn(err) + return nil, err + } + + err = r.addAliasCore(txSimContext, name, sender.GetMemberInfo(), certAliasInfo) + if err != nil { + r.log.Warn(err) + return nil, err + } + return []byte("ok"), nil +} + +// 本组织管理员 +func (r *CertManageRuntime) UpdateAlias(txSimContext protocol.TxSimContext, params map[string][]byte) ( + result []byte, err error) { + // 1. get params and verify fmt + // 2. verify sender org + // 3. replace now cert + // 4. append to history cert + // 5. save alias info + // 6. return + cert := string(params[paramNameCert]) + name := string(params[paramNameAlias]) + cert = strings.TrimSpace(cert) + name = strings.TrimSpace(name) + if utils.IsAnyBlank(name, cert) { + err = fmt.Errorf("update alias failed, alias name or cert is nil") + r.log.Warn(err) + return nil, err + } + if !aliasNameReg.MatchString(name) { + err = fmt.Errorf("update alias failed, alias name[%s] must match %s", name, aliasNameRegStr) + r.log.Warn(err) + return nil, err + } + + certAliasInfo, err := r.getAliasFromDb(txSimContext, name) + if err != nil { + r.log.Warn(err) + return nil, err + } + if certAliasInfo == nil || len(certAliasInfo.NowCert.Cert) == 0 { + // if non-existent return + err = fmt.Errorf("update alias fail, alias[%s] not exist", name) + r.log.Warn(err) + return nil, err + + // if non-existent insert + //err = r.addAliasCore(txSimContext, name, []byte(cert)) + //if err != nil { + // r.log.Warn(err) + // return nil, err + //} + //return []byte("ok"), nil + } + + // verify org + certificate, err := utils.ParseCert([]byte(cert)) + if err != nil || certificate == nil || certificate.Subject.Organization == nil { + err = fmt.Errorf("update alias fail, params[%s] format error, err:%s", paramNameCert, err) + r.log.Warn(err) + return nil, err + } + + nowCertificate, err := utils.ParseCert(certAliasInfo.NowCert.Cert) + if err != nil || nowCertificate == nil || nowCertificate.Subject.Organization == nil { + err = fmt.Errorf("update alias fail, params[%s] format error, err:%s", paramNameCert, err) + r.log.Warn(err) + return nil, err + } + + if txSimContext.GetSender().OrgId != certificate.Subject.Organization[0] { + return nil, fmt.Errorf("update alias fail, "+ + "you can't change other organization cert. "+ + "your org is %s cert org is %s", + txSimContext.GetSender().OrgId, certificate.Subject.Organization[0]) + } + if txSimContext.GetSender().OrgId != nowCertificate.Subject.Organization[0] { + return nil, fmt.Errorf("update alias fail, "+ + "you can't change other organization cert. "+ + "your org is %s cert org is %s", + txSimContext.GetSender().OrgId, nowCertificate.Subject.Organization[0]) + } + + nowCert := &commonPb.AliasCertInfo{ + Cert: []byte(cert), + BlockHeight: txSimContext.GetBlockHeight(), + } + + err = r.setCertHash(txSimContext, nowCert) + if err != nil { + return nil, err + } + + if bytes.Equal(certAliasInfo.NowCert.Cert, nowCert.Cert) { + return nil, fmt.Errorf("update alias fail, alias[%s] is already the cert", name) + } + certAliasInfo.NowCert = nowCert + h := certAliasInfo.HisCerts + h = append(h, nowCert) + if len(h) > maxHisCertsLen { + certAliasInfo.HisCerts = h[len(h)-maxHisCertsLen:] + } else { + certAliasInfo.HisCerts = h + } + err = r.setAliasToDb(txSimContext, certAliasInfo) + if err != nil { + return nil, err + } + r.log.Infof("update alias success, alias[%s] cert[%s]", name, cert) + return []byte("ok"), nil +} + +// 本组织管理员 +func (r *CertManageRuntime) DeleteAlias(txSimContext protocol.TxSimContext, params map[string][]byte) ( + result []byte, err error) { + // 1. get params and verify fmt + // 2. verify sender org + // 3. replace now cert + // 4. append to history cert + // 5. save none alias + // 6. return + names := string(params[paramNameAliases]) + names = strings.TrimSpace(names) + if utils.IsAnyBlank(names) { + err = fmt.Errorf("update alias failed, alias name is nil") + r.log.Warn(err) + return nil, err + } + nameList := strings.Split(names, ",") + for _, name := range nameList { + certAliasInfo, err := r.getAliasFromDb(txSimContext, name) + if err != nil { + r.log.Warn(err) + return nil, err + } + + if certAliasInfo == nil || len(certAliasInfo.NowCert.Cert) == 0 { + err = fmt.Errorf("delete alias fail, alias[%s] not exist", name) + r.log.Warn(err) + return nil, err + } + + // verify org + certificate, err := utils.ParseCert(certAliasInfo.NowCert.Cert) + if err != nil || certificate == nil || certificate.Subject.Organization == nil { + err = fmt.Errorf("update alias fail, params[%s] format error, err:%s", paramNameCert, err) + r.log.Warn(err) + return nil, err + } + + if txSimContext.GetSender().OrgId != certificate.Subject.Organization[0] { + return nil, fmt.Errorf("delete alias fail, "+ + "you can't change other organization cert. "+ + "your org is %s cert org is %s", + txSimContext.GetSender().OrgId, certificate.Subject.Organization[0]) + } + + blankCert := &commonPb.AliasCertInfo{BlockHeight: txSimContext.GetBlockHeight()} + certAliasInfo.NowCert = blankCert + h := certAliasInfo.HisCerts + h = append(h, blankCert) + if len(h) > maxHisCertsLen { + certAliasInfo.HisCerts = h[len(h)-maxHisCertsLen:] + } else { + certAliasInfo.HisCerts = h + } + err = r.setAliasToDb(txSimContext, certAliasInfo) + if err != nil { + return nil, err + } + r.log.Infof("delete alias[%s] success", name) + } + return []byte("ok"), nil +} + +func (r *CertManageRuntime) QueryAlias(txSimContext protocol.TxSimContext, params map[string][]byte) ( + result []byte, err error) { + names := string(params[paramNameAliases]) + names = strings.TrimSpace(names) + if utils.IsAnyBlank(names) { + err = fmt.Errorf("query alias failed, alias name is nil") + r.log.Warn(err) + return nil, err + } + + nameList := strings.Split(names, ",") + infos := commonPb.AliasInfos{} + for _, name := range nameList { + certAliasInfo, err := r.getAliasFromDb(txSimContext, name) + if err != nil { + r.log.Error(err) + return nil, err + } + if certAliasInfo == nil { + err = fmt.Errorf("query alias failed, not found alias[%s], you should add alias first", name) + r.log.Warn(err) + return nil, err + } + infos.AliasInfos = append(infos.AliasInfos, certAliasInfo) + } + return infos.Marshal() +} + +func (r *CertManageRuntime) addAliasCore(txSimContext protocol.TxSimContext, aliasName string, + certBytes []byte, certAliasInfo *commonPb.AliasInfo) error { + + nowCert := &commonPb.AliasCertInfo{ + Cert: certBytes, + BlockHeight: txSimContext.GetBlockHeight(), + } + err := r.setCertHash(txSimContext, nowCert) + if err != nil { + return err + } + + if certAliasInfo == nil { + certAliasInfo = &commonPb.AliasInfo{Alias: aliasName} + } + //err = r.saveAllAlias(txSimContext, aliasName) + //if err != nil { + // return err + //} + certAliasInfo.NowCert = nowCert + certAliasInfo.HisCerts = append(certAliasInfo.HisCerts, nowCert) + err = r.setAliasToDb(txSimContext, certAliasInfo) + if err != nil { + return err + } + r.log.Infof("add alias success, alias[%s] cert[%s]", aliasName, certBytes) + return err +} + +func (r *CertManageRuntime) FreezeAlias(txSimContext protocol.TxSimContext, params map[string][]byte) ( + result []byte, err error) { + // get alias + names := string(params[paramNameAliases]) + names = strings.TrimSpace(names) + if utils.IsAnyBlank(names) { + err = fmt.Errorf("freeze alias failed, alias name is nil") + r.log.Warn(err) + return nil, err + } + + nameList := strings.Split(names, ",") + for _, name := range nameList { + certAliasInfo, err := r.getAliasFromDb(txSimContext, name) + if err != nil { + r.log.Error(err) + return nil, err + } + if certAliasInfo == nil { + err = fmt.Errorf("freeze alias failed, not found alias[%s], you should add alias first", name) + r.log.Warn(err) + return nil, err + } + //if certAliasInfo.Status != AliasStatusNormal.String() { + // err = fmt.Errorf("freeze alias failed, alias[%s] status[%s] is not normal", name, certAliasInfo.Status) + // r.log.Warn(err) + // return nil, err + //} + //// save status + //certAliasInfo.Status = AliasStatusFrozen.String() + + err = r.setAliasToDb(txSimContext, certAliasInfo) + if err != nil { + return nil, err + } + r.log.Infof("freeze alias success, alias[%s]", name) + } + return []byte("ok"), nil +} + +func (r *CertManageRuntime) UnfreezeAlias(txSimContext protocol.TxSimContext, params map[string][]byte) ( + result []byte, err error) { + // get alias + names := string(params[paramNameAliases]) + names = strings.TrimSpace(names) + if utils.IsAnyBlank(names) { + err = fmt.Errorf("unfreeze alias failed, alias name is nil") + r.log.Warn(err) + return nil, err + } + nameList := strings.Split(names, ",") + for _, name := range nameList { + certAliasInfo, err := r.getAliasFromDb(txSimContext, name) + if err != nil { + r.log.Error(err) + return nil, err + } + if certAliasInfo == nil { + err = fmt.Errorf("unfreeze alias failed, not found alias[%s], you should add alias first", name) + r.log.Warn(err) + return nil, err + } + //if certAliasInfo.Status == AliasStatusDeleted.String() { + // err = fmt.Errorf("freeze alias failed, alias[%s] has been deleted", name) + // r.log.Warn(err) + // return nil, err + //} + //if certAliasInfo.Status != AliasStatusFrozen.String() { + // err = fmt.Errorf("freeze alias failed, alias[%s] status[%s] is not frozen", name, certAliasInfo.Status) + // r.log.Warn(err) + // return nil, err + //} + //// save status + //certAliasInfo.Status = AliasStatusNormal.String() + err = r.setAliasToDb(txSimContext, certAliasInfo) + if err != nil { + return nil, err + } + r.log.Infof("unfreeze alias success, alias[%s]", name) + } + return []byte("ok"), nil +} + +func (r *CertManageRuntime) QueryCertByAliasAndBlockHeight(txSimContext protocol.TxSimContext, + params map[string][]byte) (result []byte, err error) { + name := string(params[paramNameAlias]) + blockHeight := string(params[paramBlockHeight]) + name = strings.TrimSpace(name) + height, err := strconv.Atoi(blockHeight) + if err != nil { + err = fmt.Errorf("query alias failed, params[%s] not number", paramBlockHeight) + r.log.Warn(err) + return nil, err + } + if utils.IsAnyBlank(name) { + err = fmt.Errorf("query alias failed, alias name is nil") + r.log.Warn(err) + return nil, err + } + + certAliasInfo, err := r.getAliasFromDb(txSimContext, name) + if err != nil { + r.log.Warn(err) + return nil, err + } + if certAliasInfo == nil { + err = fmt.Errorf("query alias failed, not found alias[%s], you should add alias first", name) + r.log.Warn(err) + return nil, err + } + hisCert := &commonPb.AliasCertInfo{} + for _, cert := range certAliasInfo.HisCerts { + if cert.BlockHeight <= uint64(height) { + hisCert = cert + } + } + return hisCert.Marshal() +} + +//func (r *CertManageRuntime) saveAllAlias(txSimContext protocol.TxSimContext, aliasStr string) error { +// allAliasBytes, err := txSimContext.Get(certManageContractName, []byte(certAliasKey+"all")) +// if err != nil { +// r.log.Warnf("save all alias failed, err: ", err.Error()) +// return err +// } +// allAlias := string(allAliasBytes) +// if len(allAlias) > 0 { +// allAlias += "," +// } +// allAlias += aliasStr +// _ = txSimContext.Put(certManageContractName, []byte(certAliasKey+"all"), []byte(allAlias)) +// return nil +//} + +func (r *CertManageRuntime) setAliasToDb(txSimContext protocol.TxSimContext, certAliasInfo *commonPb.AliasInfo) error { + certAliasBytes, err := certAliasInfo.Marshal() + if err != nil { + r.log.Warnf("inner error, proto marshal fail, err: ", err.Error()) + return err + } + alias := hex.EncodeToString([]byte(certAliasInfo.Alias)) + _ = txSimContext.Put(certManageContractName, []byte(certAliasKey+certAliasInfo.Alias), certAliasBytes) + _ = txSimContext.Put(certManageContractName, []byte(alias), certAliasInfo.NowCert.Cert) + + return nil +} + +func (r *CertManageRuntime) getAliasFromDb(txSimContext protocol.TxSimContext, aliasStr string) ( + *commonPb.AliasInfo, error) { + if utils.IsAnyBlank(aliasStr) { + err := fmt.Errorf("params[%s] is empty", paramNameAlias) + r.log.Warn(err) + return nil, err + } + if err := protocol.CheckKeyFieldStr(aliasStr, ""); err != nil { + r.log.Warn(err) + return nil, err + } + + certAliasBytes, err := txSimContext.Get(certManageContractName, []byte(certAliasKey+aliasStr)) + if err != nil { + r.log.Errorf("inner error, get alias from db failed, err: ", err.Error()) + return nil, err + } + + if certAliasBytes == nil { + return nil, nil + } + certAliasInfo := &commonPb.AliasInfo{} + err = proto.Unmarshal(certAliasBytes, certAliasInfo) + if err != nil { + r.log.Errorf("inner error, proto unmarshal AliasInfo fail, err: ", err.Error()) + return nil, err + } + return certAliasInfo, nil +} + +func (r *CertManageRuntime) setCertHash(txSimContext protocol.TxSimContext, nowCert *commonPb.AliasCertInfo) error { + ac, err := txSimContext.GetAccessControl() + if err != nil { + r.log.Errorf("txSimContext.GetAccessControl failed, err: %s", err.Error()) + return err + } + hashType := ac.GetHashAlg() + certHash, err := utils.GetCertificateIdHex(nowCert.Cert, hashType) + if err != nil { + r.log.Errorf("get certHash failed, err: %s", err.Error()) + return err + } + nowCert.Hash = certHash + return nil +} + +func (r *CertManageRuntime) addFreezeAliasArray(txSimContext protocol.TxSimContext, alias string) error { + aliases, err := r.getFreezeAliasArray(txSimContext) + if err != nil { + return err + } + aliases = append(aliases, alias) + + marshal, err := json.Marshal(aliases) + if err != nil { + r.log.Warnf("freezeKeyArray err: ", err.Error()) + return err + } + err = txSimContext.Put(certManageContractName, []byte(protocol.CertFreezeKey), marshal) + return nil +} + +func (r *CertManageRuntime) removeFreezeAliasArray(txSimContext protocol.TxSimContext, alias string) error { + aliases, err := r.getFreezeAliasArray(txSimContext) + if err != nil { + return err + } + idx := -1 + for i, a := range aliases { + if a == alias { + idx = i + break + } + } + if idx >= 0 { + aliases = append(aliases[:idx], aliases[idx+1:]...) + } + + marshal, err := json.Marshal(aliases) + if err != nil { + r.log.Warnf("freezeKeyArray err: ", err.Error()) + return err + } + err = txSimContext.Put(certManageContractName, []byte(protocol.CertFreezeKey), marshal) + return nil +} + +func (r *CertManageRuntime) getFreezeAliasArray(txSimContext protocol.TxSimContext) ([]string, error) { + freezeKeyArray := make([]string, 0) + freezeKeyArrayBytes, err := txSimContext.Get(certManageContractName, + []byte(protocol.CertAliasFreezeKey)) + if err != nil { + r.log.Warnf("txSimContext get CERT_ALIAS_FREEZE err: ", err.Error()) + return nil, err + } + + if len(freezeKeyArrayBytes) > 0 { + err := json.Unmarshal(freezeKeyArrayBytes, &freezeKeyArray) + if err != nil { + r.log.Warnf("unmarshal freeze alias array err: ", err.Error()) + return nil, err + } + } + return freezeKeyArray, nil +} diff --git a/certmgr/cert_manage_contract.go b/certmgr/cert_manage_contract.go index 981c887..e749ebc 100644 --- a/certmgr/cert_manage_contract.go +++ b/certmgr/cert_manage_contract.go @@ -17,6 +17,7 @@ import ( "encoding/pem" "errors" "fmt" + "regexp" "strings" bcx509 "chainmaker.org/chainmaker/common/v2/crypto/x509" @@ -35,6 +36,19 @@ const ( paramNameCertHashes = "cert_hashes" paramNameCerts = "certs" paramNameCertCrl = "cert_crl" + + paramBlockHeight = "block_height" + paramNameAlias = "alias" + paramNameCert = "cert" + paramNameAliases = "aliases" + maxHisCertsLen = 10 +) + +var ( + certManageContractName = syscontract.SystemContract_CERT_MANAGE.String() + certAliasKey = "cert_alias#" + aliasNameRegStr = "^[a-zA-Z0-9][a-zA-Z0-9_.,-]{0,63}$" + aliasNameReg = regexp.MustCompile(aliasNameRegStr) ) type CertManageContract struct { @@ -58,13 +72,29 @@ func registerCertManageContractMethods(log protocol.Logger) map[string]common.Co // cert manager certManageRuntime := &CertManageRuntime{log: log} - methodMap[syscontract.CertManageFunction_CERT_ADD.String()] = common.WrapResultFunc(certManageRuntime.Add) - methodMap[syscontract.CertManageFunction_CERTS_DELETE.String()] = common.WrapResultFunc(certManageRuntime.Delete) - methodMap[syscontract.CertManageFunction_CERTS_FREEZE.String()] = common.WrapResultFunc(certManageRuntime.Freeze) - methodMap[syscontract.CertManageFunction_CERTS_UNFREEZE.String()] = common.WrapResultFunc(certManageRuntime.Unfreeze) - methodMap[syscontract.CertManageFunction_CERTS_REVOKE.String()] = common.WrapResultFunc(certManageRuntime.Revoke) + methodMap[syscontract.CertManageFunction_CERT_ADD.String()] = common.WrapResultFunc( + certManageRuntime.Add) + methodMap[syscontract.CertManageFunction_CERTS_DELETE.String()] = common.WrapResultFunc( + certManageRuntime.Delete) + methodMap[syscontract.CertManageFunction_CERTS_FREEZE.String()] = common.WrapResultFunc( + certManageRuntime.Freeze) + methodMap[syscontract.CertManageFunction_CERTS_UNFREEZE.String()] = common.WrapResultFunc( + certManageRuntime.Unfreeze) + methodMap[syscontract.CertManageFunction_CERTS_REVOKE.String()] = common.WrapResultFunc( + certManageRuntime.Revoke) + + methodMap[syscontract.CertManageFunction_CERT_ALIAS_ADD.String()] = common.WrapResultFunc( + certManageRuntime.AddAlias) + methodMap[syscontract.CertManageFunction_CERT_ALIAS_UPDATE.String()] = common.WrapResultFunc( + certManageRuntime.UpdateAlias) + methodMap[syscontract.CertManageFunction_CERTS_ALIAS_DELETE.String()] = common.WrapResultFunc( + certManageRuntime.DeleteAlias) + // query - methodMap[syscontract.CertManageFunction_CERTS_QUERY.String()] = common.WrapResultFunc(certManageRuntime.Query) + methodMap[syscontract.CertManageFunction_CERTS_QUERY.String()] = common.WrapResultFunc( + certManageRuntime.Query) + methodMap[syscontract.CertManageFunction_CERTS_ALIAS_QUERY.String()] = common.WrapResultFunc( + certManageRuntime.QueryAlias) return methodMap } @@ -91,7 +121,7 @@ func (r *CertManageRuntime) Add(txSimContext protocol.TxSimContext, _ map[string return nil, err } - err = txSimContext.Put(syscontract.SystemContract_CERT_MANAGE.String(), []byte(certHash), memberInfo) + err = txSimContext.Put(certManageContractName, []byte(certHash), memberInfo) if err != nil { r.log.Warnf("certManage add cert failed, err: %s", err.Error()) return nil, err @@ -117,7 +147,7 @@ func (r *CertManageRuntime) Delete(txSimContext protocol.TxSimContext, params ma certHashes := strings.Split(certHashesStr, ",") for _, certHash := range certHashes { - bytes, err := txSimContext.Get(syscontract.SystemContract_CERT_MANAGE.String(), []byte(certHash)) + bytes, err := txSimContext.Get(certManageContractName, []byte(certHash)) if err != nil { r.log.Warnf("certManage delete the certHash failed, certHash[%s], err: %s", certHash, err.Error()) return nil, err @@ -130,7 +160,7 @@ func (r *CertManageRuntime) Delete(txSimContext protocol.TxSimContext, params ma return nil, errors.New(msg) } - err = txSimContext.Del(syscontract.SystemContract_CERT_MANAGE.String(), []byte(certHash)) + err = txSimContext.Del(certManageContractName, []byte(certHash)) if err != nil { r.log.Warnf("certManage txSimContext.Del failed, certHash[%s] err: %s", certHash, err.Error()) return nil, err @@ -156,7 +186,7 @@ func (r *CertManageRuntime) Query(txSimContext protocol.TxSimContext, params map certHashes := strings.Split(certHashesStr, ",") certInfos := make([]*commonPb.CertInfo, len(certHashes)) for i, certHash := range certHashes { - certBytes, err := txSimContext.Get(syscontract.SystemContract_CERT_MANAGE.String(), []byte(certHash)) + certBytes, err := txSimContext.Get(certManageContractName, []byte(certHash)) if err != nil { r.log.Warnf("certManage delete the certHash failed, certHash[%s] err: %s", certHash, err.Error()) return nil, err @@ -215,7 +245,7 @@ func (r *CertManageRuntime) Freeze(txSimContext protocol.TxSimContext, params ma return nil, err1 } certHashKey := protocol.CertFreezeKeyPrefix + certHash - certHashBytes, err1 := txSimContext.Get(syscontract.SystemContract_CERT_MANAGE.String(), []byte(certHashKey)) + certHashBytes, err1 := txSimContext.Get(certManageContractName, []byte(certHashKey)) if err1 != nil { r.log.Warnf("txSimContext get certHashKey certHashKey[%s], err:", certHashKey, err1.Error()) return nil, err1 @@ -228,7 +258,7 @@ func (r *CertManageRuntime) Freeze(txSimContext protocol.TxSimContext, params ma return nil, msg } - err = txSimContext.Put(syscontract.SystemContract_CERT_MANAGE.String(), []byte(certHashKey), []byte(cert)) + err = txSimContext.Put(certManageContractName, []byte(certHashKey), []byte(cert)) if err != nil { r.log.Warnf("txSimContext.Put err, err: %s", err.Error()) return nil, err @@ -251,7 +281,7 @@ func (r *CertManageRuntime) Freeze(txSimContext protocol.TxSimContext, params ma r.log.Warnf("freezeKeyArray err: ", err.Error()) return nil, err } - err = txSimContext.Put(syscontract.SystemContract_CERT_MANAGE.String(), []byte(protocol.CertFreezeKey), marshal) + err = txSimContext.Put(certManageContractName, []byte(protocol.CertFreezeKey), marshal) if err != nil { r.log.Warnf("txSimContext put CERT_FREEZE_KEY err ", err.Error()) return nil, err @@ -326,7 +356,7 @@ func (r *CertManageRuntime) Unfreeze(txSimContext protocol.TxSimContext, params r.log.Warnf("freezeKeyArray err: ", err.Error()) return nil, err } - err = txSimContext.Put(syscontract.SystemContract_CERT_MANAGE.String(), []byte(protocol.CertFreezeKey), marshal) + err = txSimContext.Put(certManageContractName, []byte(protocol.CertFreezeKey), marshal) if err != nil { r.log.Warnf("txSimContext put CERT_FREEZE_KEY err: ", err.Error()) return nil, err @@ -375,7 +405,7 @@ func (r *CertManageRuntime) Revoke(txSimContext protocol.TxSimContext, params ma crls = append(crls, crl) } - crlBytes, err := txSimContext.Get(syscontract.SystemContract_CERT_MANAGE.String(), []byte(protocol.CertRevokeKey)) + crlBytes, err := txSimContext.Get(certManageContractName, []byte(protocol.CertRevokeKey)) if err != nil { r.log.Warnf("get certManage crlList fail err: ", err.Error()) return nil, fmt.Errorf("get certManage crlList failed, err: %s", err) @@ -406,7 +436,7 @@ func (r *CertManageRuntime) Revoke(txSimContext protocol.TxSimContext, params ma } existed := false - crtListBytes1, err1 := txSimContext.Get(syscontract.SystemContract_CERT_MANAGE.String(), []byte(key)) + crtListBytes1, err1 := txSimContext.Get(certManageContractName, []byte(key)) if err1 != nil { r.log.Warnf("certManage txSimContext crtList err: ", err1.Error()) continue @@ -423,7 +453,7 @@ func (r *CertManageRuntime) Revoke(txSimContext protocol.TxSimContext, params ma Bytes: crtListBytes, }) - err = txSimContext.Put(syscontract.SystemContract_CERT_MANAGE.String(), []byte(key), toMemory) + err = txSimContext.Put(certManageContractName, []byte(key), toMemory) if err != nil { r.log.Warnf("certManage save crl certs err: ", err.Error()) return nil, err @@ -448,7 +478,7 @@ func (r *CertManageRuntime) Revoke(txSimContext protocol.TxSimContext, params ma r.log.Warnf("certManage marshal crlKeyList err: ", err.Error()) return nil, err } - err = txSimContext.Put(syscontract.SystemContract_CERT_MANAGE.String(), []byte(protocol.CertRevokeKey), crlBytesResult) + err = txSimContext.Put(certManageContractName, []byte(protocol.CertRevokeKey), crlBytesResult) if err != nil { r.log.Warnf("certManage txSimContext put CertRevokeKey err: ", err.Error()) return nil, err @@ -476,7 +506,7 @@ func (r *CertManageRuntime) getFreezeKeyArray(txSimContext protocol.TxSimContext // the freeze key array freezeKeyArray := make([]string, 0) - freezeKeyArrayBytes, err := txSimContext.Get(syscontract.SystemContract_CERT_MANAGE.String(), + freezeKeyArrayBytes, err := txSimContext.Get(certManageContractName, []byte(protocol.CertFreezeKey)) if err != nil { r.log.Warnf("txSimContext get CERT_FREEZE_KEY err: ", err.Error()) @@ -496,7 +526,7 @@ func (r *CertManageRuntime) getFreezeKeyArray(txSimContext protocol.TxSimContext func (r *CertManageRuntime) recoverFrozenCert(txSimContext protocol.TxSimContext, certHash string, freezeKeyArray []string, certFullHashes *bytes.Buffer, changed bool) ([]string, bool) { certHashKey := protocol.CertFreezeKeyPrefix + certHash - certHashBytes, err := txSimContext.Get(syscontract.SystemContract_CERT_MANAGE.String(), []byte(certHashKey)) + certHashBytes, err := txSimContext.Get(certManageContractName, []byte(certHashKey)) if err != nil { r.log.Warnf("txSimContext get certHashKey err certHashKey[%s] err: ", certHashKey, err.Error()) return nil, changed @@ -508,7 +538,7 @@ func (r *CertManageRuntime) recoverFrozenCert(txSimContext protocol.TxSimContext return nil, changed } - err = txSimContext.Del(syscontract.SystemContract_CERT_MANAGE.String(), []byte(certHashKey)) + err = txSimContext.Del(certManageContractName, []byte(certHashKey)) if err != nil { r.log.Warnf("certManage unfreeze txSimContext.Del failed, certHash[%s] err:%s", certHash, err.Error()) return nil, changed diff --git a/go.mod b/go.mod index 53d4c0f..4b7aa18 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,8 @@ require ( chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220118101118-f256fc9c55e6 chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220112085516-908b8478be8f chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20211214124250-621f11b35ab0 - chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220214071858-6aaf92e86f04 - chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220113081648-bbf6c1946b59 + chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220222070330-a4cb0fb1c1cb + chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220222022033-cdd42573294c chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220114120415-8e1af1e262a7 github.com/gogo/protobuf v1.3.2 github.com/golang/mock v1.6.0 diff --git a/go.sum b/go.sum index 47d2675..a0d0c4e 100644 --- a/go.sum +++ b/go.sum @@ -11,13 +11,17 @@ chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20211214124250-621f11b35ab0/go.mod chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20211214073209-1288f39035e8/go.mod h1:gDZodc1Kp6snzGXugS/REqfCqNNizhniQmjeOKUVf64= chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220110032709-5947499a1a6d/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI= chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220111065457-38aa34ce86a3/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI= -chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220119062501-d1b3a201f7fb h1:HmLJvvtUyRmiDc8rCtLdentg0alEXCRgtZB+WSqYs+4= -chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220119062501-d1b3a201f7fb/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI= -chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220214071858-6aaf92e86f04 h1:OLttQm33khJS+uFhomYEert2YHmtJVR5F8vYn9Tz3vI= -chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220214071858-6aaf92e86f04/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI= +chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220221052912-453b5b69acac h1:9l5S9cOEtmFGYBvOCrOpvwGdJoNtgSFIO0aojGKlIBk= +chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220221052912-453b5b69acac/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI= +chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220221085349-090417d6771d h1:oFDa558zBI69fT/vdHhTKcW5o4TgL93OE3Xq9XhMTEw= +chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220221085349-090417d6771d/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI= +chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220222070330-a4cb0fb1c1cb h1:mep7EBYlW7QBF7KqV3E0qMqXiBS/PqiwYKXOXzYopPI= +chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220222070330-a4cb0fb1c1cb/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI= chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220110033503-d6b4e5a065d9/go.mod h1:7VlxwX9MHyHpfAFw7OW+y7hUqawbp/GZKLeQlRDVZdk= chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220113081648-bbf6c1946b59 h1:SR3GsTur2WAsDllkmAWCxFtcWjzVWG9DIWDsYWnzfYs= chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220113081648-bbf6c1946b59/go.mod h1:SYkMoufkVVj4wI1JOU/YpV4Re4Z2i1WXgk+sn0ulWDk= +chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220222022033-cdd42573294c h1:2HaVkBUXqfAxToPNiTW2moP2Ax9oEQ3BMa/tERRcCO0= +chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220222022033-cdd42573294c/go.mod h1:SYkMoufkVVj4wI1JOU/YpV4Re4Z2i1WXgk+sn0ulWDk= chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220110033929-0723ce6bd6ac/go.mod h1:gcBoQ+BL9xodHvb5oh8SLfdo9IEOYzGx+XLsECTj5xk= chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220114120415-8e1af1e262a7 h1:RT1NbZf0M7i4p9WmDOoGD59W1FygpEMd5mL8Otzqa4w= chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220114120415-8e1af1e262a7/go.mod h1:GeDrATiYzHJ6tdzV3+81kBjCBy5Bb9fCjTQLZLE6kJo= -- GitLab