func (t *Transaction) Namespaces() Namespaces {
	rwSet, err := t.RWSet()
	if err != nil {
		panic(errors.Wrap(err, "filed getting rw set").Error())
	}
	return rwSet.Namespaces()
}
Namespaces returns the list of namespaces this transaction contains.
package endorser
import (
	"bytes"
	"github.com/pkg/errors"
	"github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
	view2 "github.com/hyperledger-labs/fabric-smart-client/platform/view"
	"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash"
	"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
)
type VerifierProvider interface {
	GetVerifier(identity view.Identity) (view2.Verifier, error)
}
type Transaction struct {
	view2.ServiceProvider
	Transaction       *fabric.Transaction
	verifierProviders []VerifierProvider
}
func (t *Transaction) ID() string {
	return t.Transaction.ID()
}
func (t *Transaction) Network() string {
	return t.Transaction.Network()
}
func (t *Transaction) Channel() string {
	return t.Transaction.Channel()
}
func (t *Transaction) FunctionAndParameters() (string, []string) {
	var params []string
	for _, parameter := range t.Transaction.Parameters() {
		params = append(params, string(parameter))
	}
	return t.Transaction.Function(), params
}
func (t *Transaction) SetProposal(chaincode string, version string, function string, params ...string) {
	t.Transaction.SetProposal(chaincode, version, function, params...)
}
func (t *Transaction) Chaincode() (string, string) {
	return t.Transaction.Chaincode(), t.Transaction.ChaincodeVersion()
}
func (t *Transaction) Parameters() [][]byte {
	return t.Transaction.Parameters()
}
func (t *Transaction) AppendParameter(p []byte) {
	t.Transaction.AppendParameter(p)
}
func (t *Transaction) SetParameterAt(i int, p []byte) error {
	return t.Transaction.SetParameterAt(i, p)
}
func (t *Transaction) RWSet() (*fabric.RWSet, error) {
	return t.Transaction.GetRWSet()
}
func (t *Transaction) Results() ([]byte, error) {
	rwset, err := t.RWSet()
	if err != nil {
		return nil, err
	}
	defer rwset.Done()
	return rwset.Bytes()
}
func (t *Transaction) Hash() ([]byte, error) {
	raw, err := t.Bytes()
	if err != nil {
		return nil, err
	}
	return hash.SHA256(raw)
}
func (t *Transaction) SetFromBytes(raw []byte) error {
	return t.Transaction.SetFromBytes(raw)
}
func (t *Transaction) SetFromEnvelopeBytes(raw []byte) error {
	return t.Transaction.SetFromEnvelopeBytes(raw)
}
func (t *Transaction) Bytes() ([]byte, error) {
	return t.Transaction.Bytes()
}
func (t *Transaction) BytesNoTransient() ([]byte, error) {
	return t.Transaction.BytesNoTransient()
}
func (t *Transaction) Raw() ([]byte, error) {
	return t.Transaction.Raw()
}
func (t *Transaction) Creator() view.Identity {
	return t.Transaction.Creator()
}
func (t *Transaction) Endorse() error {
	return t.Transaction.Endorse()
}
func (t *Transaction) EndorseWithIdentity(identity view.Identity) error {
	return t.Transaction.EndorseWithIdentity(identity)
}
func (t *Transaction) EndorseWithSigner(identity view.Identity, s fabric.Signer) error {
	return t.Transaction.EndorseWithSigner(identity, s)
}
func (t *Transaction) EndorseProposal() error {
	return t.Transaction.EndorseProposal()
}
func (t *Transaction) EndorseProposalWithIdentity(identity view.Identity) error {
	return t.Transaction.EndorseProposalWithIdentity(identity)
}
func (t *Transaction) EndorseProposalResponse() error {
	return t.Transaction.EndorseProposalResponse()
}
func (t *Transaction) EndorseProposalResponseWithIdentity(identity view.Identity) error {
	return t.Transaction.EndorseProposalResponseWithIdentity(identity)
}
func (t *Transaction) ProposalResponse() ([]byte, error) {
	return t.Transaction.ProposalResponse()
}
func (t *Transaction) AppendProposalResponse(response *fabric.ProposalResponse) error {
	return t.Transaction.AppendProposalResponse(response)
}
func (t *Transaction) HasBeenEndorsedBy(parties ...view.Identity) error {
	for _, party := range parties {
		found := false
		for _, response := range t.Transaction.ProposalResponses() {
			if bytes.Equal(response.Endorser(), party) {
				found = true
				break
			}
		}
		if !found {
			return errors.Errorf("party [%s] has not signed", party)
		}
	}
	return nil
}
func (t *Transaction) GetSignatureOf(party view.Identity) []byte {
	for _, response := range t.Transaction.ProposalResponses() {
		if bytes.Equal(response.Endorser(), party) {
			return response.EndorserSignature()
		}
	}
	return nil
}