mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 15:35:09 +00:00
Enhance Go off_chain_data for consistency
Add some methods to the parsing API within the Go off_chain_data sample for consistency with the Node and Java implementations: - ToProto() on Block, Transaction and NamespaceReadWriteSet. - ValidationCode() on Transaction. - Creator() on Transaction Signed-off-by: Mark S. Lewis <Mark.S.Lewis@outlook.com>
This commit is contained in:
parent
cc85f96d9e
commit
4fabd87648
4 changed files with 62 additions and 1 deletions
|
|
@ -26,6 +26,10 @@ func (b *Block) Transactions() ([]*Transaction, error) {
|
||||||
return b.transactions()
|
return b.transactions()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Block) ToProto() *common.Block {
|
||||||
|
return b.block
|
||||||
|
}
|
||||||
|
|
||||||
func (b *Block) unmarshalTransactions() ([]*Transaction, error) {
|
func (b *Block) unmarshalTransactions() ([]*Transaction, error) {
|
||||||
envelopes, err := b.unmarshalEnvelopes()
|
envelopes, err := b.unmarshalEnvelopes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,10 @@ func (p *NamespaceReadWriteSet) ReadWriteSet() (*kvrwset.KVRWSet, error) {
|
||||||
return p.readWriteSet()
|
return p.readWriteSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *NamespaceReadWriteSet) ToProto() *rwset.NsReadWriteSet {
|
||||||
|
return p.nsReadWriteSet
|
||||||
|
}
|
||||||
|
|
||||||
func (p *NamespaceReadWriteSet) unmarshalReadWriteSet() (*kvrwset.KVRWSet, error) {
|
func (p *NamespaceReadWriteSet) unmarshalReadWriteSet() (*kvrwset.KVRWSet, error) {
|
||||||
result := &kvrwset.KVRWSet{}
|
result := &kvrwset.KVRWSet{}
|
||||||
if err := proto.Unmarshal(p.nsReadWriteSet.GetRwset(), result); err != nil {
|
if err := proto.Unmarshal(p.nsReadWriteSet.GetRwset(), result); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hyperledger/fabric-protos-go-apiv2/common"
|
"github.com/hyperledger/fabric-protos-go-apiv2/common"
|
||||||
|
"github.com/hyperledger/fabric-protos-go-apiv2/msp"
|
||||||
"github.com/hyperledger/fabric-protos-go-apiv2/peer"
|
"github.com/hyperledger/fabric-protos-go-apiv2/peer"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
@ -12,6 +13,7 @@ type payload struct {
|
||||||
commonPayload *common.Payload
|
commonPayload *common.Payload
|
||||||
statusCode int32
|
statusCode int32
|
||||||
channelHeader *common.ChannelHeader
|
channelHeader *common.ChannelHeader
|
||||||
|
creator *creatorIdentity
|
||||||
}
|
}
|
||||||
|
|
||||||
func parsePayload(commonPayload *common.Payload, statusCode int32) (*payload, error) {
|
func parsePayload(commonPayload *common.Payload, statusCode int32) (*payload, error) {
|
||||||
|
|
@ -19,7 +21,19 @@ func parsePayload(commonPayload *common.Payload, statusCode int32) (*payload, er
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &payload{commonPayload, statusCode, channelHeader}, nil
|
|
||||||
|
creator, err := unmarshalCreator(commonPayload)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result := &payload{
|
||||||
|
commonPayload: commonPayload,
|
||||||
|
statusCode: statusCode,
|
||||||
|
channelHeader: channelHeader,
|
||||||
|
creator: &creatorIdentity{creator},
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalChannelHeaderFrom(commonPayload *common.Payload) (*common.ChannelHeader, error) {
|
func unmarshalChannelHeaderFrom(commonPayload *common.Payload) (*common.ChannelHeader, error) {
|
||||||
|
|
@ -30,6 +44,20 @@ func unmarshalChannelHeaderFrom(commonPayload *common.Payload) (*common.ChannelH
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func unmarshalCreator(commonPayload *common.Payload) (*msp.SerializedIdentity, error) {
|
||||||
|
signatureHeader := &common.SignatureHeader{}
|
||||||
|
if err := proto.Unmarshal(commonPayload.GetHeader().GetSignatureHeader(), signatureHeader); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result := &msp.SerializedIdentity{}
|
||||||
|
if err := proto.Unmarshal(signatureHeader.GetCreator(), result); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (p *payload) endorserTransaction() (*endorserTransaction, error) {
|
func (p *payload) endorserTransaction() (*endorserTransaction, error) {
|
||||||
if !p.isEndorserTransaction() {
|
if !p.isEndorserTransaction() {
|
||||||
return nil, fmt.Errorf("unexpected payload type: %d", p.channelHeader.GetType())
|
return nil, fmt.Errorf("unexpected payload type: %d", p.channelHeader.GetType())
|
||||||
|
|
@ -50,3 +78,15 @@ func (p *payload) isEndorserTransaction() bool {
|
||||||
func (p *payload) isValid() bool {
|
func (p *payload) isValid() bool {
|
||||||
return p.statusCode == int32(peer.TxValidationCode_VALID)
|
return p.statusCode == int32(peer.TxValidationCode_VALID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type creatorIdentity struct {
|
||||||
|
creator *msp.SerializedIdentity
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *creatorIdentity) MspID() string {
|
||||||
|
return i.creator.GetMspid()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *creatorIdentity) Credentials() []byte {
|
||||||
|
return i.creator.GetIdBytes()
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package parser
|
package parser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/hyperledger/fabric-gateway/pkg/identity"
|
||||||
"github.com/hyperledger/fabric-protos-go-apiv2/common"
|
"github.com/hyperledger/fabric-protos-go-apiv2/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -16,6 +17,10 @@ func (t *Transaction) ChannelHeader() *common.ChannelHeader {
|
||||||
return t.payload.channelHeader
|
return t.payload.channelHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transaction) Creator() identity.Identity {
|
||||||
|
return t.payload.creator
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error) {
|
func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error) {
|
||||||
endorserTransaction, err := t.payload.endorserTransaction()
|
endorserTransaction, err := t.payload.endorserTransaction()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -37,3 +42,11 @@ func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error)
|
||||||
func (t *Transaction) IsValid() bool {
|
func (t *Transaction) IsValid() bool {
|
||||||
return t.payload.isValid()
|
return t.payload.isValid()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transaction) ToProto() *common.Payload {
|
||||||
|
return t.payload.commonPayload
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Transaction) ValidationCode() int32 {
|
||||||
|
return t.payload.statusCode
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue