新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

Commit 629f7469 authored by taifu's avatar taifu

Merge branch 'v2.2.0_alpha_alias' into 'v2.2.0_alpha_qc' (merge request !58)

v2.2.0_alpha_alias
parents 30ccae1f 663e6221
/*
* Copyright (C) BABEC. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/
package certmgr
import (
"bytes"
"encoding/hex"
"fmt"
"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) 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
}
// Stay new function
//
//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
// }
// err = r.addFreezeAliasArray(txSimContext, name)
// 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
// }
//
// err = r.removeFreezeAliasArray(txSimContext, name)
// if err != nil {
// return nil, err
// }
// r.log.Infof("unfreeze alias success, alias[%s]", name)
// }
// return []byte("ok"), 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
// }
// return txSimContext.Put(certManageContractName, []byte(protocol.CertFreezeKey), marshal)
//}
//
//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
// }
// return txSimContext.Put(certManageContractName, []byte(protocol.CertFreezeKey), marshal)
//}
//
//func (r *CertManageRuntime) getFreezeAliasArray(txSimContext protocol.TxSimContext) ([]string, error) {
// freezeKeyArray := make([]string, 0)
// freezeKeyArrayBytes, err := txSimContext.Get(certManageContractName,
// []byte(protocol.CertFreezeKey))
// 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
//}
//
//
//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()
//}
/*
* Copyright (C) BABEC. All rights reserved.
* Copyright (C) THL A29 Limited, a Tencent company. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/
package certmgr
import (
"fmt"
"testing"
commonPb "chainmaker.org/chainmaker/pb-go/v2/common"
"github.com/golang/protobuf/proto"
"github.com/stretchr/testify/assert"
)
func Test_AddAlias(t *testing.T) {
mgrRuntime, txSimContext, fn := initEnv(t)
defer fn()
// normal
params := make(map[string][]byte)
params[paramNameAlias] = []byte("alias01")
result, err := mgrRuntime.AddAlias(txSimContext, params)
assert.Nil(t, err)
assert.Equal(t, "ok", string(result))
fmt.Printf("add alias success. ")
// no param
_, err = mgrRuntime.AddAlias(txSimContext, nil)
assert.NotNil(t, err)
// bad param
params[paramNameAlias] = []byte("alias01$*^&*(")
_, err = mgrRuntime.AddAlias(txSimContext, params)
assert.NotNil(t, err)
// to lang alias
params[paramNameAlias] = []byte("rtyuighjksdfisdfsuf65s76f89dsfsdf878s9df87sd6f78sd8fs7d76fs8df8s76df78sdf86sd7f78dsfs8df78")
_, err = mgrRuntime.AddAlias(txSimContext, params)
assert.NotNil(t, err)
}
func Test_UpdateAlias(t *testing.T) {
mgrRuntime, txSimContext, fn := initEnv(t)
defer fn()
// no params
result, err := mgrRuntime.UpdateAlias(txSimContext, nil)
assert.NotNil(t, err)
assert.Nil(t, result)
// bad params
params := make(map[string][]byte)
params[paramNameAlias] = []byte("alias02%^&")
params[paramNameCert] = getOrg1Client1Signer().MemberInfo
result, err = mgrRuntime.UpdateAlias(txSimContext, params)
assert.NotNil(t, err)
// no alias add
params[paramNameAlias] = []byte("alias02")
params[paramNameCert] = getOrg1Client1Signer().MemberInfo
result, err = mgrRuntime.UpdateAlias(txSimContext, params)
assert.NotNil(t, err)
// add alias
params2 := make(map[string][]byte)
params2[paramNameAlias] = []byte("alias02")
result2, err2 := mgrRuntime.AddAlias(txSimContext, params2)
assert.Nil(t, err2)
assert.Equal(t, "ok", string(result2))
fmt.Printf("add alias success. ")
// bad cert
params[paramNameAlias] = []byte("alias02")
params[paramNameCert] = []byte("getOrg1Client1Signer().MemberInfo")
result, err = mgrRuntime.UpdateAlias(txSimContext, params)
assert.NotNil(t, err)
// bad org
params[paramNameAlias] = []byte("alias02")
params[paramNameCert] = getOrg2Client1Signer().MemberInfo
result, err = mgrRuntime.UpdateAlias(txSimContext, params)
assert.NotNil(t, err)
// same cert
params[paramNameAlias] = []byte("alias02")
params[paramNameCert] = getOrg1Client1Signer().MemberInfo
result, err = mgrRuntime.UpdateAlias(txSimContext, params)
assert.NotNil(t, err)
// normal
params[paramNameAlias] = []byte("alias02")
params[paramNameCert] = getOrg1Admin1Signer().MemberInfo
result, err = mgrRuntime.UpdateAlias(txSimContext, params)
assert.Nil(t, err)
assert.Equal(t, "ok", string(result2))
for i := 0; i < 11; i++ {
params[paramNameCert] = getOrg1Client1Signer().MemberInfo
result, err = mgrRuntime.UpdateAlias(txSimContext, params)
params[paramNameCert] = getOrg1Admin1Signer().MemberInfo
result, err = mgrRuntime.UpdateAlias(txSimContext, params)
}
params[paramNameAliases] = []byte("alias02")
result, err = mgrRuntime.QueryAlias(txSimContext, params)
assert.Nil(t, err)
a := commonPb.AliasInfos{}
err = proto.Unmarshal(result, &a)
assert.Nil(t, err)
assert.Equal(t, len(a.AliasInfos[0].HisCerts), maxHisCertsLen)
}
func Test_DeleteAlias(t *testing.T) {
mgrRuntime, txSimContext, fn := initEnv(t)
defer fn()
// no params
result, err := mgrRuntime.DeleteAlias(txSimContext, nil)
assert.NotNil(t, err)
assert.Nil(t, result)
// no alias add
params := make(map[string][]byte)
params[paramNameAliases] = []byte("alias03")
result, err = mgrRuntime.DeleteAlias(txSimContext, nil)
assert.NotNil(t, err)
assert.Nil(t, result)
// add alias
params2 := make(map[string][]byte)
params2[paramNameAlias] = []byte("alias03")
result2, err2 := mgrRuntime.AddAlias(txSimContext, params2)
assert.Nil(t, err2)
assert.Equal(t, "ok", string(result2))
fmt.Printf("add alias success. ")
// bad org
mgrRuntime2, txSimContext2, fn2 := initEnvSender2(t)
defer fn2()
params[paramNameAliases] = []byte("alias03")
params[paramNameCert] = getOrg2Client1Signer().MemberInfo
result, err = mgrRuntime2.DeleteAlias(txSimContext2, params)
assert.NotNil(t, err)
// normal
params[paramNameAliases] = []byte("alias03")
params[paramNameCert] = getOrg1Client1Signer().MemberInfo
result, err = mgrRuntime.DeleteAlias(txSimContext, params)
assert.Nil(t, err)
assert.Equal(t, "ok", string(result2))
// dep delete
params[paramNameAliases] = []byte("alias03")
params[paramNameCert] = getOrg1Client1Signer().MemberInfo
result, err = mgrRuntime.DeleteAlias(txSimContext, params)
assert.NotNil(t, err)
}
func Test_QueryAlias(t *testing.T) {
mgrRuntime, txSimContext, fn := initEnv(t)
defer fn()
// no params
result, err := mgrRuntime.QueryAlias(txSimContext, nil)
assert.NotNil(t, err)
// not found
params := make(map[string][]byte)
params[paramNameAliases] = []byte("alias04")
result, err = mgrRuntime.QueryAlias(txSimContext, params)
assert.NotNil(t, err)
// add alias
params[paramNameAlias] = []byte("alias04")
result2, err2 := mgrRuntime.AddAlias(txSimContext, params)
assert.Nil(t, err2)
assert.Equal(t, "ok", string(result2))
fmt.Printf("add alias success. ")
// normal found
params[paramNameAliases] = []byte("alias04")
result, err = mgrRuntime.QueryAlias(txSimContext, params)
assert.Nil(t, err)
a := commonPb.AliasInfos{}
err = proto.Unmarshal(result, &a)
assert.Nil(t, err)
assert.Equal(t, a.AliasInfos[0].Alias, "alias04")
}
......@@ -17,6 +17,7 @@ import (
"encoding/pem"
"errors"
"fmt"
"regexp"
"strings"
bcx509 "chainmaker.org/chainmaker/common/v2/crypto/x509"
......@@ -35,6 +36,18 @@ const (
paramNameCertHashes = "cert_hashes"
paramNameCerts = "certs"
paramNameCertCrl = "cert_crl"
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 +71,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 +120,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 +146,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 +159,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 +185,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 +244,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 +257,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 +280,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 +355,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 +404,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 +435,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 +452,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 +477,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 +505,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 +525,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 +537,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
......
......@@ -9,6 +9,7 @@ package certmgr
import (
"fmt"
"sync"
"testing"
"chainmaker.org/chainmaker/pb-go/v2/accesscontrol"
......@@ -61,6 +62,20 @@ func Test_DeleteCert(t *testing.T) {
var _ protocol.TxSimContext = (*mock.MockTxSimContext)(nil)
func initEnv(t *testing.T) (*CertManageRuntime, *mock.MockTxSimContext, func()) {
r, m, f := initEnvCore(t)
m.EXPECT().GetSender().Return(getOrg1Client1Signer()).AnyTimes()
return r, m, f
}
var cache = NewCacheMock()
func initEnvSender2(t *testing.T) (*CertManageRuntime, *mock.MockTxSimContext, func()) {
r, m, f := initEnvCore(t)
m.EXPECT().GetSender().Return(getOrg2Client1Signer()).AnyTimes()
return r, m, f
}
func initEnvCore(t *testing.T) (*CertManageRuntime, *mock.MockTxSimContext, func()) {
certMgrRuntime := &CertManageRuntime{NewLogger()}
ctrl := gomock.NewController(t)
txSimContext := mock.NewMockTxSimContext(ctrl)
......@@ -69,7 +84,6 @@ func initEnv(t *testing.T) (*CertManageRuntime, *mock.MockTxSimContext, func())
acTest.EXPECT().GetHashAlg().Return("SHA256").AnyTimes()
txSimContext.EXPECT().GetAccessControl().Return(acTest, nil).AnyTimes()
cache := NewCacheMock()
txSimContext.EXPECT().Put(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
func(name string, key []byte, value []byte) error {
cache.Put(name, string(key), value)
......@@ -91,6 +105,7 @@ func initEnv(t *testing.T) (*CertManageRuntime, *mock.MockTxSimContext, func())
},
}
}).AnyTimes()
txSimContext.EXPECT().GetBlockHeight().Return(uint64(1)).AnyTimes()
return certMgrRuntime, txSimContext, func() { ctrl.Finish() }
}
......@@ -105,6 +120,24 @@ func getOrg1Client1Signer() *accesscontrol.Member {
MemberInfo: []byte(certStr),
}
}
func getOrg1Admin1Signer() *accesscontrol.Member {
certStr := "-----BEGIN CERTIFICATE-----\nMIIChzCCAi2gAwIBAgIDAwGbMAoGCCqGSM49BAMCMIGKMQswCQYDVQQGEwJDTjEQ\nMA4GA1UECBMHQmVpamluZzEQMA4GA1UEBxMHQmVpamluZzEfMB0GA1UEChMWd3gt\nb3JnMS5jaGFpbm1ha2VyLm9yZzESMBAGA1UECxMJcm9vdC1jZXJ0MSIwIAYDVQQD\nExljYS53eC1vcmcxLmNoYWlubWFrZXIub3JnMB4XDTIwMTIwODA2NTM0M1oXDTI1\nMTIwNzA2NTM0M1owgY8xCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAw\nDgYDVQQHEwdCZWlqaW5nMR8wHQYDVQQKExZ3eC1vcmcxLmNoYWlubWFrZXIub3Jn\nMQ4wDAYDVQQLEwVhZG1pbjErMCkGA1UEAxMiYWRtaW4xLnNpZ24ud3gtb3JnMS5j\naGFpbm1ha2VyLm9yZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABORqoYNAw8ax\n9QOD94VaXq1dCHguarSKqAruEI39dRkm8Vu2gSHkeWlxzvSsVVqoN6ATObi2ZohY\nKYab2s+/QA2jezB5MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMCkG\nA1UdDgQiBCDZOtAtHzfoZd/OQ2Jx5mIMgkqkMkH4SDvAt03yOrRnBzArBgNVHSME\nJDAigCA1JD9xHLm3xDUukx9wxXMx+XQJwtng+9/sHFBf2xCJZzAKBggqhkjOPQQD\nAgNIADBFAiEAiGjIB8Wb8mhI+ma4F3kCW/5QM6tlxiKIB5zTcO5E890CIBxWDICm\nAod1WZHJajgnDQ2zEcFF94aejR9dmGBB/P//\n-----END CERTIFICATE-----\n"
return &accesscontrol.Member{
OrgId: "wx-org1.chainmaker.org",
MemberType: accesscontrol.MemberType_CERT,
MemberInfo: []byte(certStr),
}
}
func getOrg2Client1Signer() *accesscontrol.Member {
certStr := "-----BEGIN CERTIFICATE-----\nMIICiTCCAi+gAwIBAgIDA+zYMAoGCCqGSM49BAMCMIGKMQswCQYDVQQGEwJDTjEQ\nMA4GA1UECBMHQmVpamluZzEQMA4GA1UEBxMHQmVpamluZzEfMB0GA1UEChMWd3gt\nb3JnMi5jaGFpbm1ha2VyLm9yZzESMBAGA1UECxMJcm9vdC1jZXJ0MSIwIAYDVQQD\nExljYS53eC1vcmcyLmNoYWlubWFrZXIub3JnMB4XDTIwMTIwODA2NTM0M1oXDTI1\nMTIwNzA2NTM0M1owgZExCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAw\nDgYDVQQHEwdCZWlqaW5nMR8wHQYDVQQKExZ3eC1vcmcyLmNoYWlubWFrZXIub3Jn\nMQ8wDQYDVQQLEwZjbGllbnQxLDAqBgNVBAMTI2NsaWVudDEuc2lnbi53eC1vcmcy\nLmNoYWlubWFrZXIub3JnMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZd92CJez\nCiOMzLSTrJfX5vIUArCycg05uKru2qFaX0uvZUCwNxbfSuNvkHRXE8qIBUhTbg1Q\nR9rOlfDY1WfgMaN7MHkwDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYGBFUdJQAw\nKQYDVR0OBCIEICfLatSyyebzRsLbnkNKZJULB2bZOtG+88NqvAHCsXa3MCsGA1Ud\nIwQkMCKAIPGP1bPT4/Lns2PnYudZ9/qHscm0pGL6Kfy+1CAFWG0hMAoGCCqGSM49\nBAMCA0gAMEUCIQDzHrEHrGNtoNfB8jSJrGJU1qcxhse74wmDgIdoGjvfTwIgabRJ\nJNvZKRpa/VyfYi3TXa5nhHRIn91ioF1dQroHQFc=\n-----END CERTIFICATE-----\n"
return &accesscontrol.Member{
OrgId: "wx-org2.chainmaker.org",
MemberType: accesscontrol.MemberType_CERT,
MemberInfo: []byte(certStr),
}
}
func NewLogger() protocol.Logger {
cmLogger := &test.GoLogger{}
return cmLogger
......@@ -118,6 +151,7 @@ func realKey(name, key string) string {
type CacheMock struct {
content map[string][]byte
lock sync.Mutex
}
func NewCacheMock() *CacheMock {
......@@ -127,23 +161,33 @@ func NewCacheMock() *CacheMock {
}
func (c *CacheMock) Put(name, key string, value []byte) {
c.lock.Lock()
defer c.lock.Unlock()
c.content[realKey(name, key)] = value
}
func (c *CacheMock) Get(name, key string) []byte {
c.lock.Lock()
defer c.lock.Unlock()
return c.content[realKey(name, key)]
}
func (c *CacheMock) Del(name, key string) error {
c.lock.Lock()
defer c.lock.Unlock()
delete(c.content, realKey(name, key))
return nil
}
func (c *CacheMock) GetByKey(key string) []byte {
c.lock.Lock()
defer c.lock.Unlock()
return c.content[key]
}
func (c *CacheMock) Keys() []string {
c.lock.Lock()
defer c.lock.Unlock()
sc := make([]string, 0)
for k := range c.content {
sc = append(sc, k)
......
......@@ -3,13 +3,13 @@ module chainmaker.org/chainmaker/vm-native/v2
go 1.15
require (
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220113072252-aecb4f7ffef0
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/utils/v2 v2.1.1-0.20220114120415-8e1af1e262a7
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220124080752-bc3cfc3e0532
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220301062133-c3850a6efa7f
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220302084404-928bd4a6131a
chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20220128022235-c984177a37cc
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220222070330-a4cb0fb1c1cb
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220228111620-71485ecb4450
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220124072923-e59e8500c1a7
github.com/gogo/protobuf v1.3.2
github.com/golang/mock v1.6.0
github.com/golang/protobuf v1.5.2
......
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220113072252-aecb4f7ffef0 h1:iCWWSFcQTy/jos6Q3X0QUl3Blp/lyFKFnxKRpWUSmQY=
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220113072252-aecb4f7ffef0/go.mod h1:AR2MszGq1lxI9sHfqj/80cYQ0TMICMT1cANDeNNxv+s=
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220124080752-bc3cfc3e0532 h1:YsQB/DV7dhNtaDsC6X9EcbEwVWfAau0Ytu8veaDhL10=
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220124080752-bc3cfc3e0532/go.mod h1:b2E2/d02/J5xnw4aMfpw2QjPuWkmzfxWSUMjlbm+pew=
chainmaker.org/chainmaker/common/v2 v2.1.1-0.20211214041159-fe0b2240f08c/go.mod h1:mxLliE20J5mML421llb1T8vj9VtULEMGDA88TITgl68=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20211223085411-e4d0e79b2fb7/go.mod h1:mxLliE20J5mML421llb1T8vj9VtULEMGDA88TITgl68=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220118101118-f256fc9c55e6 h1:S1cCAfr20W+yV2oiFi64Mm0tCi/amQ01vc6W5fubQwQ=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220118101118-f256fc9c55e6/go.mod h1:mxLliE20J5mML421llb1T8vj9VtULEMGDA88TITgl68=
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220112085516-908b8478be8f h1:LrJM1BxZSNuVu4856jIHefku2/0dNGwVoIsvHCgEQi8=
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220112085516-908b8478be8f/go.mod h1:ylpW9ir14psujTtKb6qQW81aKhnhjzWW3n9XpjD9S0A=
chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20211214124250-621f11b35ab0 h1:62Lqj463DA9D9g+B8Ciy9RgVf9KmP+4Ayyu0MHiGIJs=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220127064703-4da19a869e9d/go.mod h1:mxLliE20J5mML421llb1T8vj9VtULEMGDA88TITgl68=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220301062133-c3850a6efa7f h1:jo/JtM9stV2B4R9Cnz1n3obhUDKwqN7QoAtPzPlB3fo=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220301062133-c3850a6efa7f/go.mod h1:NCQFjdcfzhgOM6r4hRjYxelSrrS4fdUsfAHLtTdq23w=
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220302084404-928bd4a6131a h1:GVyAHl4Xb2RZjmuOZBADJ5wcQGNrfStcS8aIsjfDGsE=
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220302084404-928bd4a6131a/go.mod h1:ylpW9ir14psujTtKb6qQW81aKhnhjzWW3n9XpjD9S0A=
chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20211214124250-621f11b35ab0/go.mod h1:pGuJzxvh/JywvHX2+ezy+Xts/Pajw4PGspKGc27U1ow=
chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20220128022235-c984177a37cc h1:Z1MYMdK+SoXjiibzy/lnF76tBa5/ZriZD0nZY5gdPfc=
chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20220128022235-c984177a37cc/go.mod h1:9SGr3+IxowsghxElUTsCgbAKhUGHsa/gm0kNDJQFcHk=
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.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/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=
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220228111620-71485ecb4450 h1:Rlyottfj8S2bJ8rUkDhXnRUuZw91NMF4vo/rGjZZlhc=
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220228111620-71485ecb4450/go.mod h1:SYkMoufkVVj4wI1JOU/YpV4Re4Z2i1WXgk+sn0ulWDk=
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220124072923-e59e8500c1a7 h1:Nai+KPSundHORj3UyDnVLmX6bZLIwgRy2PLgi6GmZ8g=
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220124072923-e59e8500c1a7/go.mod h1:GeDrATiYzHJ6tdzV3+81kBjCBy5Bb9fCjTQLZLE6kJo=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
......@@ -372,6 +371,7 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.4.3-0.20220104015952-9111bb834a68/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment