1 Star 1 Fork 0

NineLightY / chainmake-sdk-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
sdk_private_system_contract.go 20.49 KB
一键复制 编辑 原始数据 按行查看 历史
NineLightY 提交于 2022-07-27 17:18 . init
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
/*
Copyright (C) BABEC. All rights reserved.
Copyright (C) THL A29 Limited, a Tencent company. All rights reserved.
SPDX-License-Identifier: Apache-2.0
*/
package chainmaker_sdk_go
import (
"errors"
"fmt"
"strconv"
"github.com/gogo/protobuf/proto"
"chainmaker.org/chainmaker/common/v2/json"
"chainmaker.org/chainmaker/pb-go/v2/common"
"chainmaker.org/chainmaker/pb-go/v2/syscontract"
"gitee.com/jsharkc/chainmake-sdk-go/utils"
)
const ContractResultCode_OK uint32 = 0 //todo pb create const
func (cc *ChainClient) SaveDir(orderId, txId string,
privateDir *common.StrSlice, withSyncResult bool, timeout int64) (*common.TxResponse, error) {
if txId == "" {
if cc.enableNormalKey {
txId = utils.GetRandTxId()
} else {
txId = utils.GetTimestampTxId()
}
}
cc.logger.Infof("[SDK] begin to save dir , [contract:%s]/[method:%s]/[txId:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_DIR.String(),
txId,
)
// 构造Payload
priDirBytes, err := privateDir.Marshal()
if err != nil {
return nil, fmt.Errorf("serielized private dir failed, %s", err.Error())
}
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyOrderId: []byte(orderId),
utils.KeyPrivateDir: priDirBytes,
})
payload := cc.CreatePayload(txId, common.TxType_INVOKE_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_DIR.String(), pairs, defaultSeq, nil)
resp, err := cc.sendContractRequest(payload, nil, timeout, withSyncResult)
if err != nil {
return resp, err
}
return resp, nil
}
func (cc *ChainClient) GetContract(contractName, codeHash string) (*common.PrivateGetContract, error) {
cc.logger.Infof("[SDK] begin to get contract , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_CONTRACT.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyContractName: []byte(contractName),
utils.KeyCodeHash: []byte(codeHash),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_CONTRACT.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
contractInfo := &common.PrivateGetContract{}
if err = proto.Unmarshal(resp.ContractResult.Result, contractInfo); err != nil {
return nil, fmt.Errorf("GetContract unmarshal contract info payload failed, %s", err.Error())
}
return contractInfo, nil
}
func (cc *ChainClient) SaveData(contractName string, contractVersion string, isDeployment bool, codeHash []byte,
reportHash []byte, result *common.ContractResult, codeHeader []byte, txId string, rwSet *common.TxRWSet,
sign []byte, events *common.StrSlice, privateReq []byte, withSyncResult bool,
timeout int64) (*common.TxResponse, error) {
if txId == "" {
if cc.enableNormalKey {
txId = utils.GetRandTxId()
} else {
txId = utils.GetTimestampTxId()
}
}
cc.logger.Infof("[SDK] begin to save data , [contract:%s]/[method:%s]/[txId:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_DATA.String(),
txId,
)
// 构造Payload
var rwSetStr string
if rwSet != nil {
rwb, err := rwSet.Marshal()
if err != nil {
return nil, fmt.Errorf("construct save data payload failed, %s", err.Error())
}
rwSetStr = string(rwb)
}
var eventsStr string
if events != nil {
eb, err := events.Marshal()
if err != nil {
return nil, fmt.Errorf("construct save data payload failed, %s", err.Error())
}
eventsStr = string(eb)
}
var resultStr string
if result != nil {
result, err := result.Marshal()
if err != nil {
return nil, fmt.Errorf("construct save data payload failed, %s", err.Error())
}
resultStr = string(result)
}
deployStr := strconv.FormatBool(isDeployment)
pairsMap := map[string][]byte{
utils.KeyResult: []byte(resultStr),
utils.KeyCodeHeader: codeHeader,
utils.KeyContractName: []byte(contractName),
utils.KeyVersion: []byte(contractVersion),
utils.KeyIsDeploy: []byte(deployStr),
utils.KeyCodeHash: codeHash,
utils.KeyRWSet: []byte(rwSetStr),
utils.KeyEvents: []byte(eventsStr),
utils.KeyReportHash: reportHash,
utils.KeySign: sign,
}
if isDeployment {
pairsMap[utils.KeyDeployReq] = privateReq
} else {
pairsMap[utils.KeyPrivateReq] = privateReq
}
pairs := paramsMap2KVPairs(pairsMap)
payload := cc.CreatePayload(txId, common.TxType_INVOKE_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_DATA.String(), pairs, defaultSeq, nil)
resp, err := cc.sendContractRequest(payload, nil, timeout, withSyncResult)
if err != nil {
return resp, err
}
return resp, nil
}
func (cc *ChainClient) GetData(contractName, key string) ([]byte, error) {
cc.logger.Infof("[SDK] begin to get data , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_DATA.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyContractName: []byte(contractName),
utils.KeyKey: []byte(key),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_DATA.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) GetDir(orderId string) ([]byte, error) {
cc.logger.Infof("[SDK] begin to get data , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_DATA.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyOrderId: []byte(orderId),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_DIR.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) CheckCallerCertAuth(payload string, orgIds []string, signPairs []*syscontract.SignInfo) (
*common.TxResponse, error) {
cc.logger.Infof("[SDK] begin to check caller cert auth , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_CHECK_CALLER_CERT_AUTH.String(),
)
orgIdsJson, err := json.Marshal(orgIds)
if err != nil {
return nil, fmt.Errorf("json marshal orgIds failed, err: %v", err)
}
signPairsJson, err := json.Marshal(signPairs)
if err != nil {
return nil, fmt.Errorf("json marshal signPairs failed, err: %v", err)
}
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyPayload: []byte(payload),
utils.KeyOrgIds: orgIdsJson,
utils.KeySignPairs: signPairsJson,
})
payloadBytes := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_CHECK_CALLER_CERT_AUTH.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payloadBytes, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payloadBytes.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp, nil
}
func (cc *ChainClient) SaveEnclaveCACert(
enclaveCACert, txId string, withSyncResult bool, timeout int64) (*common.TxResponse, error) {
if txId == "" {
if cc.enableNormalKey {
txId = utils.GetRandTxId()
} else {
txId = utils.GetTimestampTxId()
}
}
cc.logger.Infof("[SDK] begin to save ca cert , [contract:%s]/[method:%s]/[txId:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_CA_CERT.String(),
txId,
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyCaCert: []byte(enclaveCACert),
})
payload := cc.CreatePayload("", common.TxType_INVOKE_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_CA_CERT.String(), pairs, defaultSeq, nil)
resp, err := cc.sendContractRequest(payload, nil, timeout, withSyncResult)
if err != nil {
return resp, err
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp, nil
}
func (cc *ChainClient) SaveEnclaveReport(
enclaveId, report, txId string, withSyncResult bool, timeout int64) (*common.TxResponse, error) {
if txId == "" {
if cc.enableNormalKey {
txId = utils.GetRandTxId()
} else {
txId = utils.GetTimestampTxId()
}
}
cc.logger.Infof("[SDK] begin to save enclave report , [contract:%s]/[method:%s]/[txId:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_ENCLAVE_REPORT.String(),
txId,
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyEnclaveId: []byte(enclaveId),
utils.KeyReport: []byte(report),
})
payload := cc.CreatePayload("", common.TxType_INVOKE_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_ENCLAVE_REPORT.String(), pairs, defaultSeq, nil)
resp, err := cc.sendContractRequest(payload, nil, timeout, withSyncResult)
if err != nil {
return resp, err
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_INVOKE_CONTRACT.String(), err.Error())
}
return resp, nil
}
func (cc *ChainClient) CreateSaveEnclaveCACertPayload(enclaveCACert string, txId string) (*common.Payload, error) {
if txId == "" {
if cc.enableNormalKey {
txId = utils.GetRandTxId()
} else {
txId = utils.GetTimestampTxId()
}
}
cc.logger.Infof("[SDK] begin to save ca cert , [contract:%s]/[method:%s]/[txId:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_CA_CERT.String(),
txId,
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyCaCert: []byte(enclaveCACert),
})
payload := cc.CreatePayload("", common.TxType_INVOKE_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_CA_CERT.String(), pairs, defaultSeq, nil)
return payload, nil
}
func (cc *ChainClient) GetEnclaveCACert() ([]byte, error) {
cc.logger.Infof("[SDK] begin to get ca cert , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_CA_CERT.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_CA_CERT.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) CreateSaveEnclaveReportPayload(enclaveId, report, txId string) (*common.Payload, error) {
if txId == "" {
if cc.enableNormalKey {
txId = utils.GetRandTxId()
} else {
txId = utils.GetTimestampTxId()
}
}
cc.logger.Infof("[SDK] begin to save enclave report , [contract:%s]/[method:%s]/[txId:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_ENCLAVE_REPORT.String(),
txId,
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyEnclaveId: []byte(enclaveId),
utils.KeyReport: []byte(report),
})
payload := cc.CreatePayload("", common.TxType_INVOKE_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_ENCLAVE_REPORT.String(), pairs, defaultSeq, nil)
return payload, nil
}
func (cc *ChainClient) SaveRemoteAttestationProof(proof, txId string, withSyncResult bool,
timeout int64) (*common.TxResponse, error) {
if txId == "" {
if cc.enableNormalKey {
txId = utils.GetRandTxId()
} else {
txId = utils.GetTimestampTxId()
}
}
cc.logger.Infof("[SDK] begin to save_remote_attestation_proof , [contract:%s]/[method:%s]/[txId:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_REMOTE_ATTESTATION.String(),
txId,
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyProof: []byte(proof),
})
payload := cc.CreatePayload("", common.TxType_INVOKE_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_SAVE_REMOTE_ATTESTATION.String(), pairs, defaultSeq, nil)
resp, err := cc.sendContractRequest(payload, nil, timeout, withSyncResult)
if err != nil {
return resp, err
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_INVOKE_CONTRACT.String(), err.Error())
}
return resp, nil
}
func (cc *ChainClient) GetEnclaveEncryptPubKey(enclaveId string) ([]byte, error) {
cc.logger.Infof("[SDK] begin get_enclave_encrypt_pub_key() , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_ENCRYPT_PUB_KEY.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyEnclaveId: []byte(enclaveId),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_ENCRYPT_PUB_KEY.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) GetEnclaveVerificationPubKey(enclaveId string) ([]byte, error) {
cc.logger.Infof("[SDK] begin to get data , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_VERIFICATION_PUB_KEY.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyEnclaveId: []byte(enclaveId),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_VERIFICATION_PUB_KEY.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) GetEnclaveReport(enclaveId string) ([]byte, error) {
cc.logger.Infof("[SDK] begin to get data , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_REPORT.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyEnclaveId: []byte(enclaveId),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_REPORT.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) GetEnclaveChallenge(enclaveId string) ([]byte, error) {
cc.logger.Infof("[SDK] begin to get data , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_CHALLENGE.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyEnclaveId: []byte(enclaveId),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_CHALLENGE.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) GetEnclaveSignature(enclaveId string) ([]byte, error) {
cc.logger.Infof("[SDK] begin to get data , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_SIGNATURE.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyEnclaveId: []byte(enclaveId),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_SIGNATURE.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) GetEnclaveProof(enclaveId string) ([]byte, error) {
cc.logger.Infof("[SDK] begin to get data , [contract:%s]/[method:%s]",
syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_VERIFICATION_PUB_KEY.String(),
)
// 构造Payload
pairs := paramsMap2KVPairs(map[string][]byte{
utils.KeyEnclaveId: []byte(enclaveId),
})
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_PRIVATE_COMPUTE.String(),
syscontract.PrivateComputeFunction_GET_ENCLAVE_PROOF.String(), pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf("send %s failed, %s", payload.TxType.String(), err.Error())
}
if err = checkProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, common.TxType_QUERY_CONTRACT.String(), err.Error())
}
return resp.ContractResult.Result, nil
}
func paramsMap2KVPairs(params map[string][]byte) (kvPairs []*common.KeyValuePair) {
for key, val := range params {
kvPair := &common.KeyValuePair{
Key: key,
Value: val,
}
kvPairs = append(kvPairs, kvPair)
}
return
}
func checkProposalRequestResp(resp *common.TxResponse, needContractResult bool) error {
if resp.Code != common.TxStatusCode_SUCCESS {
return errors.New(resp.Message)
}
if needContractResult && resp.ContractResult == nil {
return fmt.Errorf("contract result is nil")
}
if resp.ContractResult != nil && resp.ContractResult.Code != ContractResultCode_OK {
return errors.New(resp.ContractResult.Message)
}
return nil
}
func (cc *ChainClient) SendMultiSigningRequest(payload *common.Payload, endorsers []*common.EndorsementEntry,
timeout int64, withSyncResult bool) (*common.TxResponse, error) {
return cc.sendContractRequest(payload, endorsers, timeout, withSyncResult)
}
1
https://gitee.com/jsharkc/chainmake-sdk-go.git
git@gitee.com:jsharkc/chainmake-sdk-go.git
jsharkc
chainmake-sdk-go
chainmake-sdk-go
cc4b8672c46d

搜索帮助