├── .github
└── workflows
│ ├── codeql-analysis.yml
│ ├── git.yml
│ ├── golangci-lint.yml
│ └── tests.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── SECURITY.md
├── checks.mk
├── ci
└── scripts
│ ├── download_fabric.sh
│ ├── install_softhsm.sh
│ └── setup_softhsm.sh
├── cmd
├── fsccli
│ ├── main.go
│ ├── main_test.go
│ ├── testdata
│ │ └── fabric_iou.yaml
│ └── version
│ │ └── version.go
└── node
│ ├── main.go
│ └── main_test.go
├── deps.go
├── docs
├── core-fabric.md
├── db-driver.md
├── design.md
├── fabric-sdk.md
├── fabric
│ ├── drivers.md
│ └── fabricdev
│ │ ├── core
│ │ └── fabricdev
│ │ │ ├── channelprovider.go
│ │ │ ├── driver
│ │ │ └── provider.go
│ │ │ ├── ledger
│ │ │ └── ledger.go
│ │ │ ├── transaction
│ │ │ └── manager.go
│ │ │ └── vault
│ │ │ ├── vault.go
│ │ │ └── version.go
│ │ └── sdk
│ │ ├── dig
│ │ ├── sdk.go
│ │ └── sdk_test.go
│ │ └── fabricdev
│ │ └── providers.go
├── imgs
│ ├── approvers_based_example.png
│ ├── chaincode_based_example.png
│ ├── fabric-sdk.png
│ ├── networks.png
│ ├── stack.png
│ └── view-sdk.png
├── monitoring.md
├── orion-sdk.md
├── sdk.md
├── view-sdk.md
└── view
│ └── api.md
├── go.mod
├── go.sum
├── integration
├── fabric
│ ├── atsa
│ │ ├── README.md
│ │ ├── chaincode
│ │ │ ├── README.md
│ │ │ ├── atsa_suite_test.go
│ │ │ ├── atsa_test.go
│ │ │ ├── chaincode
│ │ │ │ ├── asset_transfer.go
│ │ │ │ └── asset_transfer_queries.go
│ │ │ ├── client.go
│ │ │ ├── topology.go
│ │ │ └── views
│ │ │ │ ├── assets.go
│ │ │ │ ├── buyer.go
│ │ │ │ ├── seller.go
│ │ │ │ └── states.go
│ │ └── fsc
│ │ │ ├── README.md
│ │ │ ├── atsa_suite_test.go
│ │ │ ├── atsa_test.go
│ │ │ ├── client
│ │ │ └── client.go
│ │ │ ├── diagrams
│ │ │ ├── agree.puml
│ │ │ ├── approver
│ │ │ │ ├── agree.puml
│ │ │ │ └── issue.puml
│ │ │ ├── issue.puml
│ │ │ ├── state_certification.puml
│ │ │ ├── transfer.puml
│ │ │ └── transfer_with_sc.puml
│ │ │ ├── sdk.go
│ │ │ ├── states
│ │ │ ├── states.go
│ │ │ └── states_test.go
│ │ │ ├── topology.go
│ │ │ └── views
│ │ │ ├── accept.go
│ │ │ ├── agree.go
│ │ │ ├── approver.go
│ │ │ ├── issue.go
│ │ │ └── transfer.go
│ ├── common
│ │ └── views
│ │ │ └── finality.go
│ ├── events
│ │ └── chaincode
│ │ │ ├── chaincode
│ │ │ ├── events
│ │ │ │ └── events.go
│ │ │ └── main.go
│ │ │ ├── client.go
│ │ │ ├── events_suite_test.go
│ │ │ ├── events_test.go
│ │ │ ├── newChaincode
│ │ │ ├── events
│ │ │ │ └── events.go
│ │ │ └── main.go
│ │ │ ├── topology.go
│ │ │ └── views
│ │ │ ├── events.go
│ │ │ ├── multipleEvents.go
│ │ │ └── multipleListeners.go
│ ├── iou
│ │ ├── commands.go
│ │ ├── diagrams
│ │ │ ├── iou.png
│ │ │ └── iou.puml
│ │ ├── iou_suite_test.go
│ │ ├── iou_test.go
│ │ ├── sdk.go
│ │ ├── states
│ │ │ └── state.go
│ │ ├── topology.go
│ │ └── views
│ │ │ ├── approver.go
│ │ │ ├── borrower.go
│ │ │ ├── lender.go
│ │ │ ├── query.go
│ │ │ └── utils.go
│ ├── iouhsm
│ │ ├── iou_suite_test.go
│ │ ├── iou_test.go
│ │ └── topology.go
│ ├── stoprestart
│ │ ├── initiator.go
│ │ ├── responder.go
│ │ ├── stoprestart_suite_test.go
│ │ ├── stoprestart_test.go
│ │ └── topology.go
│ └── twonets
│ │ ├── sdk.go
│ │ ├── topology.go
│ │ ├── twonets_suite_test.go
│ │ ├── twonets_test.go
│ │ └── views
│ │ ├── ping.go
│ │ └── pong.go
├── fsc
│ ├── pingpong
│ │ ├── README.md
│ │ ├── cmd
│ │ │ ├── initiator
│ │ │ │ └── main.go
│ │ │ └── responder
│ │ │ │ └── main.go
│ │ ├── factory.go
│ │ ├── initiator.go
│ │ ├── mock
│ │ │ ├── factory.go
│ │ │ ├── initiator.go
│ │ │ └── responder.go
│ │ ├── pingpong_suite_test.go
│ │ ├── pingpong_test.go
│ │ ├── responder.go
│ │ ├── stream.go
│ │ ├── testdata
│ │ │ ├── conf.json
│ │ │ ├── fsc
│ │ │ │ ├── crypto-config.yaml
│ │ │ │ ├── crypto
│ │ │ │ │ ├── ca-certs.pem
│ │ │ │ │ └── peerOrganizations
│ │ │ │ │ │ └── fsc.example.com
│ │ │ │ │ │ ├── ca
│ │ │ │ │ │ ├── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ └── Admin@fsc.example.com-cert.pem
│ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ └── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ ├── peers
│ │ │ │ │ │ ├── initiator.fsc.example.com
│ │ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ │ │ └── Admin@fsc.example.com-cert.pem
│ │ │ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ │ │ └── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ │ │ └── initiator.fsc.example.com-cert.pem
│ │ │ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ │ └── tls
│ │ │ │ │ │ │ │ ├── ca.crt
│ │ │ │ │ │ │ │ ├── server.crt
│ │ │ │ │ │ │ │ └── server.key
│ │ │ │ │ │ └── responder.fsc.example.com
│ │ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ │ └── Admin@fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ │ └── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ │ └── responder.fsc.example.com-cert.pem
│ │ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ │ └── tls
│ │ │ │ │ │ │ ├── ca.crt
│ │ │ │ │ │ │ ├── server.crt
│ │ │ │ │ │ │ └── server.key
│ │ │ │ │ │ ├── tlsca
│ │ │ │ │ │ ├── priv_sk
│ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ └── users
│ │ │ │ │ │ ├── Admin@fsc.example.com
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ │ └── Admin@fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ │ └── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ │ └── Admin@fsc.example.com-cert.pem
│ │ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ └── tls
│ │ │ │ │ │ │ ├── ca.crt
│ │ │ │ │ │ │ ├── client.crt
│ │ │ │ │ │ │ └── client.key
│ │ │ │ │ │ ├── User1@fsc.example.com
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ │ └── User1@fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ │ └── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ │ └── User1@fsc.example.com-cert.pem
│ │ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ └── tls
│ │ │ │ │ │ │ ├── ca.crt
│ │ │ │ │ │ │ ├── client.crt
│ │ │ │ │ │ │ └── client.key
│ │ │ │ │ │ ├── User2@fsc.example.com
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ │ └── User2@fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ │ └── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ │ └── User2@fsc.example.com-cert.pem
│ │ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ └── tls
│ │ │ │ │ │ │ ├── ca.crt
│ │ │ │ │ │ │ ├── client.crt
│ │ │ │ │ │ │ └── client.key
│ │ │ │ │ │ ├── initiator@fsc.example.com
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ │ └── initiator@fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ │ └── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ │ └── initiator@fsc.example.com-cert.pem
│ │ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ └── tls
│ │ │ │ │ │ │ ├── ca.crt
│ │ │ │ │ │ │ ├── client.crt
│ │ │ │ │ │ │ └── client.key
│ │ │ │ │ │ └── responder@fsc.example.com
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ └── responder@fsc.example.com-cert.pem
│ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ └── ca.fsc.example.com-cert.pem
│ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ └── responder@fsc.example.com-cert.pem
│ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ └── tlsca.fsc.example.com-cert.pem
│ │ │ │ │ │ └── tls
│ │ │ │ │ │ ├── ca.crt
│ │ │ │ │ │ ├── client.crt
│ │ │ │ │ │ └── client.key
│ │ │ │ ├── nodes
│ │ │ │ │ ├── initiator.0
│ │ │ │ │ │ ├── client-config.yaml
│ │ │ │ │ │ └── core.yaml
│ │ │ │ │ └── responder.0
│ │ │ │ │ │ ├── client-config.yaml
│ │ │ │ │ │ └── core.yaml
│ │ │ │ └── routing-config.yaml
│ │ │ └── topology.yaml
│ │ └── topology.go
│ └── stoprestart
│ │ ├── factory.go
│ │ ├── initiator.go
│ │ ├── responder.go
│ │ ├── stoprestart_suite_test.go
│ │ ├── stoprestart_test.go
│ │ └── topology.go
├── integration.go
├── nwo
│ ├── api
│ │ └── api.go
│ ├── client
│ │ └── web.go
│ ├── cmd
│ │ ├── artifactgen
│ │ │ └── gen.go
│ │ ├── cryptogen
│ │ │ ├── ca
│ │ │ │ ├── ca.go
│ │ │ │ └── ca_test.go
│ │ │ ├── cmd.go
│ │ │ ├── cryptogen.go
│ │ │ ├── csp
│ │ │ │ ├── csp.go
│ │ │ │ ├── csp_internal_test.go
│ │ │ │ └── csp_test.go
│ │ │ ├── metadata
│ │ │ │ ├── metadata.go
│ │ │ │ └── metadata_test.go
│ │ │ └── msp
│ │ │ │ ├── msp.go
│ │ │ │ ├── msp_internal_test.go
│ │ │ │ └── msp_test.go
│ │ ├── hsm
│ │ │ └── cmd.go
│ │ ├── main.go
│ │ └── network
│ │ │ └── cmd.go
│ ├── common
│ │ ├── builder.go
│ │ ├── color.go
│ │ ├── command.go
│ │ ├── context
│ │ │ └── context.go
│ │ ├── docker
│ │ │ └── utils.go
│ │ ├── images.go
│ │ ├── json.go
│ │ ├── pkcs11
│ │ │ └── pkcs11.go
│ │ └── runner
│ │ │ ├── buffer.go
│ │ │ └── runner.go
│ ├── fabric
│ │ ├── chaincode
│ │ │ └── base
│ │ │ │ └── main.go
│ │ ├── commands
│ │ │ ├── configtxgen.go
│ │ │ ├── cryptogen.go
│ │ │ ├── discover.go
│ │ │ ├── idemixgen.go
│ │ │ └── peer.go
│ │ ├── docker.go
│ │ ├── fabricconfig
│ │ │ ├── configtx.go
│ │ │ ├── core.go
│ │ │ └── orderer.go
│ │ ├── identity
│ │ │ └── identity.go
│ │ ├── network
│ │ │ ├── checks.go
│ │ │ ├── components.go
│ │ │ ├── configblock.go
│ │ │ ├── connprofile.go
│ │ │ ├── deploy.go
│ │ │ ├── discover.go
│ │ │ ├── network.go
│ │ │ ├── network_support.go
│ │ │ ├── orderer_client.go
│ │ │ ├── package.go
│ │ │ ├── resolver.go
│ │ │ ├── solo.yaml
│ │ │ ├── topology.go
│ │ │ ├── update.go
│ │ │ └── utils.go
│ │ ├── opts
│ │ │ └── opts.go
│ │ ├── packager
│ │ │ ├── ccmetadata
│ │ │ │ ├── validators.go
│ │ │ │ └── validators_test.go
│ │ │ ├── external
│ │ │ │ └── platform.go
│ │ │ ├── golang
│ │ │ │ ├── list.go
│ │ │ │ └── platform.go
│ │ │ ├── packager.go
│ │ │ ├── platforms.go
│ │ │ └── replacer
│ │ │ │ └── replacer.go
│ │ ├── platform.go
│ │ ├── topology.go
│ │ └── topology
│ │ │ ├── chaincode.go
│ │ │ ├── configtx_template.go
│ │ │ ├── core_template.go
│ │ │ ├── crypto_template.go
│ │ │ ├── ds.go
│ │ │ ├── fabric
│ │ │ └── fabric.go
│ │ │ ├── idemix.go
│ │ │ ├── opts.go
│ │ │ ├── orderer_template.go
│ │ │ ├── org.go
│ │ │ ├── templates.go
│ │ │ └── topology.go
│ ├── fsc
│ │ ├── cli.go
│ │ ├── commands
│ │ │ ├── cryptogen.go
│ │ │ ├── node.go
│ │ │ └── view.go
│ │ ├── components.go
│ │ ├── fsc.go
│ │ ├── fsc_suite_test.go
│ │ ├── fsc_test.go
│ │ ├── mocks
│ │ │ ├── mocks
│ │ │ │ └── sdk.go
│ │ │ └── sdk.go
│ │ ├── node
│ │ │ ├── core_template.go
│ │ │ ├── crypto_template.go
│ │ │ ├── mocks
│ │ │ │ ├── sdk1
│ │ │ │ │ └── sdk.go
│ │ │ │ ├── sdk2
│ │ │ │ │ └── sdk.go
│ │ │ │ └── sdk3
│ │ │ │ │ └── sdk.go
│ │ │ ├── node.go
│ │ │ ├── node_template.go
│ │ │ ├── node_test.go
│ │ │ ├── org.go
│ │ │ └── routing_template.go
│ │ ├── options.go
│ │ ├── resolver.go
│ │ ├── templates.go
│ │ ├── testdata
│ │ │ ├── foo
│ │ │ │ ├── initiator
│ │ │ │ │ └── view.go
│ │ │ │ └── responder
│ │ │ │ │ └── view.go
│ │ │ ├── initiator
│ │ │ │ └── view.go
│ │ │ ├── main
│ │ │ │ └── main.go.output
│ │ │ └── responder
│ │ │ │ └── view.go
│ │ └── topology.go
│ ├── monitoring
│ │ ├── hle
│ │ │ ├── config.go
│ │ │ ├── docker.go
│ │ │ └── hle.go
│ │ ├── monitoring
│ │ │ ├── confdata
│ │ │ │ ├── fabric_backend.json
│ │ │ │ └── fabric_business.json
│ │ │ ├── config.go
│ │ │ ├── docker.go
│ │ │ ├── monitoring.go
│ │ │ ├── provisioning.go
│ │ │ └── templates.go
│ │ ├── optl
│ │ │ ├── config.go
│ │ │ ├── docker-compose.yaml
│ │ │ ├── docker.go
│ │ │ ├── optl.go
│ │ │ └── otel-collector-config.yaml
│ │ ├── platform.go
│ │ └── topology.go
│ ├── nwo.go
│ └── orion
│ │ ├── docker.go
│ │ ├── init.go
│ │ ├── opts
│ │ └── opts.go
│ │ ├── platform.go
│ │ ├── templates.go
│ │ └── topology.go
├── orion
│ └── cars
│ │ ├── README.md
│ │ ├── cars_suite_test.go
│ │ ├── cars_test.go
│ │ ├── states
│ │ └── records.go
│ │ ├── topology.go
│ │ └── views
│ │ ├── mint.go
│ │ └── transfer.go
├── ports.go
└── utils.go
├── node
├── node.go
├── node
│ ├── diag
│ │ ├── goroutine.go
│ │ └── goroutine_test.go
│ ├── profile
│ │ └── profile.go
│ ├── signals.go
│ ├── signals_windows.go
│ └── start.go
└── version
│ └── version.go
├── pkg
├── api
│ ├── client.go
│ ├── contextprovider.go
│ ├── node.go
│ ├── registry.go
│ ├── sdk.go
│ └── serviceprovider.go
├── node
│ └── node.go
├── runner
│ ├── batch.go
│ ├── batch_test.go
│ ├── runner.go
│ └── serial.go
└── utils
│ ├── compose
│ ├── compose.go
│ └── compose_test.go
│ ├── errors
│ ├── errors.go
│ └── errors_test.go
│ ├── io
│ ├── io.go
│ ├── reader.go
│ └── writer.go
│ ├── proto
│ └── proto.go
│ ├── retry.go
│ ├── uuid.go
│ └── uuid_test.go
├── platform
├── common
│ ├── core
│ │ └── generic
│ │ │ ├── committer
│ │ │ ├── filter.go
│ │ │ ├── finality.go
│ │ │ ├── finality_test.go
│ │ │ └── listenermgr.go
│ │ │ └── vault
│ │ │ ├── bench_test.go
│ │ │ ├── helpers.go
│ │ │ ├── inspector.go
│ │ │ ├── interceptor.go
│ │ │ ├── interceptor_test.go
│ │ │ ├── mapper.go
│ │ │ ├── metrics.go
│ │ │ ├── mocks
│ │ │ └── mocks.go
│ │ │ ├── rwset.go
│ │ │ ├── vault.go
│ │ │ ├── vault_test.go
│ │ │ └── version.go
│ ├── driver
│ │ ├── committer.go
│ │ ├── finality.go
│ │ ├── iterator.go
│ │ ├── kvs.go
│ │ ├── pagination.go
│ │ ├── rwset.go
│ │ ├── sigservice.go
│ │ ├── types.go
│ │ └── vault.go
│ ├── sdk
│ │ └── dig
│ │ │ └── sdk.go
│ ├── services
│ │ ├── identity
│ │ │ └── identity.go
│ │ ├── logging
│ │ │ ├── logger.go
│ │ │ ├── mock.go
│ │ │ ├── otel.go
│ │ │ ├── testlogger
│ │ │ │ └── logger_test.go
│ │ │ └── types.go
│ │ └── sig
│ │ │ ├── deserializer.go
│ │ │ └── service.go
│ └── utils
│ │ ├── cache
│ │ ├── cache.go
│ │ ├── eviction.go
│ │ ├── lru.go
│ │ ├── lru_test.go
│ │ ├── map.go
│ │ ├── timeout.go
│ │ └── timeout_test.go
│ │ ├── closer.go
│ │ ├── collections
│ │ ├── iterators.go
│ │ ├── iterators
│ │ │ ├── batch.go
│ │ │ ├── batch_test.go
│ │ │ ├── empty.go
│ │ │ ├── filter.go
│ │ │ ├── map.go
│ │ │ ├── predicates.go
│ │ │ ├── reducers.go
│ │ │ ├── slice.go
│ │ │ ├── types.go
│ │ │ └── utils.go
│ │ ├── maps.go
│ │ ├── maps
│ │ │ └── utils.go
│ │ ├── sets.go
│ │ ├── sets
│ │ │ └── sets.go
│ │ ├── slices.go
│ │ └── slices
│ │ │ └── utils.go
│ │ ├── dig
│ │ └── dig.go
│ │ ├── hash.go
│ │ ├── hash_test.go
│ │ ├── lazy
│ │ ├── getter.go
│ │ ├── holder.go
│ │ ├── holder_test.go
│ │ ├── iterator.go
│ │ ├── provider.go
│ │ └── provider_test.go
│ │ ├── metrics.go
│ │ ├── metrics_test.go
│ │ └── nulls.go
├── fabric
│ ├── chaincode.go
│ ├── channel.go
│ ├── committer.go
│ ├── config.go
│ ├── core
│ │ ├── config.go
│ │ ├── generic
│ │ │ ├── chaincode
│ │ │ │ ├── chaincode.go
│ │ │ │ ├── discovery.go
│ │ │ │ ├── invoke.go
│ │ │ │ └── manager.go
│ │ │ ├── channel.go
│ │ │ ├── channelprovider.go
│ │ │ ├── committer
│ │ │ │ ├── committer.go
│ │ │ │ ├── config.go
│ │ │ │ ├── depresolver.go
│ │ │ │ ├── endorsertx.go
│ │ │ │ ├── event.go
│ │ │ │ ├── event_test.go
│ │ │ │ └── metrics.go
│ │ │ ├── config.go
│ │ │ ├── config
│ │ │ │ ├── ds.go
│ │ │ │ ├── ds_test.go
│ │ │ │ ├── endpoint.go
│ │ │ │ ├── service.go
│ │ │ │ ├── testdata
│ │ │ │ │ └── core.yaml
│ │ │ │ └── vault.go
│ │ │ ├── delivery
│ │ │ │ ├── deliverclient.go
│ │ │ │ ├── delivery.go
│ │ │ │ ├── random.go
│ │ │ │ └── service.go
│ │ │ ├── driver
│ │ │ │ ├── config
│ │ │ │ │ └── service.go
│ │ │ │ ├── identity
│ │ │ │ │ ├── msp.go
│ │ │ │ │ └── provider.go
│ │ │ │ └── provider.go
│ │ │ ├── endpoint
│ │ │ │ ├── endpoint.go
│ │ │ │ ├── pki.go
│ │ │ │ └── resolver.go
│ │ │ ├── events
│ │ │ │ └── listenermanager.go
│ │ │ ├── fabricutils
│ │ │ │ ├── pr.go
│ │ │ │ └── utils.go
│ │ │ ├── finality
│ │ │ │ ├── committerflm.go
│ │ │ │ ├── deliveryflm.go
│ │ │ │ ├── deliveryqs.go
│ │ │ │ └── fabric.go
│ │ │ ├── id
│ │ │ │ ├── info.go
│ │ │ │ ├── info_test.go
│ │ │ │ ├── provider.go
│ │ │ │ └── testdata
│ │ │ │ │ ├── idemix
│ │ │ │ │ ├── msp
│ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ └── user
│ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ └── x509
│ │ │ │ │ ├── admincerts
│ │ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ │ │ ├── cacerts
│ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ │ ├── keystore
│ │ │ │ │ └── priv_sk
│ │ │ │ │ ├── signcerts
│ │ │ │ │ └── auditor.org1.example.com-cert.pem
│ │ │ │ │ └── tlscacerts
│ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ ├── ledger
│ │ │ │ └── ledger.go
│ │ │ ├── membership
│ │ │ │ └── membership.go
│ │ │ ├── metrics
│ │ │ │ └── metrics.go
│ │ │ ├── msp
│ │ │ │ ├── driver
│ │ │ │ │ ├── driver.go
│ │ │ │ │ └── mock
│ │ │ │ │ │ └── config_provider.go
│ │ │ │ ├── idemix
│ │ │ │ │ ├── audit.go
│ │ │ │ │ ├── cache.go
│ │ │ │ │ ├── cache_test.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── crypto.go
│ │ │ │ │ ├── deserializer.go
│ │ │ │ │ ├── id.go
│ │ │ │ │ ├── idemix.go
│ │ │ │ │ ├── loader.go
│ │ │ │ │ ├── provider.go
│ │ │ │ │ ├── provider_test.go
│ │ │ │ │ ├── roles.go
│ │ │ │ │ └── testdata
│ │ │ │ │ │ ├── charlie.ExtraId2
│ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ ├── IssuerRevocationPublicKey
│ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ └── localhost-7054-default-testchannel-token-chaincode-example-com.pem
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ │ ├── idemix
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ │ ├── idemix2
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ │ └── sameissuer
│ │ │ │ │ │ ├── idemix
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ │ └── idemix2
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ │ └── user
│ │ │ │ │ │ └── SignerConfig
│ │ │ │ ├── service.go
│ │ │ │ ├── service_test.go
│ │ │ │ ├── testdata
│ │ │ │ │ ├── idemixtypefolder
│ │ │ │ │ │ ├── core.yaml
│ │ │ │ │ │ └── msps
│ │ │ │ │ │ │ ├── idemix
│ │ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ │ │ └── user
│ │ │ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ │ │ ├── manager.id1
│ │ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ │ │ └── user
│ │ │ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ │ │ ├── manager.id2
│ │ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ │ │ └── user
│ │ │ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ │ │ └── manager.id3
│ │ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── IssuerPublicKey
│ │ │ │ │ │ │ └── RevocationPublicKey
│ │ │ │ │ │ │ └── user
│ │ │ │ │ │ │ └── SignerConfig
│ │ │ │ │ ├── manager@org2.example.com
│ │ │ │ │ │ ├── msp
│ │ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ │ └── manager@org2.example.com-cert.pem
│ │ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ │ └── ca.org2.example.com-cert.pem
│ │ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ │ └── manager@org2.example.com-cert.pem
│ │ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ │ └── tlsca.org2.example.com-cert.pem
│ │ │ │ │ │ └── tls
│ │ │ │ │ │ │ ├── ca.crt
│ │ │ │ │ │ │ ├── client.crt
│ │ │ │ │ │ │ └── client.key
│ │ │ │ │ └── x509typefolder
│ │ │ │ │ │ ├── core.yaml
│ │ │ │ │ │ └── msps
│ │ │ │ │ │ ├── Admin@org1.example.com
│ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ │ │ │ ├── auditor@org1.example.com
│ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ │ └── auditor@org1.example.com-cert.pem
│ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ │ └── auditor@org1.example.com-cert.pem
│ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ │ │ │ └── issuer.id1@org1.example.com
│ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ └── issuer.id1@org1.example.com-cert.pem
│ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ └── issuer.id1@org1.example.com-cert.pem
│ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ │ └── x509
│ │ │ │ │ ├── audit.go
│ │ │ │ │ ├── cert.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── deserializer.go
│ │ │ │ │ ├── ecdsa.go
│ │ │ │ │ ├── identity.go
│ │ │ │ │ ├── loader.go
│ │ │ │ │ ├── pkcs11
│ │ │ │ │ ├── disabled.go
│ │ │ │ │ └── pkcs11.go
│ │ │ │ │ ├── provider.go
│ │ │ │ │ ├── setup.go
│ │ │ │ │ ├── testdata
│ │ │ │ │ └── msp
│ │ │ │ │ │ ├── admincerts
│ │ │ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ │ │ │ ├── cacerts
│ │ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ │ │ ├── keystore
│ │ │ │ │ │ └── priv_sk
│ │ │ │ │ │ ├── signcerts
│ │ │ │ │ │ └── auditor.org1.example.com-cert.pem
│ │ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ │ │ └── x509_test.go
│ │ │ ├── network.go
│ │ │ ├── ordering
│ │ │ │ ├── bft.go
│ │ │ │ ├── cft.go
│ │ │ │ ├── client.go
│ │ │ │ └── ordering.go
│ │ │ ├── rwset
│ │ │ │ ├── composite.go
│ │ │ │ ├── envelope.go
│ │ │ │ ├── handler.go
│ │ │ │ ├── loader.go
│ │ │ │ └── processor.go
│ │ │ ├── services
│ │ │ │ ├── client.go
│ │ │ │ ├── conn.go
│ │ │ │ ├── grpc.go
│ │ │ │ └── services.go
│ │ │ ├── transaction
│ │ │ │ ├── envelope.go
│ │ │ │ ├── id.go
│ │ │ │ ├── manager.go
│ │ │ │ ├── pr.go
│ │ │ │ ├── proposal.go
│ │ │ │ ├── proposalresponse.go
│ │ │ │ ├── services.go
│ │ │ │ └── transasction.go
│ │ │ └── vault
│ │ │ │ ├── vault.go
│ │ │ │ └── vault_test.go
│ │ └── provider.go
│ ├── delivery.go
│ ├── driver
│ │ ├── chaincode.go
│ │ ├── channel.go
│ │ ├── committer.go
│ │ ├── config.go
│ │ ├── delivery.go
│ │ ├── driver.go
│ │ ├── finality.go
│ │ ├── fns.go
│ │ ├── id.go
│ │ ├── kvs.go
│ │ ├── ledger.go
│ │ ├── membership.go
│ │ ├── ordering.go
│ │ ├── processor.go
│ │ ├── rwset.go
│ │ ├── sig.go
│ │ ├── transaction.go
│ │ └── vault.go
│ ├── events.go
│ ├── events_test.go
│ ├── finality.go
│ ├── fns.go
│ ├── identity.go
│ ├── ledger.go
│ ├── membership.go
│ ├── ordering.go
│ ├── processor.go
│ ├── sdk
│ │ ├── dig
│ │ │ ├── fns
│ │ │ │ └── providers.go
│ │ │ ├── generic
│ │ │ │ └── providers.go
│ │ │ ├── sdk.go
│ │ │ └── sdk_test.go
│ │ └── finality
│ │ │ └── handler.go
│ ├── services
│ │ ├── chaincode
│ │ │ ├── chaincode.go
│ │ │ ├── endorse.go
│ │ │ ├── events.go
│ │ │ ├── invoke.go
│ │ │ ├── logger.go
│ │ │ └── query.go
│ │ ├── crypto
│ │ │ └── provider.go
│ │ ├── endorser
│ │ │ ├── builder.go
│ │ │ ├── endorsement.go
│ │ │ ├── endorsement_proposal.go
│ │ │ ├── finality.go
│ │ │ ├── flow.go
│ │ │ ├── ordering.go
│ │ │ ├── signer.go
│ │ │ ├── stream.go
│ │ │ └── transaction.go
│ │ ├── rwset
│ │ │ └── composite.go
│ │ └── state
│ │ │ ├── accept.go
│ │ │ ├── cc
│ │ │ └── query
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ └── main.go
│ │ │ ├── certification.go
│ │ │ ├── codec.go
│ │ │ ├── composite.go
│ │ │ ├── contract.go
│ │ │ ├── endorsement.go
│ │ │ ├── finality.go
│ │ │ ├── flow.go
│ │ │ ├── helpers.go
│ │ │ ├── identities.go
│ │ │ ├── json.go
│ │ │ ├── namespace.go
│ │ │ ├── namespace_test.go
│ │ │ ├── nonce.go
│ │ │ ├── options.go
│ │ │ ├── opts.go
│ │ │ ├── ordering.go
│ │ │ ├── recipients.go
│ │ │ ├── rwsetextractor.go
│ │ │ ├── sbe.go
│ │ │ ├── script
│ │ │ ├── api
│ │ │ │ ├── scripts.go
│ │ │ │ ├── statevalidation.go
│ │ │ │ └── transaction.go
│ │ │ ├── ownable
│ │ │ │ ├── scripts.go
│ │ │ │ ├── state.go
│ │ │ │ └── validation.go
│ │ │ └── statevalidation.go
│ │ │ ├── state.go
│ │ │ ├── stream.go
│ │ │ ├── tags.go
│ │ │ ├── transaction.go
│ │ │ ├── vault.go
│ │ │ └── vault
│ │ │ └── vault.go
│ ├── sig.go
│ ├── transaction.go
│ └── vault.go
├── orion
│ ├── committer.go
│ ├── core
│ │ ├── config.go
│ │ ├── generic
│ │ │ ├── committer
│ │ │ │ └── committer.go
│ │ │ ├── config.go
│ │ │ ├── config
│ │ │ │ ├── config.go
│ │ │ │ └── identities.go
│ │ │ ├── delivery
│ │ │ │ └── delivery.go
│ │ │ ├── finality
│ │ │ │ └── finality.go
│ │ │ ├── identity.go
│ │ │ ├── ledger
│ │ │ │ └── ledger.go
│ │ │ ├── network.go
│ │ │ ├── query.go
│ │ │ ├── rwset
│ │ │ │ ├── composite.go
│ │ │ │ └── processor.go
│ │ │ ├── session.go
│ │ │ ├── transaction
│ │ │ │ ├── id.go
│ │ │ │ ├── manager.go
│ │ │ │ └── services.go
│ │ │ ├── vault.go
│ │ │ └── vault
│ │ │ │ └── vault.go
│ │ └── provider.go
│ ├── driver
│ │ ├── committer.go
│ │ ├── config.go
│ │ ├── delivery.go
│ │ ├── finality.go
│ │ ├── id.go
│ │ ├── kvs.go
│ │ ├── ons.go
│ │ ├── processor.go
│ │ ├── rwset.go
│ │ ├── sm.go
│ │ ├── transaction.go
│ │ └── vault.go
│ ├── finality.go
│ ├── identity.go
│ ├── ledger.go
│ ├── ons.go
│ ├── processor.go
│ ├── sdk
│ │ ├── dig
│ │ │ ├── providers.go
│ │ │ ├── sdk.go
│ │ │ └── sdk_test.go
│ │ └── finality
│ │ │ └── handler.go
│ ├── services
│ │ └── otx
│ │ │ ├── loaded.go
│ │ │ ├── ordering.go
│ │ │ ├── transaction.go
│ │ │ └── utils.go
│ ├── session.go
│ ├── transaction.go
│ └── vault.go
└── view
│ ├── config.go
│ ├── core
│ ├── config
│ │ ├── provider.go
│ │ ├── provider_test.go
│ │ ├── testdata
│ │ │ └── core.yaml
│ │ └── viper
│ │ │ └── config_util.go
│ ├── endpoint
│ │ ├── endpoint.go
│ │ ├── endpoint_test.go
│ │ ├── pki.go
│ │ └── resolver.go
│ ├── id
│ │ ├── identity.go
│ │ ├── mock
│ │ │ ├── config_provider.go
│ │ │ └── sig_service.go
│ │ ├── provider.go
│ │ ├── provider_test.go
│ │ ├── testdata
│ │ │ ├── admin
│ │ │ │ └── admin.pem
│ │ │ ├── client
│ │ │ │ └── client.pem
│ │ │ └── default
│ │ │ │ ├── keystore
│ │ │ │ └── priv_sk
│ │ │ │ └── signcerts
│ │ │ │ └── default.pem
│ │ └── x509
│ │ │ ├── cert.go
│ │ │ ├── deserializer.go
│ │ │ └── ecdsa.go
│ ├── manager
│ │ ├── context.go
│ │ ├── context_test.go
│ │ ├── deps.go
│ │ ├── manager.go
│ │ ├── manager_test.go
│ │ ├── metrics.go
│ │ ├── mock
│ │ │ ├── comm_layer.go
│ │ │ └── session_factory.go
│ │ ├── sessions.go
│ │ ├── uuid.go
│ │ └── wrapper.go
│ └── registry
│ │ └── viewprovider.go
│ ├── driver
│ ├── comm.go
│ ├── config.go
│ ├── endpointservice.go
│ ├── factory.go
│ ├── flowmanager.go
│ ├── flowregistry.go
│ ├── identityprovider.go
│ ├── mock
│ │ ├── id_provider.go
│ │ ├── resolver.go
│ │ ├── session.go
│ │ └── sig_service.go
│ ├── serviceprovider.go
│ ├── session.go
│ └── sigservice.go
│ ├── endpoint.go
│ ├── identity.go
│ ├── manager.go
│ ├── registry.go
│ ├── sdk
│ ├── dig
│ │ ├── container.go
│ │ ├── providers.go
│ │ ├── sdk.go
│ │ ├── sdk_test.go
│ │ └── test_utils.go
│ ├── finality
│ │ └── handler.go
│ ├── metadata
│ │ └── metadata.go
│ ├── tracing
│ │ ├── provider.go
│ │ └── tracing.go
│ ├── vfsdk
│ │ ├── container.go
│ │ ├── container_test.go
│ │ ├── options.go
│ │ └── sdk.go
│ └── web
│ │ └── service.go
│ ├── serviceprovider.go
│ ├── services
│ ├── assert
│ │ ├── assert.go
│ │ └── retry.go
│ ├── cache
│ │ └── secondcache
│ │ │ ├── second_chance.go
│ │ │ └── second_chance_test.go
│ ├── client
│ │ ├── view
│ │ │ ├── client.go
│ │ │ ├── cmd
│ │ │ │ ├── config.go
│ │ │ │ ├── config_test.go
│ │ │ │ ├── testdata
│ │ │ │ │ ├── not_a_yaml.yaml
│ │ │ │ │ └── valid_config
│ │ │ │ │ │ └── config.yaml
│ │ │ │ └── view.go
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ ├── si.go
│ │ │ ├── si
│ │ │ │ └── ecdsa.go
│ │ │ ├── stream.go
│ │ │ └── testdata
│ │ │ │ ├── config.json
│ │ │ │ └── generator.go
│ │ └── web
│ │ │ ├── client.go
│ │ │ └── wsclient.go
│ ├── comm
│ │ ├── comm.go
│ │ ├── host
│ │ │ ├── host.go
│ │ │ ├── libp2p
│ │ │ │ ├── bandwidthreporter.go
│ │ │ │ ├── conn_test.go
│ │ │ │ ├── host.go
│ │ │ │ ├── identity.go
│ │ │ │ ├── metrics.go
│ │ │ │ ├── p2p_test.go
│ │ │ │ ├── pki.go
│ │ │ │ ├── provider.go
│ │ │ │ ├── stream.go
│ │ │ │ └── testdata
│ │ │ │ │ ├── dht.priv
│ │ │ │ │ ├── dht.pub
│ │ │ │ │ ├── dht1.priv
│ │ │ │ │ ├── dht1.pub
│ │ │ │ │ └── msp
│ │ │ │ │ ├── user1
│ │ │ │ │ ├── admincerts
│ │ │ │ │ │ └── User1@org1.example.com-cert.pem
│ │ │ │ │ ├── cacerts
│ │ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ │ ├── keystore
│ │ │ │ │ │ └── priv_sk
│ │ │ │ │ ├── signcerts
│ │ │ │ │ │ └── User1@org1.example.com-cert.pem
│ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ │ │ └── user2
│ │ │ │ │ ├── admincerts
│ │ │ │ │ └── User2@org1.example.com-cert.pem
│ │ │ │ │ ├── cacerts
│ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ │ ├── keystore
│ │ │ │ │ └── priv_sk
│ │ │ │ │ ├── signcerts
│ │ │ │ │ └── User2@org1.example.com-cert.pem
│ │ │ │ │ └── tlscacerts
│ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ └── rest
│ │ │ │ ├── client.go
│ │ │ │ ├── config.go
│ │ │ │ ├── host.go
│ │ │ │ ├── p2p_test.go
│ │ │ │ ├── pki.go
│ │ │ │ ├── provider.go
│ │ │ │ ├── routing
│ │ │ │ ├── idrouter.go
│ │ │ │ ├── labelrouter.go
│ │ │ │ ├── routing.go
│ │ │ │ └── servicediscovery.go
│ │ │ │ ├── server.go
│ │ │ │ └── websocket
│ │ │ │ ├── common.go
│ │ │ │ ├── metrics.go
│ │ │ │ ├── multiplexed_provider.go
│ │ │ │ ├── multiplexed_provider_test.go
│ │ │ │ ├── simple_provider.go
│ │ │ │ ├── stream.go
│ │ │ │ ├── stream_test.go
│ │ │ │ └── streamreader.go
│ │ ├── ids.go
│ │ ├── io
│ │ │ ├── api.go
│ │ │ ├── bufconn.go
│ │ │ ├── conn.go
│ │ │ ├── logger.go
│ │ │ ├── msgconn.go
│ │ │ ├── streamio
│ │ │ │ ├── reader.go
│ │ │ │ └── reader_test.go
│ │ │ └── test_utils.go
│ │ ├── master.go
│ │ ├── messages.pb.go
│ │ ├── messages.proto
│ │ ├── metrics.go
│ │ ├── p2p.go
│ │ ├── pki.go
│ │ ├── provider
│ │ │ └── provider.go
│ │ ├── random.go
│ │ ├── session.go
│ │ ├── test_utils.go
│ │ └── utils
│ │ │ └── endpoint.go
│ ├── crypto
│ │ └── provider.go
│ ├── db
│ │ ├── driver
│ │ │ ├── common
│ │ │ │ ├── base.go
│ │ │ │ ├── config.go
│ │ │ │ ├── test_utils.go
│ │ │ │ └── utils.go
│ │ │ ├── driver.go
│ │ │ ├── memory
│ │ │ │ ├── config.go
│ │ │ │ └── driver.go
│ │ │ ├── multiplexed
│ │ │ │ ├── driver.go
│ │ │ │ └── test_utils.go
│ │ │ ├── notifier
│ │ │ │ ├── notifier.go
│ │ │ │ └── persistence.go
│ │ │ └── sql
│ │ │ │ ├── common
│ │ │ │ ├── auditinfo.go
│ │ │ │ ├── auditinfo_test.go
│ │ │ │ ├── bench.go
│ │ │ │ ├── binding.go
│ │ │ │ ├── conditions.go
│ │ │ │ ├── endorsetx.go
│ │ │ │ ├── envelope.go
│ │ │ │ ├── helpers.go
│ │ │ │ ├── init.go
│ │ │ │ ├── metadata.go
│ │ │ │ ├── signerinfo.go
│ │ │ │ ├── simplekeydata.go
│ │ │ │ ├── test_utils.go
│ │ │ │ ├── unversioned.go
│ │ │ │ ├── utils.go
│ │ │ │ └── vault.go
│ │ │ │ ├── postgres
│ │ │ │ ├── auditinfo.go
│ │ │ │ ├── bench_test.go
│ │ │ │ ├── binding.go
│ │ │ │ ├── conditions.go
│ │ │ │ ├── config.go
│ │ │ │ ├── driver.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── endorsetx.go
│ │ │ │ ├── envelope.go
│ │ │ │ ├── errormapper.go
│ │ │ │ ├── isolationlevels.go
│ │ │ │ ├── keyvalue.go
│ │ │ │ ├── metadata.go
│ │ │ │ ├── notifier.go
│ │ │ │ ├── pagination.go
│ │ │ │ ├── persistence.go
│ │ │ │ ├── sanitizer.go
│ │ │ │ ├── signerinfo.go
│ │ │ │ ├── sql_test.go
│ │ │ │ ├── test_utils.go
│ │ │ │ └── vault.go
│ │ │ │ ├── query
│ │ │ │ ├── common
│ │ │ │ │ ├── builder.go
│ │ │ │ │ ├── field.go
│ │ │ │ │ ├── mock
│ │ │ │ │ │ └── error_wrapper.go
│ │ │ │ │ ├── table.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── cond
│ │ │ │ │ ├── andor.go
│ │ │ │ │ ├── cmp.go
│ │ │ │ │ ├── condition.go
│ │ │ │ │ ├── condition_test.go
│ │ │ │ │ ├── in.go
│ │ │ │ │ └── time.go
│ │ │ │ ├── delete
│ │ │ │ │ ├── query.go
│ │ │ │ │ ├── query_test.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── insert
│ │ │ │ │ ├── onconflict.go
│ │ │ │ │ ├── query.go
│ │ │ │ │ ├── query_test.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── pagination
│ │ │ │ │ ├── interpreter.go
│ │ │ │ │ └── pagination.go
│ │ │ │ ├── query.go
│ │ │ │ ├── select
│ │ │ │ │ ├── orderby.go
│ │ │ │ │ ├── query.go
│ │ │ │ │ ├── query_test.go
│ │ │ │ │ └── types.go
│ │ │ │ └── update
│ │ │ │ │ ├── query.go
│ │ │ │ │ ├── query_test.go
│ │ │ │ │ └── types.go
│ │ │ │ └── sqlite
│ │ │ │ ├── auditinfo.go
│ │ │ │ ├── bench_test.go
│ │ │ │ ├── binding.go
│ │ │ │ ├── conditions.go
│ │ │ │ ├── config.go
│ │ │ │ ├── driver.go
│ │ │ │ ├── endorsetx.go
│ │ │ │ ├── envelope.go
│ │ │ │ ├── errormapper.go
│ │ │ │ ├── isolationlevels.go
│ │ │ │ ├── metadata.go
│ │ │ │ ├── pagination.go
│ │ │ │ ├── persistence.go
│ │ │ │ ├── retrywritedb.go
│ │ │ │ ├── sanitizer.go
│ │ │ │ ├── signerinfo.go
│ │ │ │ ├── sql_test.go
│ │ │ │ ├── unversioned.go
│ │ │ │ └── vault.go
│ │ └── keys
│ │ │ ├── utils.go
│ │ │ └── utils_test.go
│ ├── events
│ │ ├── events.go
│ │ ├── fakes
│ │ │ ├── event.go
│ │ │ └── listener.go
│ │ ├── service.go
│ │ ├── service_test.go
│ │ ├── simple
│ │ │ ├── eventbus.go
│ │ │ └── eventbus_test.go
│ │ ├── subscribers.go
│ │ └── subscribers_test.go
│ ├── grpc
│ │ ├── client.go
│ │ ├── client_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── connection.go
│ │ ├── connection_test.go
│ │ ├── creds.go
│ │ ├── creds_test.go
│ │ ├── generate_test.go
│ │ ├── logging
│ │ │ ├── context.go
│ │ │ ├── fields.go
│ │ │ └── server.go
│ │ ├── metrics.go
│ │ ├── metricsfakes
│ │ │ ├── counter.go
│ │ │ ├── gauge.go
│ │ │ ├── histogram.go
│ │ │ └── provider.go
│ │ ├── server.go
│ │ ├── server_test.go
│ │ ├── serverstatshandler.go
│ │ ├── serverstatshandler_test.go
│ │ ├── testdata
│ │ │ ├── certs
│ │ │ │ ├── .gitignore
│ │ │ │ ├── Org1-cert.pem
│ │ │ │ ├── Org1-child1-cert.pem
│ │ │ │ ├── Org1-child1-client1-cert.pem
│ │ │ │ ├── Org1-child1-client1-key.pem
│ │ │ │ ├── Org1-child1-client2-cert.pem
│ │ │ │ ├── Org1-child1-client2-key.pem
│ │ │ │ ├── Org1-child1-key.pem
│ │ │ │ ├── Org1-child1-server1-cert.pem
│ │ │ │ ├── Org1-child1-server1-key.pem
│ │ │ │ ├── Org1-child1-server2-cert.pem
│ │ │ │ ├── Org1-child1-server2-key.pem
│ │ │ │ ├── Org1-child2-cert.pem
│ │ │ │ ├── Org1-child2-client1-cert.pem
│ │ │ │ ├── Org1-child2-client1-key.pem
│ │ │ │ ├── Org1-child2-client2-cert.pem
│ │ │ │ ├── Org1-child2-client2-key.pem
│ │ │ │ ├── Org1-child2-key.pem
│ │ │ │ ├── Org1-child2-server1-cert.pem
│ │ │ │ ├── Org1-child2-server1-key.pem
│ │ │ │ ├── Org1-child2-server2-cert.pem
│ │ │ │ ├── Org1-child2-server2-key.pem
│ │ │ │ ├── Org1-client1-cert.pem
│ │ │ │ ├── Org1-client1-key.pem
│ │ │ │ ├── Org1-client2-cert.pem
│ │ │ │ ├── Org1-client2-key.pem
│ │ │ │ ├── Org1-key.pem
│ │ │ │ ├── Org1-server1-cert.pem
│ │ │ │ ├── Org1-server1-key.pem
│ │ │ │ ├── Org1-server2-cert.pem
│ │ │ │ ├── Org1-server2-key.pem
│ │ │ │ ├── Org2-cert.pem
│ │ │ │ ├── Org2-child1-cert.pem
│ │ │ │ ├── Org2-child1-client1-cert.pem
│ │ │ │ ├── Org2-child1-client1-key.pem
│ │ │ │ ├── Org2-child1-client2-cert.pem
│ │ │ │ ├── Org2-child1-client2-key.pem
│ │ │ │ ├── Org2-child1-key.pem
│ │ │ │ ├── Org2-child1-server1-cert.pem
│ │ │ │ ├── Org2-child1-server1-key.pem
│ │ │ │ ├── Org2-child1-server2-cert.pem
│ │ │ │ ├── Org2-child1-server2-key.pem
│ │ │ │ ├── Org2-child2-cert.pem
│ │ │ │ ├── Org2-child2-client1-cert.pem
│ │ │ │ ├── Org2-child2-client1-key.pem
│ │ │ │ ├── Org2-child2-client2-cert.pem
│ │ │ │ ├── Org2-child2-client2-key.pem
│ │ │ │ ├── Org2-child2-key.pem
│ │ │ │ ├── Org2-child2-server1-cert.pem
│ │ │ │ ├── Org2-child2-server1-key.pem
│ │ │ │ ├── Org2-child2-server2-cert.pem
│ │ │ │ ├── Org2-child2-server2-key.pem
│ │ │ │ ├── Org2-client1-cert.pem
│ │ │ │ ├── Org2-client1-key.pem
│ │ │ │ ├── Org2-client2-cert.pem
│ │ │ │ ├── Org2-client2-key.pem
│ │ │ │ ├── Org2-key.pem
│ │ │ │ ├── Org2-server1-cert.pem
│ │ │ │ ├── Org2-server1-key.pem
│ │ │ │ ├── Org2-server2-cert.pem
│ │ │ │ ├── Org2-server2-key.pem
│ │ │ │ └── generate.go
│ │ │ ├── dynamic_cert_update
│ │ │ │ ├── ca.crt
│ │ │ │ ├── localhost
│ │ │ │ │ ├── server.crt
│ │ │ │ │ └── server.key
│ │ │ │ └── notlocalhost
│ │ │ │ │ ├── server.crt
│ │ │ │ │ └── server.key
│ │ │ ├── grpc
│ │ │ │ └── test.proto
│ │ │ ├── impersonation
│ │ │ │ ├── orgA
│ │ │ │ │ ├── ca.crt
│ │ │ │ │ ├── server.crt
│ │ │ │ │ └── server.key
│ │ │ │ └── orgB
│ │ │ │ │ ├── ca.crt
│ │ │ │ │ ├── server.crt
│ │ │ │ │ └── server.key
│ │ │ ├── prime256v1-openssl-cert.pem
│ │ │ └── prime256v1-openssl-key.pem
│ │ ├── testpb
│ │ │ └── test.pb.go
│ │ ├── tlsgen
│ │ │ ├── ca.go
│ │ │ ├── ca_test.go
│ │ │ ├── key.go
│ │ │ └── key_test.go
│ │ ├── util.go
│ │ └── util_test.go
│ ├── hash
│ │ ├── hash.go
│ │ ├── hashable.go
│ │ └── hasher.go
│ ├── id
│ │ └── ecdsa
│ │ │ ├── ecdsa.go
│ │ │ ├── ecdsa_test.go
│ │ │ └── view.go
│ ├── kms
│ │ ├── driver
│ │ │ ├── driver.go
│ │ │ └── file
│ │ │ │ └── driver.go
│ │ └── kms.go
│ ├── kvs
│ │ ├── keys.go
│ │ ├── kvs.go
│ │ ├── kvs_test.go
│ │ └── mock
│ │ │ └── config_provider.go
│ ├── metrics
│ │ ├── disabled
│ │ │ ├── disabled_suite_test.go
│ │ │ ├── provider.go
│ │ │ └── provider_test.go
│ │ ├── internal
│ │ │ └── namer
│ │ │ │ ├── namer.go
│ │ │ │ ├── namer_suite_test.go
│ │ │ │ └── namer_test.go
│ │ ├── operations
│ │ │ ├── fakes
│ │ │ │ ├── handler.go
│ │ │ │ ├── healthchecker.go
│ │ │ │ └── logger.go
│ │ │ ├── logger.go
│ │ │ ├── metrics.go
│ │ │ ├── operations_suite_test.go
│ │ │ ├── system.go
│ │ │ ├── system_test.go
│ │ │ ├── version.go
│ │ │ └── version_test.go
│ │ ├── prometheus
│ │ │ ├── prometheus_suite_test.go
│ │ │ ├── provider.go
│ │ │ └── provider_test.go
│ │ ├── provider.go
│ │ └── statsd
│ │ │ ├── goruntime
│ │ │ ├── collector.go
│ │ │ ├── collector_test.go
│ │ │ ├── goruntime_suite_test.go
│ │ │ └── metrics.go
│ │ │ ├── provider.go
│ │ │ ├── provider_test.go
│ │ │ └── statsd_suite_test.go
│ ├── registry
│ │ ├── sp.go
│ │ └── sp_test.go
│ ├── server
│ │ ├── view
│ │ │ ├── ac.go
│ │ │ ├── identity.go
│ │ │ ├── impl.go
│ │ │ ├── marshal.go
│ │ │ ├── metrics.go
│ │ │ ├── policy.go
│ │ │ ├── protos
│ │ │ │ ├── commands.pb.go
│ │ │ │ ├── commands.proto
│ │ │ │ ├── generate.go
│ │ │ │ ├── service.pb.go
│ │ │ │ ├── service.proto
│ │ │ │ └── service_grpc.pb.go
│ │ │ ├── service.go
│ │ │ └── view.go
│ │ └── web
│ │ │ ├── dispatcher.go
│ │ │ ├── dummy.go
│ │ │ ├── fakes
│ │ │ └── logger.go
│ │ │ ├── handler.go
│ │ │ ├── handler_test.go
│ │ │ ├── middleware
│ │ │ ├── chain.go
│ │ │ ├── chain_test.go
│ │ │ ├── fakes
│ │ │ │ └── http_handler.go
│ │ │ ├── middleware_suite_test.go
│ │ │ ├── request_id.go
│ │ │ ├── request_id_test.go
│ │ │ ├── require_cert.go
│ │ │ └── require_cert_test.go
│ │ │ ├── mocks
│ │ │ └── request_handler.go
│ │ │ ├── server.go
│ │ │ ├── server_test.go
│ │ │ ├── stream.go
│ │ │ ├── uuid.go
│ │ │ └── view.go
│ ├── session
│ │ ├── bidi.go
│ │ ├── json.go
│ │ ├── random.go
│ │ └── support.go
│ ├── storage
│ │ ├── auditinfo
│ │ │ └── store.go
│ │ ├── binding
│ │ │ └── store.go
│ │ ├── db
│ │ │ ├── tablename.go
│ │ │ └── tablename_test.go
│ │ ├── endorsetx
│ │ │ └── store.go
│ │ ├── envelope
│ │ │ └── store.go
│ │ ├── kvs
│ │ │ └── store.go
│ │ ├── metadata
│ │ │ └── store.go
│ │ ├── signerinfo
│ │ │ └── store.go
│ │ └── vault
│ │ │ ├── cache.go
│ │ │ ├── helpers.go
│ │ │ ├── mocks
│ │ │ └── config.go
│ │ │ ├── store.go
│ │ │ └── vaultstore_test.go
│ ├── tracing
│ │ ├── config.go
│ │ ├── provider.go
│ │ ├── span.go
│ │ ├── tracer.go
│ │ ├── utils.go
│ │ └── utils_test.go
│ └── view
│ │ ├── context.go
│ │ ├── stream.go
│ │ └── view.go
│ ├── sig.go
│ └── view
│ ├── context.go
│ ├── identity.go
│ ├── session.go
│ └── view.go
├── staticcheck.conf
└── tools
├── go.mod
├── go.sum
└── tools.go
/.github/workflows/git.yml:
--------------------------------------------------------------------------------
1 | name: Git Checks
2 |
3 | on: [pull_request]
4 |
5 | jobs:
6 | block-fixup:
7 | runs-on: ubuntu-latest
8 |
9 | steps:
10 | - uses: actions/checkout@v4
11 | - name: Block Fixup Commit Merge
12 | uses: 13rac1/block-fixup-merge-action@v2.0.0
--------------------------------------------------------------------------------
/.github/workflows/golangci-lint.yml:
--------------------------------------------------------------------------------
1 | name: golangci-lint
2 |
3 | on:
4 | push:
5 | branches:
6 | - master
7 | - main
8 | pull_request:
9 | # The branches below must be a subset of the branches above
10 | branches: [ main ]
11 |
12 | permissions:
13 | contents: read
14 | # Optional: allow read access to pull request. Use with `only-new-issues` option.
15 | # pull-requests: read
16 |
17 | jobs:
18 | golangci:
19 | name: lint
20 | runs-on: ubuntu-latest
21 | steps:
22 | - uses: actions/checkout@v4
23 | - uses: actions/setup-go@v5
24 | with:
25 | go-version-file: "go.mod"
26 | cache: false
27 | - name: golangci-lint
28 | uses: golangci/golangci-lint-action@v7
29 | with:
30 | version: v2.0
31 | args: --timeout=30m
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea/
2 | .DS_Store
3 | .vscode
4 | .build
5 | *.iml
6 |
7 | # ignoring all generated artifacts in integration tests
8 | integration/**/testdata/
9 | integration/**/cmd/
10 | !integration/nwo/cmd/
11 |
12 | cmd/fsccli/cmd
13 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | Code of Conduct Guidelines
2 | ==========================
3 |
4 | Please review the Hyperledger [Code of
5 | Conduct](https://lf-decentralized-trust.github.io/governance/governing-documents/code-of-conduct.html#code-of-conduct)
6 | before participating. It is important that we keep things civil.
7 |
8 | 
This work is licensed under a Creative Commons Attribution 4.0 International License.
9 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Hyperledger Security Policy
2 |
3 | ## Reporting a Security Bug
4 |
5 | If you think you have discovered a security issue in any of the Hyperledger projects, we'd love to hear from you. We will take all security bugs seriously and if confirmed upon investigation we will patch it within a reasonable amount of time and release a public security bulletin discussing the impact and credit the discoverer.
6 |
7 | The easiest is to email a description of the flaw and any related information (e.g. reproduction steps, version) to [security at hyperledger dot org](mailto:security@hyperledger.org).
8 |
9 | The process by which the Hyperledger Security Team handles security bugs is documented further in our [Defect Response page](https://wiki.hyperledger.org/display/SEC/Defect+Response) on our [wiki](https://wiki.hyperledger.org).
10 |
--------------------------------------------------------------------------------
/ci/scripts/install_softhsm.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Copyright the Hyperledger Fabric contributors. All rights reserved.
3 | #
4 | # SPDX-License-Identifier: Apache-2.0
5 | set -euo pipefail
6 |
7 | #Install softhsm
8 | if [[ "$OSTYPE" == "darwin"* ]]; then
9 | brew install softhsm
10 | else
11 | sudo apt-get install -y softhsm2
12 | fi
--------------------------------------------------------------------------------
/cmd/node/main.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package main
8 |
9 | import (
10 | _ "net/http/pprof"
11 | "strings"
12 |
13 | "github.com/spf13/viper"
14 |
15 | node2 "github.com/hyperledger-labs/fabric-smart-client/node"
16 | )
17 |
18 | const CmdRoot = "core"
19 |
20 | func main() {
21 | // For environment variables.
22 | viper.SetEnvPrefix(CmdRoot)
23 | viper.AutomaticEnv()
24 | replacer := strings.NewReplacer(".", "_")
25 | viper.SetEnvKeyReplacer(replacer)
26 |
27 | // Instantiate node and execute
28 | node := node2.New()
29 | node.Execute(nil)
30 | }
31 |
--------------------------------------------------------------------------------
/cmd/node/main_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package main
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/gomega"
13 | "github.com/onsi/gomega/gexec"
14 | )
15 |
16 | func TestCompile(t *testing.T) {
17 | gt := NewGomegaWithT(t)
18 | _, err := gexec.Build("github.com/hyperledger-labs/fabric-smart-client/cmd/node")
19 | gt.Expect(err).NotTo(HaveOccurred())
20 | defer gexec.CleanupBuildArtifacts()
21 | }
22 |
--------------------------------------------------------------------------------
/deps.go:
--------------------------------------------------------------------------------
1 | //go:build deps
2 |
3 | /*
4 | Copyright IBM Corp. All Rights Reserved.
5 |
6 | SPDX-License-Identifier: Apache-2.0
7 | */
8 |
9 | package deps
10 |
11 | import (
12 | _ "github.com/IBM/idemix/tools/idemixgen"
13 | _ "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/statecouchdb"
14 | _ "github.com/hyperledger/fabric/core/ledger/pvtdatastorage"
15 | _ "github.com/hyperledger/fabric/orderer/common/server"
16 | )
17 |
--------------------------------------------------------------------------------
/docs/fabric/fabricdev/core/fabricdev/ledger/ledger.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package ledger
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
11 | )
12 |
13 | type Ledger struct {
14 | }
15 |
16 | func New() *Ledger {
17 | return &Ledger{}
18 | }
19 |
20 | func (c *Ledger) GetLedgerInfo() (*driver.LedgerInfo, error) {
21 | panic("implement me")
22 | }
23 |
24 | func (c *Ledger) GetTransactionByID(txID string) (driver.ProcessedTransaction, error) {
25 | panic("implement me")
26 | }
27 |
28 | func (c *Ledger) GetBlockNumberByTxID(txID string) (uint64, error) {
29 | panic("implement me")
30 | }
31 |
32 | func (c *Ledger) GetBlockByNumber(number uint64) (driver.Block, error) {
33 | panic("implement me")
34 | }
35 |
--------------------------------------------------------------------------------
/docs/fabric/fabricdev/sdk/dig/sdk_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sdk
8 |
9 | import (
10 | "testing"
11 |
12 | sdk "github.com/hyperledger-labs/fabric-smart-client/platform/view/sdk/dig"
13 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/assert"
14 | )
15 |
16 | func TestWiring(t *testing.T) {
17 | assert.NoError(sdk.DryRunWiring(NewFrom, sdk.WithBool("fabric.enabled", true)))
18 | }
19 |
--------------------------------------------------------------------------------
/docs/imgs/approvers_based_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/docs/imgs/approvers_based_example.png
--------------------------------------------------------------------------------
/docs/imgs/chaincode_based_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/docs/imgs/chaincode_based_example.png
--------------------------------------------------------------------------------
/docs/imgs/fabric-sdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/docs/imgs/fabric-sdk.png
--------------------------------------------------------------------------------
/docs/imgs/networks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/docs/imgs/networks.png
--------------------------------------------------------------------------------
/docs/imgs/stack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/docs/imgs/stack.png
--------------------------------------------------------------------------------
/docs/imgs/view-sdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/docs/imgs/view-sdk.png
--------------------------------------------------------------------------------
/docs/orion-sdk.md:
--------------------------------------------------------------------------------
1 | # The Orion SDK
2 |
3 | To be continued
--------------------------------------------------------------------------------
/integration/fabric/atsa/chaincode/atsa_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package chaincode_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 |
15 | "github.com/hyperledger-labs/fabric-smart-client/integration"
16 | )
17 |
18 | func TestEndToEnd(t *testing.T) {
19 | RegisterFailHandler(Fail)
20 | RunSpecs(t, "Asset Transfer Secured Agreement (With Chaincode)")
21 | }
22 |
23 | func StartPort() int {
24 | return integration.AssetTransferSecuredAgreementWithChaincode.StartPortForNode()
25 | }
26 |
--------------------------------------------------------------------------------
/integration/fabric/atsa/fsc/atsa_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fsc_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 |
15 | "github.com/hyperledger-labs/fabric-smart-client/integration"
16 | )
17 |
18 | func TestEndToEnd(t *testing.T) {
19 | RegisterFailHandler(Fail)
20 | RunSpecs(t, "Asset Transfer Secured Agreement (With Approvers)")
21 | }
22 |
23 | func StartPort() int {
24 | return integration.AssetTransferSecuredAgreementWithApprovers.StartPortForNode()
25 | }
26 |
--------------------------------------------------------------------------------
/integration/fabric/atsa/fsc/diagrams/agree.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 | '- force wrapping of longer text
3 | 'skinparam wrapWidth 400
4 | !pragma teoz true
5 | hide footbox
6 |
7 | participant "Alice" as Alice
8 | participant "Fabric Network" as Orderer
9 |
10 | Alice -> Alice: Prepare Transaction Tx\nand sign it.
11 | Alice -> Orderer: Send Tx to Ordering
12 | note right of Alice: Wait for Finality of Tx
13 | @enduml
--------------------------------------------------------------------------------
/integration/fabric/atsa/fsc/diagrams/approver/agree.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 | '- force wrapping of longer text
3 | 'skinparam wrapWidth 400
4 | !pragma teoz true
5 | hide footbox
6 |
7 | participant "Issuer" as Issuer
8 | participant "Bob" as Bob
9 | participant "Approver" as Approver
10 | participant "Fabric Network" as Orderer
11 |
12 | Issuer -> Issuer: Prepare Transaction Tx
13 | Issuer -> Bob: Collect Signature on Tx
14 | Bob -> Bob: Check Tx
15 | note right of Bob: Wait for Finality of Tx
16 | Bob -> Issuer: Send back signature on Tx
17 | Issuer -> Approver: Collect Signature on Tx
18 | Approver -> Approver: Check Tx
19 | note right of Approver: Wait for Finality of Tx
20 | Approver -> Issuer: Send back signature on Tx
21 | Issuer -> Orderer: Send Tx to Ordering
22 | note right of Issuer: Wait for Finality of Tx
23 | @enduml
--------------------------------------------------------------------------------
/integration/fabric/atsa/fsc/diagrams/approver/issue.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 | '- force wrapping of longer text
3 | 'skinparam wrapWidth 400
4 | !pragma teoz true
5 | hide footbox
6 |
7 | participant "Alice" as Issuer
8 | participant "Approver" as Approver
9 | participant "Fabric Network" as Orderer
10 |
11 | Issuer -> Issuer: Prepare Transaction Tx
12 | Issuer -> Approver: Collect Signature on Tx
13 | Approver -> Approver: Check Tx
14 | note right of Approver: Wait for Finality of Tx
15 | Approver -> Issuer: Send back signature on Tx
16 | Issuer -> Orderer: Send Tx to Ordering
17 | note right of Issuer: Wait for Finality of Tx
18 | @enduml
--------------------------------------------------------------------------------
/integration/fabric/atsa/fsc/diagrams/issue.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 | '- force wrapping of longer text
3 | 'skinparam wrapWidth 400
4 | !pragma teoz true
5 | hide footbox
6 |
7 | participant "Issuer" as Issuer
8 | participant "Alice" as Alice
9 | participant "Fabric Network" as Orderer
10 |
11 | Issuer -> Issuer: Prepare Transaction Tx
12 | Issuer -> Alice: Collect Signature on Tx
13 | Alice -> Alice: Check Tx
14 | Alice -> Issuer: Send back signature on Tx
15 | note right of Alice: Wait for Finality of Tx
16 | Issuer -> Orderer: Send Tx to Ordering
17 | note right of Issuer: Wait for Finality of Tx
18 | @enduml
--------------------------------------------------------------------------------
/integration/fabric/atsa/fsc/diagrams/state_certification.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 | '- force wrapping of longer text
3 | 'skinparam wrapWidth 400
4 | !pragma teoz true
5 | hide footbox
6 |
7 | participant "Alice" as Alice
8 | participant "Fabric Network" as Orderer
9 |
10 | Alice -> Alice: Prepare Proposal for "State Certification"\nof state S.
11 | Alice -> Orderer: Collect enough endorsements.
12 | Orderer -> Alice: Endorsements
13 | Alice -> Alice: Assemble Endorsements in a\n"State Certification"transaction
14 | @enduml
--------------------------------------------------------------------------------
/integration/fabric/atsa/fsc/diagrams/transfer.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 | '- force wrapping of longer text
3 | 'skinparam wrapWidth 400
4 | !pragma teoz true
5 | hide footbox
6 |
7 | participant "Alice" as Alice
8 | participant "Bob" as Bob
9 | participant "Fabric Network" as Orderer
10 |
11 | Alice -> Alice: Prepare Transaction Tx
12 | Alice -> Bob: Collect Signature on Tx
13 | Bob -> Bob: Check Tx & Add Bob's Ins and Outs
14 | Bob -> Alice: Send back signature on Tx
15 | note right of Bob: Wait for Finality of Tx
16 | Alice -> Alice: Check Tx
17 | Alice -> Orderer: Send Tx to Ordering
18 | note right of Alice: Wait for Finality of Tx
19 | @enduml
--------------------------------------------------------------------------------
/integration/fabric/atsa/fsc/diagrams/transfer_with_sc.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 | '- force wrapping of longer text
3 | 'skinparam wrapWidth 400
4 | !pragma teoz true
5 | hide footbox
6 |
7 | participant "Alice" as Alice
8 | participant "Bob" as Bob
9 | participant "Fabric Network" as Orderer
10 |
11 | Alice -> Orderer: Get Certification of AgreementToSpend and Asset.
12 | Orderer -> Alice: Certifications
13 | Alice -> Alice: Prepare Transaction Tx\nappending certifications
14 | Alice -> Bob: Collect Signature on Tx
15 | Bob -> Bob: Check Tx & Add Bob's Ins and Outs
16 | Bob -> Alice: Send back signature on Tx
17 | note right of Bob: Wait for Finality of Tx
18 | Alice -> Alice: Check Tx
19 | Alice -> Orderer: Send Tx to Ordering
20 | note right of Alice: Wait for Finality of Tx
21 | @enduml
--------------------------------------------------------------------------------
/integration/fabric/events/chaincode/chaincode/main.go:
--------------------------------------------------------------------------------
1 | /*
2 | SPDX-License-Identifier: Apache-2.0
3 | */
4 |
5 | package main
6 |
7 | import (
8 | "log"
9 |
10 | chaincode "github.com/hyperledger-labs/fabric-smart-client/integration/fabric/events/chaincode/chaincode/events"
11 | "github.com/hyperledger/fabric-contract-api-go/contractapi"
12 | )
13 |
14 | func main() {
15 | eventsChaincode, err := contractapi.NewChaincode(&chaincode.SmartContract{})
16 | if err != nil {
17 | log.Panicf("Error creating events chaincode: %v", err)
18 | }
19 |
20 | if err := eventsChaincode.Start(); err != nil {
21 | log.Panicf("Error starting events chaincode: %v", err)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/integration/fabric/events/chaincode/events_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package chaincode_test
8 |
9 | import (
10 | "testing"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/integration"
13 | . "github.com/onsi/ginkgo/v2"
14 | . "github.com/onsi/gomega"
15 | )
16 |
17 | func TestEndToEnd(t *testing.T) {
18 | RegisterFailHandler(Fail)
19 | RunSpecs(t, "Events (With Chaincode)")
20 | }
21 |
22 | func StartPort() int {
23 | return integration.AssetTransferEventsAgreementWithChaincode.StartPortForNode()
24 | }
25 |
--------------------------------------------------------------------------------
/integration/fabric/events/chaincode/newChaincode/events/events.go:
--------------------------------------------------------------------------------
1 | /*
2 | SPDX-License-Identifier: Apache-2.0
3 | */
4 |
5 | package chaincode
6 |
7 | import (
8 | "fmt"
9 |
10 | "github.com/hyperledger/fabric-contract-api-go/contractapi"
11 | )
12 |
13 | // SmartContract provides functions for Event Listening
14 | type SmartContract struct {
15 | contractapi.Contract
16 | }
17 |
18 | func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface) {
19 | fmt.Println("Init Function Invoked")
20 | }
21 |
22 | func (s *SmartContract) CreateAsset(ctx contractapi.TransactionContextInterface) error {
23 | return ctx.GetStub().SetEvent("CreateAsset", []byte("Invoked Create Asset Successfully From Upgraded Chaincode"))
24 | }
25 |
--------------------------------------------------------------------------------
/integration/fabric/events/chaincode/newChaincode/main.go:
--------------------------------------------------------------------------------
1 | /*
2 | SPDX-License-Identifier: Apache-2.0
3 | */
4 |
5 | package main
6 |
7 | import (
8 | "log"
9 |
10 | chaincode "github.com/hyperledger-labs/fabric-smart-client/integration/fabric/events/chaincode/newChaincode/events"
11 | "github.com/hyperledger/fabric-contract-api-go/contractapi"
12 | )
13 |
14 | func main() {
15 | eventsChaincode, err := contractapi.NewChaincode(&chaincode.SmartContract{})
16 | if err != nil {
17 | log.Panicf("Error creating events chaincode: %v", err)
18 | }
19 |
20 | if err := eventsChaincode.Start(); err != nil {
21 | log.Panicf("Error starting events chaincode: %v", err)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/integration/fabric/iou/diagrams/iou.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/integration/fabric/iou/diagrams/iou.png
--------------------------------------------------------------------------------
/integration/fabric/iou/diagrams/iou.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 | '- force wrapping of longer text
3 | 'skinparam wrapWidth 400
4 | !pragma teoz true
5 | hide footbox
6 |
7 | actor "Borrower" as Borrower
8 | actor "Lender" as Lender
9 | actor "Approver" as Approver
10 | participant "Fabric" as Fabric
11 |
12 | Borrower -> Borrower: Create IOU State
13 | Borrower -> Borrower: Prepare Transaction
14 | Borrower -> Lender: Run CollectEndorsementsView
15 | Lender -> Lender: Check Transaction
16 | Lender -> Borrower: Run EndorseView
17 | Borrower -> Fabric: Run OrderingView
18 | Lender -> Borrower: Run EndorseView
19 |
20 | @enduml
--------------------------------------------------------------------------------
/integration/fabric/iou/iou_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package iou_test
8 |
9 | import (
10 | "testing"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/integration"
13 | . "github.com/onsi/ginkgo/v2"
14 | . "github.com/onsi/gomega"
15 | )
16 |
17 | func TestEndToEnd(t *testing.T) {
18 | RegisterFailHandler(Fail)
19 | RunSpecs(t, "IOU Suite")
20 | }
21 |
22 | func StartPort() int {
23 | return integration.IOUPort.StartPortForNode()
24 | }
25 |
--------------------------------------------------------------------------------
/integration/fabric/iou/states/state.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package states
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
12 | )
13 |
14 | // IOU models the IOU state
15 | type IOU struct {
16 | // Amount the borrower owes the lender
17 | Amount uint
18 | // Unique identifier of this state
19 | LinearID string
20 | // The list of owners of this state
21 | Parties []view.Identity
22 | }
23 |
24 | func (i *IOU) SetLinearID(id string) string {
25 | if len(i.LinearID) == 0 {
26 | i.LinearID = id
27 | }
28 | return i.LinearID
29 | }
30 |
31 | // Owners returns the list of identities owning this state
32 | func (i *IOU) Owners() state.Identities {
33 | return i.Parties
34 | }
35 |
--------------------------------------------------------------------------------
/integration/fabric/iouhsm/iou_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package iouhsm_test
8 |
9 | import (
10 | "testing"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/integration"
13 | . "github.com/onsi/ginkgo/v2"
14 | . "github.com/onsi/gomega"
15 | )
16 |
17 | func TestEndToEnd(t *testing.T) {
18 | RegisterFailHandler(Fail)
19 | RunSpecs(t, "IOU (With HSM) Suite")
20 | }
21 |
22 | func StartPort() int {
23 | return integration.IOUHSMPort.StartPortForNode()
24 | }
25 |
--------------------------------------------------------------------------------
/integration/fabric/stoprestart/stoprestart_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package stoprestart_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 |
15 | "github.com/hyperledger-labs/fabric-smart-client/integration"
16 | )
17 |
18 | func TestEndToEnd(t *testing.T) {
19 | RegisterFailHandler(Fail)
20 | RunSpecs(t, "Stop and Restart with Fabric Suite")
21 | }
22 |
23 | func StartPort() int {
24 | return integration.FabricStopRestart.StartPortForNode()
25 | }
26 |
--------------------------------------------------------------------------------
/integration/fabric/twonets/twonets_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package twonets_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 |
15 | "github.com/hyperledger-labs/fabric-smart-client/integration"
16 | )
17 |
18 | func TestEndToEnd(t *testing.T) {
19 | RegisterFailHandler(Fail)
20 | RunSpecs(t, "Two Fabric Networks Suite")
21 | }
22 |
23 | func StartPort() int {
24 | return integration.TwoFabricNetworksPort.StartPortForNode()
25 | }
26 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/factory.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package pingpong
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
10 |
11 | // InitiatorViewFactory is the factory of Initiator views
12 | type InitiatorViewFactory struct{}
13 |
14 | // NewView returns a new instance of the Initiator view
15 | func (i *InitiatorViewFactory) NewView(in []byte) (view.View, error) {
16 | return &Initiator{}, nil
17 | }
18 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/mock/factory.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package mock
8 |
9 | import (
10 | "encoding/json"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/assert"
13 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
14 | )
15 |
16 | // InitiatorViewFactory is the factory of Initiator views
17 | type InitiatorViewFactory struct{}
18 |
19 | // NewView returns a new instance of the Initiator view
20 | func (i *InitiatorViewFactory) NewView(in []byte) (view.View, error) {
21 | f := &Initiator{Params: &Params{}}
22 | err := json.Unmarshal(in, f.Params)
23 | assert.NoError(err, "failed unmarshalling input")
24 | return f, nil
25 | }
26 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/pingpong_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package pingpong_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 |
15 | "github.com/hyperledger-labs/fabric-smart-client/integration"
16 | )
17 |
18 | func TestEndToEnd(t *testing.T) {
19 | RegisterFailHandler(Fail)
20 | RunSpecs(t, "Ping Pong Suite")
21 | }
22 |
23 | func StartPort() int {
24 | return integration.PingPongPort.StartPortForNode()
25 | }
26 |
27 | func StartPortWithGeneration() int {
28 | return integration.PingPong2Port.StartPortForNode()
29 | }
30 |
31 | func StartPortWithAdmin() int {
32 | return integration.PingPongWithAdminPort.StartPortForNode()
33 | }
34 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/conf.json:
--------------------------------------------------------------------------------
1 | {"StartPort":21000}
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto-config.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | PeerOrgs:
3 | - Name: fsc
4 | Domain: fsc.example.com
5 | EnableNodeOUs: false
6 | Users:
7 | Count: 4
8 | Specs:
9 | - Name: initiator
10 | - Name: responder
11 | - Name: User1
12 | - Name: User2
13 |
14 | Specs:
15 | - Hostname: initiator
16 | SANS:
17 | - 0.0.0.0
18 | - localhost
19 | - 127.0.0.1
20 | - ::1
21 | - Hostname: responder
22 | SANS:
23 | - 0.0.0.0
24 | - localhost
25 | - 127.0.0.1
26 | - ::1
27 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/ca/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/3aiyhzHptobMiW4
3 | sxwvhB99lhDtgMbYB+Rzo+occfuhRANCAASW9lkn7MGIUusTmsKZq+XhY2US8mNb
4 | Bo1mEBg28JD1Zdjaoc5/sprEVbwZogcGoylfZJXONVcxaRmk9D7G0anx
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/peers/initiator.fsc.example.com/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgDPgyzF6sCuuLv/2S
3 | 5o8haRyxerV1uIFcLcM7zNElkoihRANCAAQdZMY/+MxnQxsp4Kgfsr5lwk8qrfYg
4 | WGa38XqxSX/XKyIyTSxEOV5vIKuPEDcpVz6DfpstXU+3zIrc4Xzg51a2
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/peers/initiator.fsc.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCNzbSXiQwEOyekSl
3 | TUNHT5WL+OADVDcSs3O7At6NtW6hRANCAAR6V2o6RuILx7qEQ0i4/bkFsl3EWLpJ
4 | x4t0CnThWt75HWxUSWPW5rKZH2pS38carSq3WfWvMXpx0FWafVh17xnM
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/peers/responder.fsc.example.com/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgp9PPue9ZXLaxLgj3
3 | sr0Ewf7/Dqis5pGhDwIZHzy0zV+hRANCAARinfdr6ZdlzH/TX4d3LoCeQpT+mNpg
4 | AQZOuPuglUw1OJIGh6ivlh7MAT0SzIjra6cj8/S5q0d0EVB2fJ85skrL
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/peers/responder.fsc.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgJIJfSYwMB+kGbqBg
3 | oozWoB1KQl48PiyWwltUBo8O0iuhRANCAAT3kzs3spXjuGaQBLFsrgHjfLlRvZxR
4 | zIlqidPeYKfcOFIoux7MqxwbUImOz6/3puiKQ/r/ktQ3IjMNgSb5CK7Z
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/tlsca/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3g4dg9wmbxFiMoEI
3 | dJAwv1wou7qCzx3s4Wahng+A8AChRANCAARKEnY9xhMW5Qc+Upedz2cz0ZoxOUl0
4 | M3RwlihskvYfNChX08s66LHoQ5q8fZ/v2EnmViLUadZRGX864RNw1xOP
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/Admin@fsc.example.com/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgkj+HZN2iGz8eR8qA
3 | jpT3Udr/pMYJVqL+v+LO3t2aEZihRANCAASgg5Fxn5GV6pqD1B/+KXETZHJw+KX8
4 | +ADz7l2Yd1IKsJEpqv/BHfGwMyJF1R/yTxcoKcKggWEF1lJa1BdCUkzH
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/Admin@fsc.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg4e5EbsVW3ZqIuwva
3 | xfu9z4K0q+gUM+tgMpP1NMmWe+ihRANCAAQE5GakCCsVFwJz7RKshEgDEFV4dRQ1
4 | g6iELM+dVlklNJG72qBcpRI6mbknFa3nXJoFLEFEdfYWMzzL5k68ijUC
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/User1@fsc.example.com/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgMXWxZwxyptU+4XW6
3 | nV+i7LN1N/iLp6bOtK4Kk8W+QxyhRANCAARt3SNGpI1ntAn6zGt1AasUnQjggj6p
4 | CItP6hDcv8x0KOPPfTHZasuLiHLVGFGDZxSmtK+ywMI7UNqe6zsI/m2V
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/User1@fsc.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg5CDaBe8vVMuSrgj9
3 | aSrPy+uVipPTuNxUPeIXdCI7UcOhRANCAAR3eXHXVZ5Z3hDZTv5zgcp4Kt+UGfYS
4 | Qb7gwNClwaQu/TfWyzLvoGAXLhQc9xOh5bDTzdRBveQ+e2u9NZrVU85G
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/User2@fsc.example.com/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgutiC4AUCDgYhv+Yd
3 | 5v9zidO6XXuLlkLtLNlydSnRdWGhRANCAATn/8Bsm9d01QPuroHP7aq7iH/KOlU1
4 | 1V1CvZARWmVYe+aVIKmapU7K4ryAUY1SvhG5LwRZnvbuteyVnS/ypNNY
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/User2@fsc.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgL3w9IKbqj1z2nTIi
3 | cZejedsWu/TUrc3RJg0D4DPhmnGhRANCAAS/6/2SFbNdlCg+bqY9NumdNb3M84XH
4 | zuvrS+GRfrMzt1hgwe0Y/cfV8Ch/JSzwB0tpGD7HMs/civLVX7Un6vRj
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/initiator@fsc.example.com/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUR/rltCSI2ntKtlb
3 | NNm2qhOWt6d+XUAoGlc5fqDWQ9ihRANCAAT/3g6XQZvNHLplp6MxkYaykRT+YjvO
4 | GnAVK8JaysVUQ/z4v9tz0Lv8KbwThB/VJ3KSrRZ1HEHBWlfg1cvE/Rqj
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/initiator@fsc.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgo4DHR+vqKcCfiCR0
3 | D0TNeE0zdcZU/BpCFx0a8qnob3KhRANCAATeRVjJCFPOTNZN8Lq3ILIBaWBZzQLP
4 | jXSyOptPKrDH4Wsny/P0nZZsgBo8JbV7M+4LsfepUGiyI/ioX0JYfTzA
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/responder@fsc.example.com/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgJMXyyUUcSyi4wUOo
3 | Y58kheUq4J3oYA5TucZ7cYV8TiahRANCAAS27zkvUozGDpswCz2tcEbLavOsTLo4
4 | h/R4lQyC0neLedCnR0Yj45zdaMfsqRVCR1tfG2FpkeHgVc52EPCW4l7C
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/crypto/peerOrganizations/fsc.example.com/users/responder@fsc.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXjSwmjpyo5it//vg
3 | VQRPZ3Iq3NiGSWZmkC6Oy2+TXVGhRANCAAS75FvkxczACpvmPwBSQkP10bVVtNse
4 | 17fEV+WN4r5rWTWZmysAWEFF9nGbo5x6ZceN8Y7f3MnmaZfTkbZ5dHQw
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/nodes/initiator.0/client-config.yaml:
--------------------------------------------------------------------------------
1 | version: 0
2 | address: 127.0.0.1:21000
3 | tlsconfig:
4 | certpath: ""
5 | keypath: ""
6 | peercacertpath: ./../../crypto/peerOrganizations/fsc.example.com/peers/initiator.fsc.example.com/tls/ca.crt
7 | timeout: 10m0s
8 | signerconfig:
9 | mspid: ""
10 | identitypath: ./../../crypto/peerOrganizations/fsc.example.com/peers/initiator.fsc.example.com/msp/signcerts/initiator.fsc.example.com-cert.pem
11 | keypath: ./../../crypto/peerOrganizations/fsc.example.com/peers/initiator.fsc.example.com/msp/keystore/priv_sk
12 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/nodes/responder.0/client-config.yaml:
--------------------------------------------------------------------------------
1 | version: 0
2 | address: 127.0.0.1:21003
3 | tlsconfig:
4 | certpath: ""
5 | keypath: ""
6 | peercacertpath: ./../../crypto/peerOrganizations/fsc.example.com/peers/responder.fsc.example.com/tls/ca.crt
7 | timeout: 10m0s
8 | signerconfig:
9 | mspid: ""
10 | identitypath: ./../../crypto/peerOrganizations/fsc.example.com/peers/responder.fsc.example.com/msp/signcerts/responder.fsc.example.com-cert.pem
11 | keypath: ./../../crypto/peerOrganizations/fsc.example.com/peers/responder.fsc.example.com/msp/keystore/priv_sk
12 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/fsc/routing-config.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | routes:
3 | initiator:
4 | - 0.0.0.0:21001
5 | responder:
6 | - 0.0.0.0:21004
7 |
--------------------------------------------------------------------------------
/integration/fsc/pingpong/testdata/topology.yaml:
--------------------------------------------------------------------------------
1 | topologies:
2 | - name: fsc
3 | type: fsc
4 | peers:
5 | - name: initiator
6 | bootstrap: true
7 | executablePath: github.com/hyperledger-labs/fabric-smart-client/integration/fsc/pingpong/cmd/initiator
8 | options:
9 | mapping:
10 | Aliases:
11 | - alice
12 | - name: responder
13 | executablePath: github.com/hyperledger-labs/fabric-smart-client/integration/fsc/pingpong/cmd/responder
14 | options:
15 | mapping:
16 | Aliases:
17 | - bob
18 | logging:
19 | spec: grpc=error:info
20 | format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc}
21 | -> %{level:.4s} %{id:03x}%{color:reset} %{message}'''
22 | monitoring:
23 | tracingType: none
24 | metricsType: none
25 |
--------------------------------------------------------------------------------
/integration/fsc/stoprestart/factory.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package stoprestart
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
10 |
11 | type InitiatorViewFactory struct{}
12 |
13 | func (i *InitiatorViewFactory) NewView(in []byte) (view.View, error) {
14 | return &Initiator{}, nil
15 | }
16 |
--------------------------------------------------------------------------------
/integration/fsc/stoprestart/stoprestart_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package stoprestart_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 |
15 | "github.com/hyperledger-labs/fabric-smart-client/integration"
16 | )
17 |
18 | func TestEndToEnd(t *testing.T) {
19 | RegisterFailHandler(Fail)
20 | RunSpecs(t, "Stop and Restart Suite")
21 | }
22 |
23 | func StartPort() int {
24 | return integration.PingPongPort.StartPortForNode()
25 | }
26 |
--------------------------------------------------------------------------------
/integration/nwo/cmd/cryptogen/metadata/metadata.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package metadata
8 |
9 | import (
10 | "fmt"
11 | "runtime"
12 |
13 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/sdk/metadata"
14 | )
15 |
16 | const ProgramName = "cryptogen"
17 |
18 | var (
19 | CommitSHA = metadata.CommitSHA
20 | Version = metadata.Version
21 | )
22 |
23 | func GetVersionInfo() string {
24 | return fmt.Sprintf(
25 | "%s:\n Version: %s\n Commit SHA: %s\n Go version: %s\n OS/Arch: %s",
26 | ProgramName,
27 | Version,
28 | CommitSHA,
29 | runtime.Version(),
30 | fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH),
31 | )
32 | }
33 |
--------------------------------------------------------------------------------
/integration/nwo/cmd/cryptogen/msp/msp_internal_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package msp
8 |
9 | var ExportConfig = exportConfig
10 |
--------------------------------------------------------------------------------
/integration/nwo/common/color.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package common
8 |
9 | import "fmt"
10 |
11 | var colorIndex uint
12 |
13 | func NextColor() string {
14 | color := colorIndex%14 + 31
15 | if color > 37 {
16 | color = color + 90 - 37
17 | }
18 |
19 | colorIndex++
20 | return fmt.Sprintf("%dm", color)
21 | }
22 |
--------------------------------------------------------------------------------
/integration/nwo/common/images.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package common
8 |
9 | import (
10 | "encoding/base32"
11 | "strings"
12 |
13 | "github.com/hyperledger/fabric/common/util"
14 | )
15 |
16 | // UniqueName generates base-32 enocded UUIDs for container names.
17 | func UniqueName() string {
18 | name := base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(util.GenerateBytesUUID())
19 | return strings.ToLower(name)
20 | }
21 |
--------------------------------------------------------------------------------
/integration/nwo/common/runner/buffer.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package runner
8 |
9 | import (
10 | "github.com/onsi/gomega/gbytes"
11 | )
12 |
13 | type silenceBuffer struct {
14 | buffer *gbytes.Buffer
15 | }
16 |
17 | func (c *silenceBuffer) Write(p []byte) (n int, err error) {
18 | if c.buffer.Closed() {
19 | // NO-OP
20 | return len(p), nil
21 | }
22 |
23 | return c.buffer.Write(p)
24 | }
25 |
26 | func NewSilenceBuffer(writer *gbytes.Buffer) *silenceBuffer {
27 | return &silenceBuffer{
28 | buffer: writer,
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/integration/nwo/fabric/commands/cryptogen.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package commands
8 |
9 | type Generate struct {
10 | NetworkPrefix string
11 | Config string
12 | Output string
13 | }
14 |
15 | func (c Generate) SessionName() string {
16 | return c.NetworkPrefix + "-cryptogen-generate"
17 | }
18 |
19 | func (c Generate) Args() []string {
20 | return []string{
21 | "cryptogen",
22 | "generate",
23 | "--config", c.Config,
24 | "--output", c.Output,
25 | }
26 | }
27 |
28 | type Extend struct {
29 | Config string
30 | Input string
31 | }
32 |
33 | func (c Extend) SessionName() string {
34 | return "cryptogen-extend"
35 | }
36 |
37 | func (c Extend) Args() []string {
38 | return []string{
39 | "extend",
40 | "--config", c.Config,
41 | "--input", c.Input,
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/integration/nwo/fabric/network/components.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package network
8 |
9 | type BuilderClient interface {
10 | Build(path string) string
11 | }
12 |
13 | type Builder struct {
14 | client BuilderClient
15 | }
16 |
17 | func (c *Builder) FSCCLI() string {
18 | return c.Build("github.com/hyperledger-labs/fabric-smart-client/cmd/fsccli")
19 | }
20 |
21 | func (c *Builder) Idemixgen() string {
22 | return c.Build("github.com/IBM/idemix/tools/idemixgen")
23 | }
24 |
25 | func (c *Builder) Build(path string) string {
26 | return c.client.Build(path)
27 | }
28 |
--------------------------------------------------------------------------------
/integration/nwo/fabric/network/topology.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package network
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fabric/topology"
10 |
11 | func NewEmptyTopology() *topology.Topology {
12 | return &topology.Topology{
13 | TopologyName: "default",
14 | TopologyType: "fabric",
15 | Driver: "generic",
16 | TLSEnabled: true,
17 | Organizations: []*topology.Organization{},
18 | Consortiums: []*topology.Consortium{},
19 | Consensus: &topology.Consensus{},
20 | SystemChannel: &topology.SystemChannel{},
21 | Orderers: []*topology.Orderer{},
22 | Channels: []*topology.Channel{},
23 | Profiles: []*topology.Profile{},
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/integration/nwo/fabric/packager/replacer/replacer.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package replacer
8 |
9 | type Func func(string, string) (string, []byte)
10 |
--------------------------------------------------------------------------------
/integration/nwo/fabric/topology/idemix.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package topology
8 |
9 | import "strings"
10 |
11 | func (t *Topology) EnableIdemix() *fscOrg {
12 | name := "IdemixOrg"
13 | o := &Organization{
14 | ID: name,
15 | Name: name,
16 | MSPID: name + "MSP",
17 | MSPType: "idemix",
18 | Domain: strings.ToLower(name) + ".example.com",
19 | EnableNodeOUs: t.NodeOUs,
20 | Users: 0,
21 | CA: &CA{Hostname: "ca"},
22 | }
23 | t.AppendOrganization(o)
24 | return &fscOrg{c: t, o: o}
25 | }
26 |
--------------------------------------------------------------------------------
/integration/nwo/fabric/topology/opts.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package topology
8 |
9 | type OrganizationOpt struct {
10 | Name string
11 | }
12 |
--------------------------------------------------------------------------------
/integration/nwo/fabric/topology/org.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package topology
8 |
9 | type fscOrg struct {
10 | c *Topology
11 | o *Organization
12 | }
13 |
14 | func (fo *fscOrg) AddPeer(name string) *fscOrg {
15 | fo.c.AddPeer(name, fo.o.ID, FabricPeer, false)
16 |
17 | return fo
18 | }
19 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/commands/cryptogen.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package commands
8 |
9 | type Generate struct {
10 | Config string
11 | Output string
12 | }
13 |
14 | func (c Generate) SessionName() string {
15 | return "cryptogen-generate"
16 | }
17 |
18 | func (c Generate) Args() []string {
19 | return []string{
20 | "cryptogen",
21 | "generate",
22 | "--config", c.Config,
23 | "--output", c.Output,
24 | }
25 | }
26 |
27 | type Extend struct {
28 | Config string
29 | Input string
30 | }
31 |
32 | func (c Extend) SessionName() string {
33 | return "cryptogen-extend"
34 | }
35 |
36 | func (c Extend) Args() []string {
37 | return []string{
38 | "extend",
39 | "--config", c.Config,
40 | "--input", c.Input,
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/commands/node.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package commands
8 |
9 | type NodeStart struct {
10 | NodeID string
11 | }
12 |
13 | func (n NodeStart) SessionName() string {
14 | return n.NodeID
15 | }
16 |
17 | func (n NodeStart) Args() []string {
18 | return []string{
19 | "node", "start",
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/components.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fsc
8 |
9 | type BuilderClient interface {
10 | Build(path string) string
11 | }
12 |
13 | type Builder struct {
14 | client BuilderClient
15 | }
16 |
17 | func (c *Builder) Build(path string) string {
18 | return c.client.Build(path)
19 | }
20 |
21 | func (c *Builder) FSCCLI() string {
22 | return c.Build("github.com/hyperledger-labs/fabric-smart-client/cmd/fsccli")
23 | }
24 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/fsc_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fsc
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 | )
15 |
16 | func TestEndToEnd(t *testing.T) {
17 | RegisterFailHandler(Fail)
18 | RunSpecs(t, "Node")
19 | }
20 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/mocks/mocks/sdk.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package mocks
8 |
9 | import "context"
10 |
11 | type SDK struct {
12 | }
13 |
14 | func NewSDK() *SDK {
15 | return &SDK{}
16 | }
17 |
18 | func (d *SDK) Install() error {
19 | panic("implement me")
20 | }
21 |
22 | func (d *SDK) Start(ctx context.Context) error {
23 | panic("implement me")
24 | }
25 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/mocks/sdk.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package mocks
8 |
9 | import "context"
10 |
11 | type SDK struct {
12 | }
13 |
14 | func NewSDK() *SDK {
15 | return &SDK{}
16 | }
17 |
18 | func (d *SDK) Install() error {
19 | panic("implement me")
20 | }
21 |
22 | func (d *SDK) Start(ctx context.Context) error {
23 | panic("implement me")
24 | }
25 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/node/mocks/sdk1/sdk.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sdk1
8 |
9 | import "context"
10 |
11 | type DummySDK struct {
12 | }
13 |
14 | func (d *DummySDK) Install() error {
15 | panic("implement me")
16 | }
17 |
18 | func (d *DummySDK) Start(ctx context.Context) error {
19 | panic("implement me")
20 | }
21 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/node/mocks/sdk2/sdk.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sdk2
8 |
9 | import "context"
10 |
11 | type DummySDK struct {
12 | }
13 |
14 | func (d *DummySDK) Install() error {
15 | panic("implement me")
16 | }
17 |
18 | func (d *DummySDK) Start(ctx context.Context) error {
19 | panic("implement me")
20 | }
21 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/node/mocks/sdk3/sdk.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sdk3
8 |
9 | import "context"
10 |
11 | type DummySDK struct {
12 | }
13 |
14 | func (d *DummySDK) Install() error {
15 | panic("implement me")
16 | }
17 |
18 | func (d *DummySDK) Start(ctx context.Context) error {
19 | panic("implement me")
20 | }
21 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/node/routing_template.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package node
8 |
9 | const RoutingTemplate = `---
10 | routes:
11 | {{- range $key, $value := .Routing }}
12 | {{ $key }}:
13 | {{- range $value }}
14 | - {{ . }}
15 | {{- end }}
16 | {{- end }}
17 | `
18 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/options.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fsc
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fsc/node"
10 |
11 | const (
12 | KvsPersistencePrefix = "fsc_kvs"
13 | AuditInfoPersistencePrefix = "fsc_auditinfo"
14 | SignerInfoPersistencePrefix = "fsc_signerinfo"
15 | BindingPersistencePrefix = "fsc_binding"
16 | EndorseTxPersistencePrefix = "fsc_endorsetx"
17 | MetadataPersistencePrefix = "fsc_metadata"
18 | EnvelopePersistencePrefix = "fsc_envelope"
19 | )
20 |
21 | var AllPrefixes = []node.PersistenceKey{
22 | KvsPersistencePrefix,
23 | BindingPersistencePrefix,
24 | AuditInfoPersistencePrefix,
25 | SignerInfoPersistencePrefix,
26 | EndorseTxPersistencePrefix,
27 | EnvelopePersistencePrefix,
28 | MetadataPersistencePrefix,
29 | }
30 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/testdata/foo/initiator/view.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package initiator
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11 | )
12 |
13 | type Factory struct {
14 | }
15 |
16 | func (f Factory) NewView(in []byte) (view.View, error) {
17 | panic("implement me")
18 | }
19 |
20 | type Initiator struct {
21 | }
22 |
23 | func (i *Initiator) Call(context view.Context) (interface{}, error) {
24 | panic("implement me")
25 | }
26 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/testdata/foo/responder/view.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package responder
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11 | )
12 |
13 | type Factory struct {
14 | }
15 |
16 | func (f Factory) NewView(in []byte) (view.View, error) {
17 | panic("implement me")
18 | }
19 |
20 | type Responder struct{}
21 |
22 | func (r *Responder) Call(context view.Context) (interface{}, error) {
23 | panic("implement me")
24 | }
25 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/testdata/initiator/view.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package initiator
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11 | )
12 |
13 | type Factory struct {
14 | }
15 |
16 | func (f Factory) NewView(in []byte) (view.View, error) {
17 | panic("implement me")
18 | }
19 |
20 | type Initiator struct {
21 | }
22 |
23 | func (i *Initiator) Call(context view.Context) (interface{}, error) {
24 | panic("implement me")
25 | }
26 |
--------------------------------------------------------------------------------
/integration/nwo/fsc/testdata/responder/view.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package responder
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11 | )
12 |
13 | type Factory struct {
14 | }
15 |
16 | func (f Factory) NewView(in []byte) (view.View, error) {
17 | panic("implement me")
18 | }
19 |
20 | type Responder struct{}
21 |
22 | func (r *Responder) Call(context view.Context) (interface{}, error) {
23 | panic("implement me")
24 | }
25 |
--------------------------------------------------------------------------------
/integration/nwo/monitoring/hle/config.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package hle
8 |
9 | type (
10 | Network struct {
11 | Name string `json:"name"`
12 | Profile string `json:"profile"`
13 | EnableAuthentication bool `json:"enableAuthentication"`
14 | }
15 |
16 | Config struct {
17 | NetworkConfigs map[string]Network `json:"network-configs"`
18 | License string `json:"license"`
19 | }
20 | )
21 |
--------------------------------------------------------------------------------
/integration/nwo/monitoring/monitoring/provisioning.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package monitoring
8 |
9 | const DatasourceTemplate = `apiVersion: 1
10 |
11 | datasources:
12 | - name: 'Prometheus'
13 | type: 'prometheus'
14 | access: 'proxy'
15 | orgId: 1
16 | url: 'http://prometheus:9090'
17 | httpMethod: GET
18 | isDefault: true
19 | version: 1
20 | editable: true
21 | `
22 | const DashboardTemplate = `apiVersion: 1
23 |
24 | providers:
25 | - name: 'default'
26 | orgId: 1
27 | folder: ''
28 | type: file
29 | disableDeletion: false
30 | updateIntervalSeconds: 10 #how often Grafana will scan for changed dashboards
31 | options:
32 | path: /var/lib/grafana/dashboards`
33 |
--------------------------------------------------------------------------------
/integration/nwo/orion/templates.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package orion
8 |
9 | const ExtensionTemplate = `
10 | orion:
11 | enabled: true
12 | {{ Name }}:
13 | server:
14 | id: {{ ServerID }}
15 | url: {{ ServerURL }}
16 | ca: {{ CACertPath }}
17 | identities: {{ range Identities }}
18 | - name: {{ .Name }}
19 | cert: {{ .Cert }}
20 | key: {{ .Key }}
21 | {{- end }}
22 | vault:
23 | persistence: {{ VaultPersistence }}
24 | `
25 |
--------------------------------------------------------------------------------
/integration/orion/cars/cars_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package cars_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 |
15 | "github.com/hyperledger-labs/fabric-smart-client/integration"
16 | )
17 |
18 | func TestEndToEnd(t *testing.T) {
19 | RegisterFailHandler(Fail)
20 | RunSpecs(t, "Ping Pong with Orion Suite")
21 | }
22 |
23 | func StartPort() int {
24 | return integration.PingPongOrion.StartPortForNode()
25 | }
26 |
--------------------------------------------------------------------------------
/node/node/diag/goroutine.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package diag
8 |
9 | import (
10 | "bytes"
11 | "runtime/pprof"
12 | )
13 |
14 | type Logger interface {
15 | Infof(template string, args ...interface{})
16 | Errorf(template string, args ...interface{})
17 | }
18 |
19 | func CaptureGoRoutines() (string, error) {
20 | var buf bytes.Buffer
21 | err := pprof.Lookup("goroutine").WriteTo(&buf, 2)
22 | if err != nil {
23 | return "", err
24 | }
25 | return buf.String(), nil
26 | }
27 |
28 | func LogGoRoutines(logger Logger) {
29 | output, err := CaptureGoRoutines()
30 | if err != nil {
31 | logger.Errorf("failed to capture go routines: %s", err)
32 | return
33 | }
34 |
35 | logger.Infof("Go routines report:\n%s", output)
36 | }
37 |
--------------------------------------------------------------------------------
/node/node/signals.go:
--------------------------------------------------------------------------------
1 | //go:build !windows
2 | // +build !windows
3 |
4 | /*
5 | Copyright IBM Corp. All Rights Reserved.
6 |
7 | SPDX-License-Identifier: Apache-2.0
8 | */
9 |
10 | package node
11 |
12 | import (
13 | "os"
14 | "syscall"
15 |
16 | "github.com/hyperledger-labs/fabric-smart-client/node/node/diag"
17 | )
18 |
19 | func addPlatformSignals(sigs map[os.Signal]func()) map[os.Signal]func() {
20 | sigs[syscall.SIGUSR1] = func() { diag.LogGoRoutines(logger.Named("diag")) }
21 | return sigs
22 | }
23 |
--------------------------------------------------------------------------------
/node/node/signals_windows.go:
--------------------------------------------------------------------------------
1 | //go:build windows
2 | // +build windows
3 |
4 | /*
5 | Copyright IBM Corp. All Rights Reserved.
6 |
7 | SPDX-License-Identifier: Apache-2.0
8 | */
9 |
10 | package node
11 |
12 | import (
13 | "os"
14 | )
15 |
16 | func addPlatformSignals(sigs map[os.Signal]func()) map[os.Signal]func() {
17 | return sigs
18 | }
19 |
--------------------------------------------------------------------------------
/pkg/api/client.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package api
8 |
9 | type ViewClient interface {
10 | // CallView takes in input a view factory identifier, fid, and an input, in, and invokes the
11 | // factory f bound to fid on input in. The view returned by the factory is invoked on
12 | // a freshly created context. This call is blocking until the result is produced or
13 | // an error is returned.
14 | CallView(fid string, in []byte) (interface{}, error)
15 |
16 | // Initiate takes in input a view factory identifier, fid, and an input, in, and invokes the
17 | // factory f bound to fid on input in. The view returned by the factory is invoked on
18 | // a freshly created context whose identifier, cid, is immediately returned.
19 | // This call is non-blocking.
20 | Initiate(fid string, in []byte) (string, error)
21 | }
22 |
--------------------------------------------------------------------------------
/pkg/api/contextprovider.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package api
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11 | )
12 |
13 | type ContextProvider interface {
14 | InitiateContext(view view.View) (view.Context, error)
15 | InitiateContextWithIdentity(view view.View, id view.Identity) (view.Context, error)
16 | Context(contextID string) (view.Context, error)
17 | }
18 |
--------------------------------------------------------------------------------
/pkg/api/node.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package api
8 |
9 | type FabricSmartClientNode interface {
10 | ServiceProvider
11 | ViewRegistry
12 | ContextProvider
13 | ViewClient
14 |
15 | Start() error
16 |
17 | Stop()
18 | }
19 |
--------------------------------------------------------------------------------
/pkg/api/sdk.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package api
8 |
9 | import (
10 | "context"
11 | )
12 |
13 | type SDK interface {
14 | Install() error
15 |
16 | Start(ctx context.Context) error
17 | }
18 |
--------------------------------------------------------------------------------
/pkg/api/serviceprovider.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package api
8 |
9 | type ServiceProvider interface {
10 | GetService(v interface{}) (interface{}, error)
11 |
12 | RegisterService(service interface{}) error
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/runner/runner.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package runner
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/common/services/logging"
10 |
11 | var logger = logging.MustGetLogger()
12 |
13 | type BatchExecutor[I any, O any] interface {
14 | Execute(input I) (O, error)
15 | }
16 |
17 | type BatchRunner[V any] interface {
18 | Run(v V) error
19 | }
20 |
21 | type Output[O any] struct {
22 | Val O
23 | Err error
24 | }
25 |
26 | type ExecuteFunc[I any, O any] func([]I) []O
27 |
--------------------------------------------------------------------------------
/pkg/runner/serial.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package runner
8 |
9 | func NewSerialRunner[V any](runner ExecuteFunc[V, error]) BatchRunner[V] {
10 | return &serialRunner[V]{executor: runner}
11 | }
12 |
13 | type serialRunner[V any] struct {
14 | executor ExecuteFunc[V, error]
15 | }
16 |
17 | func (r *serialRunner[V]) Run(val V) error {
18 | return r.executor([]V{val})[0]
19 | }
20 |
21 | func NewSerialExecutor[I any, O any](executor ExecuteFunc[I, Output[O]]) BatchExecutor[I, O] {
22 | return &serialExecutor[I, O]{executor: executor}
23 | }
24 |
25 | type serialExecutor[I any, O any] struct {
26 | executor ExecuteFunc[I, Output[O]]
27 | }
28 |
29 | func (r *serialExecutor[I, O]) Execute(input I) (O, error) {
30 | res := r.executor([]I{input})[0]
31 | return res.Val, res.Err
32 | }
33 |
--------------------------------------------------------------------------------
/pkg/utils/compose/compose_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package compose
8 |
9 | import (
10 | "strings"
11 | "testing"
12 |
13 | "github.com/stretchr/testify/assert"
14 | )
15 |
16 | func TestAppendAttributes(t *testing.T) {
17 | var sb strings.Builder
18 | CreateCompositeKeyOrPanic(&sb, "ot", "1", "2")
19 | k := AppendAttributesOrPanic(&sb, "3")
20 | assert.Equal(t, CreateCompositeKeyOrPanic(&strings.Builder{}, "ot", "1", "2", "3"), k)
21 | }
22 |
--------------------------------------------------------------------------------
/pkg/utils/uuid_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package utils
8 |
9 | import (
10 | "testing"
11 |
12 | "github.com/stretchr/testify/assert"
13 | )
14 |
15 | func TestUUIDLettersOnly(t *testing.T) {
16 | assert.Regexp(t, "^[a-zA-Z]{16}$", GenerateUUIDOnlyLetters())
17 | }
18 |
--------------------------------------------------------------------------------
/platform/common/driver/committer.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import "context"
10 |
11 | // TransactionFilter is used to filter unknown transactions.
12 | // If the filter accepts, the transaction is processed by the commit pipeline anyway.
13 | type TransactionFilter interface {
14 | Accept(txID TxID, env []byte) (bool, error)
15 | }
16 |
17 | // FinalityListener is the interface that must be implemented to receive transaction status notifications
18 | type FinalityListener[V comparable] interface {
19 | // OnStatus is called when the status of a transaction changes, or it is already valid or invalid
20 | OnStatus(ctx context.Context, txID TxID, status V, statusMessage string)
21 | }
22 |
--------------------------------------------------------------------------------
/platform/common/driver/pagination.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections/iterators"
11 | )
12 |
13 | type Pagination interface {
14 | Prev() (Pagination, error)
15 | Next() (Pagination, error)
16 | }
17 |
18 | type PageIterator[R comparable] struct {
19 | Items iterators.Iterator[R]
20 | Pagination Pagination
21 | }
22 |
--------------------------------------------------------------------------------
/platform/common/driver/types.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | type NamedDriver[D any] struct {
10 | Name PersistenceType
11 | Driver D
12 | }
13 |
14 | type (
15 | TxID = string
16 | BlockNum = uint64
17 | TxNum = uint64
18 | Namespace = string
19 | Network = string
20 | Channel = string
21 | )
22 |
23 | type PersistenceType string
24 |
--------------------------------------------------------------------------------
/platform/common/utils/cache/cache.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package cache
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/common/services/logging"
10 |
11 | var logger = logging.MustGetLogger()
12 |
13 | type Map[K comparable, V any] interface {
14 | Get(K) (V, bool)
15 | Put(K, V)
16 | Update(K, func(bool, V) (bool, V)) bool
17 | Delete(...K)
18 | Len() int
19 | }
20 |
21 | type rwLock interface {
22 | Lock()
23 | Unlock()
24 | RLock()
25 | RUnlock()
26 | }
27 |
28 | type noLock struct{}
29 |
30 | func (l *noLock) Lock() {}
31 | func (l *noLock) Unlock() {}
32 | func (l *noLock) RLock() {}
33 | func (l *noLock) RUnlock() {}
34 |
--------------------------------------------------------------------------------
/platform/common/utils/closer.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package utils
8 |
9 | import "fmt"
10 |
11 | type Closer interface {
12 | Close() error
13 | }
14 |
15 | func CloseMute(closer Closer) {
16 | if closer == nil {
17 | return
18 | }
19 | // ignore err
20 | _ = closer.Close()
21 | }
22 |
23 | func IgnoreError(err error) {
24 | // ignore the error
25 | fmt.Printf("IgnoreError: %v\n", err)
26 | }
27 |
28 | func IgnoreErrorFunc(f func() error) {
29 | _ = f()
30 | }
31 |
32 | func IgnoreErrorWithOneArg[T any](fn func(t T) error, t T) {
33 | _ = fn(t)
34 | }
35 |
--------------------------------------------------------------------------------
/platform/common/utils/collections/iterators/empty.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package iterators
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
10 |
11 | // Empty returns an empty Iterator
12 | func Empty[K any]() Iterator[K] { return &empty[K]{zero: utils.Zero[K]()} }
13 |
14 | type empty[K any] struct{ zero K }
15 |
16 | func (i *empty[K]) HasNext() bool { return false }
17 |
18 | func (i *empty[K]) Close() {}
19 |
20 | func (i *empty[K]) Next() (K, error) { return i.zero, nil }
21 |
--------------------------------------------------------------------------------
/platform/common/utils/collections/iterators/filter.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package iterators
8 |
9 | // Filter lazily filters an iterator
10 | func Filter[A any](iterator Iterator[*A], filter Predicate[*A]) Iterator[*A] {
11 | return &filtered[A]{Iterator: iterator, filter: filter}
12 | }
13 |
14 | type filtered[A any] struct {
15 | Iterator[*A]
16 | filter Predicate[*A]
17 | }
18 |
19 | func (it *filtered[A]) Next() (*A, error) {
20 | next, err := it.Iterator.Next()
21 | if err != nil {
22 | return nil, err
23 | }
24 | if next == nil {
25 | return nil, nil
26 | }
27 | if !it.filter(next) {
28 | return it.Next()
29 | }
30 | return next, nil
31 | }
32 |
--------------------------------------------------------------------------------
/platform/common/utils/collections/iterators/map.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package iterators
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
11 | )
12 |
13 | // Map lazily maps an iterator to another
14 | func Map[A any, B any](iterator Iterator[A], transformer Transformer[A, B]) Iterator[B] {
15 | return &mapped[A, B]{Iterator: iterator, transformer: transformer}
16 | }
17 |
18 | type mapped[A any, B any] struct {
19 | Iterator[A]
20 | transformer func(A) (B, error)
21 | }
22 |
23 | func (it *mapped[A, B]) Next() (B, error) {
24 | if next, err := it.Iterator.Next(); err != nil {
25 | return utils.Zero[B](), err
26 | } else {
27 | return it.transformer(next)
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/platform/common/utils/collections/iterators/predicates.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package iterators
8 |
9 | // DuplicatesBy is used for filtering duplicate elements by a comparable property
10 | func DuplicatesBy[V any, I comparable](prop func(V) I) Predicate[V] {
11 | s := map[I]struct{}{}
12 | return func(v V) bool {
13 | k := prop(v)
14 | if _, ok := s[k]; ok {
15 | return false
16 | }
17 | s[k] = struct{}{}
18 | return true
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/platform/common/utils/collections/iterators/types.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package iterators
8 |
9 | type baseIterator[k any] interface {
10 | // Next returns the next item in the result set. The `QueryResult` is expected to be nil when
11 | // the iterator gets exhausted
12 | Next() (k, error)
13 | }
14 |
15 | type Iterator[V any] interface {
16 | baseIterator[V]
17 |
18 | // Close releases resources occupied by the iterator
19 | Close()
20 | }
21 |
22 | type ConsumeFunc[V any] func(V) error
23 |
24 | type Reducer[V any, S any] interface {
25 | Produce() S
26 | Reduce(S, V) (S, error)
27 | }
28 |
29 | type ReduceFunc[V any, S any] func(S, V) (S, error)
30 |
31 | type Predicate[V any] func(V) bool
32 |
33 | type Transformer[A any, B any] func(A) (B, error)
34 |
--------------------------------------------------------------------------------
/platform/common/utils/collections/sets.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package collections
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections/sets"
10 |
11 | func NewSet[V comparable](items ...V) sets.Set[V] { return sets.New(items...) }
12 |
13 | type Set[V comparable] sets.Set[V]
14 |
--------------------------------------------------------------------------------
/platform/common/utils/collections/slices.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package collections
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections/iterators"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections/slices"
12 | )
13 |
14 | func Remove[T comparable](items []T, toRemove T) ([]T, bool) { return slices.Remove(items, toRemove) }
15 |
16 | func Difference[V comparable](a, b []V) []V { return slices.Difference(a, b) }
17 |
18 | func Intersection[V comparable](a, b []V) []V { return slices.Intersection(a, b) }
19 |
20 | func Repeat[T any](item T, times int) []T { return slices.Repeat(item, times) }
21 |
22 | func GetUnique[T any](vs iterators.Iterator[T]) (T, error) { return iterators.GetUnique(vs) }
23 |
--------------------------------------------------------------------------------
/platform/common/utils/hash_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package utils
8 |
9 | import (
10 | "testing"
11 |
12 | "github.com/stretchr/testify/assert"
13 | )
14 |
15 | func TestHashUInt64(t *testing.T) {
16 | digest, err := HashUInt64([]byte("any_string?!"))
17 | assert.NoError(t, err)
18 | assert.Equal(t, uint64(12901064304492776662), digest)
19 | }
20 |
21 | func TestHashInt64(t *testing.T) {
22 | digest, err := HashInt64([]byte("any_string?!"))
23 | assert.NoError(t, err)
24 | assert.Equal(t, int64(6450532152246388331), digest)
25 | }
26 |
27 | func TestHashUInt32(t *testing.T) {
28 | digest, err := HashUInt32([]byte("any_string?!"))
29 | assert.NoError(t, err)
30 | assert.Equal(t, uint32(3003763105), digest)
31 | }
32 |
--------------------------------------------------------------------------------
/platform/common/utils/lazy/getter.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package lazy
8 |
9 | import "sync"
10 |
11 | type Getter[V any] interface {
12 | Get() (V, error)
13 | }
14 |
15 | type lazyGetter[V any] struct {
16 | v V
17 | err error
18 | provider func() (V, error)
19 | once sync.Once
20 | }
21 |
22 | func NewGetter[V any](provider func() (V, error)) *lazyGetter[V] {
23 | return &lazyGetter[V]{provider: provider}
24 | }
25 |
26 | func (g *lazyGetter[V]) Get() (V, error) {
27 | g.once.Do(func() {
28 | g.v, g.err = g.provider()
29 | })
30 | return g.v, g.err
31 | }
32 |
--------------------------------------------------------------------------------
/platform/common/utils/lazy/iterator.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package lazy
8 |
9 | import (
10 | "io"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
13 | )
14 |
15 | func NewIterator[T any](fs ...func() (T, error)) *Iterator[T] {
16 | return &Iterator[T]{fs: fs}
17 | }
18 |
19 | type Iterator[T any] struct {
20 | fs []func() (T, error)
21 | }
22 |
23 | func (it *Iterator[T]) Next() (T, error) {
24 | if len(it.fs) == 0 {
25 | return utils.Zero[T](), io.EOF
26 | }
27 | result, err := it.fs[0]()
28 | it.fs = it.fs[1:]
29 | return result, err
30 | }
31 |
32 | func (it *Iterator[T]) Close() {
33 | it.fs = nil
34 | }
35 |
--------------------------------------------------------------------------------
/platform/common/utils/metrics_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package utils
8 |
9 | import (
10 | "testing"
11 | "time"
12 |
13 | "github.com/stretchr/testify/assert"
14 | )
15 |
16 | func TestLinearBucketRange(t *testing.T) {
17 | buckets := LinearBucketTimeRange(0, 5*time.Second, 10)
18 | assert.Equal(t, []float64{0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5}, buckets)
19 | }
20 |
21 | func TestExponentialBucketRange(t *testing.T) {
22 | buckets := ExponentialBucketTimeRange(0, 1*time.Second, 10)
23 | assert.Equal(t, []float64{0, 0.002154434, 0.004641588, 0.01, 0.021544346, 0.046415888, 0.1, 0.215443469, 0.464158883, 1}, buckets)
24 | }
25 |
--------------------------------------------------------------------------------
/platform/fabric/config.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fabric
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
10 |
11 | type ConfigService struct {
12 | confService driver.ConfigService
13 | }
14 |
15 | func (s *ConfigService) DriverName() string {
16 | return s.confService.DriverName()
17 | }
18 |
19 | func (s *ConfigService) GetString(key string) string {
20 | return s.confService.GetString(key)
21 | }
22 |
23 | func (s *ConfigService) DefaultChannel() string {
24 | return s.confService.DefaultChannel()
25 | }
26 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/committer/config.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package committer
8 |
9 | import (
10 | "context"
11 |
12 | "github.com/hyperledger/fabric-protos-go/common"
13 | "github.com/pkg/errors"
14 | )
15 |
16 | func (c *Committer) HandleConfig(ctx context.Context, block *common.BlockMetadata, tx CommitTx) (*FinalityEvent, error) {
17 | logger.Debugf("[%s] Config transaction received: %s", c.ChannelConfig.ID(), tx.TxID)
18 | if err := c.CommitConfig(ctx, tx.BlkNum, tx.Raw, tx.Envelope); err != nil {
19 | return nil, errors.Wrapf(err, "cannot commit config envelope for channel [%s]", c.ChannelConfig.ID())
20 | }
21 | return &FinalityEvent{Ctx: ctx}, nil
22 | }
23 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/config/endpoint.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package config
8 |
9 | // Resolver models a Fabric identity resolver
10 | type Resolver struct {
11 | // Name of the resolver
12 | Name string `yaml:"name,omitempty"`
13 | // Domain is option
14 | Domain string `yaml:"domain,omitempty"`
15 | // Identity specifies an MSP Identity
16 | Identity MSP `yaml:"identity,omitempty"`
17 | // Addresses where to reach this identity
18 | Addresses map[string]string `yaml:"addresses,omitempty"`
19 | // Aliases is a list of alias for this resolver
20 | Aliases []string `yaml:"aliases,omitempty"`
21 | }
22 |
23 | type Endpoint struct {
24 | Resolvers []Resolver `yaml:"resolvers,omitempty"`
25 | }
26 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/config/vault.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package config
8 |
9 | type VaultOpts struct {
10 | Path string `yaml:"path"`
11 | }
12 |
13 | type VaultPersistence struct {
14 | Type string `yaml:"type"`
15 | Opts VaultOpts `yaml:"opts"`
16 | }
17 |
18 | type Vault struct {
19 | Persistence VaultPersistence `yaml:"persistence"`
20 | }
21 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/id/info.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package id
8 |
9 | import (
10 | idemix2 "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/msp/idemix"
11 | x5092 "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/msp/x509"
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
13 | )
14 |
15 | func Info(id view.Identity, auditInfo []byte) string {
16 | d := &x5092.Deserializer{}
17 | info, err := d.Info(id, auditInfo)
18 | if err != nil {
19 | d2, err := idemix2.NewDeserializer(nil)
20 | if err != nil {
21 | return ""
22 | }
23 | info, err := d2.Info(id, auditInfo)
24 | if err != nil {
25 | return ""
26 | }
27 | return info
28 | }
29 | return info
30 | }
31 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/id/provider.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package id
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11 | "github.com/pkg/errors"
12 | )
13 |
14 | type EndpointService interface {
15 | GetIdentity(label string) (view.Identity, error)
16 | }
17 |
18 | type provider struct {
19 | endpointService EndpointService
20 | }
21 |
22 | func NewProvider(endpointService EndpointService) (*provider, error) {
23 | return &provider{endpointService: endpointService}, nil
24 | }
25 |
26 | func (p *provider) Identity(label string) (view.Identity, error) {
27 | id, err := p.endpointService.GetIdentity(label)
28 | if err != nil {
29 | return nil, errors.WithMessagef(err, "failed getting identity [%s]", label)
30 | }
31 | return id, nil
32 | }
33 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/id/testdata/idemix/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/id/testdata/idemix/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/id/testdata/idemix/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3kgkoqtGzTPHy7DT2Yqq6JJEn59dZDzp
3 | JDov1xmSKM7htDhYB0LYlpBKQiqtHHA7FOIWzQRmLecFSegJjGRMa7t+LurWn4KP
4 | +PR8jcZ6rlTusFesmLniM4Hh/0WWIdE9
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/id/testdata/idemix/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/id/testdata/idemix/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/id/testdata/x509/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgnua+u09X+gqgMIoa
3 | LB+Wx1ubmzyws2zV2wgrOLMudH+hRANCAAQfoflioOL9uq1twxj7x4ucuMdDep7u
4 | 6yqJMG2AivhfLNpXQIItnilWC8SnRCrKklJNRouiDAGAnAQBxDPiEcDl
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/metrics/metrics.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package metrics
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/metrics"
11 | )
12 |
13 | var (
14 | orderedTransactions = metrics.CounterOpts{
15 | Namespace: "ttx",
16 | Name: "ordered_transactions",
17 | Help: "The number of ordered transactions.",
18 | LabelNames: []string{"network"},
19 | StatsdFormat: "%{#fqname}.%{network}",
20 | }
21 | )
22 |
23 | type Metrics struct {
24 | OrderedTransactions metrics.Counter
25 | }
26 |
27 | func NewMetrics(p metrics.Provider) *Metrics {
28 | return &Metrics{
29 | OrderedTransactions: p.NewCounter(orderedTransactions),
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/charlie.ExtraId2/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/charlie.ExtraId2/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/charlie.ExtraId2/IssuerRevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEC8Li6cAeTbbm4EDn7WW6jadtm1SxyuZN
3 | VxO4b+lWIj1fM5q2ZQOfGhvX6tamjjqAsWcPlB9pExtqwNZYkmy/p08vEDjdcJdw
4 | /Zm+DxBgy/V0RqnOQoikUEY2HW1CiyOt
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/idemix/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/idemix/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/idemix/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETdaxDspGM1btPa2IKFz8dmed/xc997JN
3 | S7hhEtholpkp5mRL7FPKLC0GURgSZohw7QjoMSHa5SoMsVo/89odJMTdf+hppSAN
4 | RZouDbFPyHKa0VDF8vQmZR37tZyMRete
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/idemix/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/idemix/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/idemix2/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/idemix2/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/idemix2/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETdaxDspGM1btPa2IKFz8dmed/xc997JN
3 | S7hhEtholpkp5mRL7FPKLC0GURgSZohw7QjoMSHa5SoMsVo/89odJMTdf+hppSAN
4 | RZouDbFPyHKa0VDF8vQmZR37tZyMRete
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/idemix2/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/idemix2/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUvyZcTtq+2+UzsKTElqAW/fugMoZwtfY
3 | kPpIwrjJbIHfOEvuyeGKNkvQbW8tCwFIQyDSLOKffaimGUDaftqdRPbzvpLXe28d
4 | jEBxo6tQa9BNzqnybKqJJtg7ceNMVD30
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix2/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix2/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix2/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUvyZcTtq+2+UzsKTElqAW/fugMoZwtfY
3 | kPpIwrjJbIHfOEvuyeGKNkvQbW8tCwFIQyDSLOKffaimGUDaftqdRPbzvpLXe28d
4 | jEBxo6tQa9BNzqnybKqJJtg7ceNMVD30
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix2/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/idemix/testdata/sameissuer/idemix2/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/core.yaml:
--------------------------------------------------------------------------------
1 | fabric:
2 | defaultMSP: apple
3 | msps:
4 | - id: pineapple
5 | mspType: idemix-folder
6 | mspID: idemix
7 | path: ./msps
8 | - id: apple
9 | mspType: bccsp
10 | mspID: apple
11 | path: ../manager@org2.example.com/msp
12 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/idemix/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/idemix/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/idemix/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuAWsWLbhA5Gpi2VhG6csqs/gymNeEiTP
3 | XXAUw5H1kPSuAqTsZBpDbCZk1nvnZrF9HpxFCgHIhTcQWHzFslvgrl9nAjOWtnIy
4 | FCISUTaznOHSGbKEpkObyocnjl2vfexB
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/idemix/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/idemix/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id1/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id1/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id1/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuAWsWLbhA5Gpi2VhG6csqs/gymNeEiTP
3 | XXAUw5H1kPSuAqTsZBpDbCZk1nvnZrF9HpxFCgHIhTcQWHzFslvgrl9nAjOWtnIy
4 | FCISUTaznOHSGbKEpkObyocnjl2vfexB
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id1/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id1/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id2/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id2/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id2/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuAWsWLbhA5Gpi2VhG6csqs/gymNeEiTP
3 | XXAUw5H1kPSuAqTsZBpDbCZk1nvnZrF9HpxFCgHIhTcQWHzFslvgrl9nAjOWtnIy
4 | FCISUTaznOHSGbKEpkObyocnjl2vfexB
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id2/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id2/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id3/msp/IssuerPublicKey:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id3/msp/IssuerPublicKey
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id3/msp/RevocationPublicKey:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuAWsWLbhA5Gpi2VhG6csqs/gymNeEiTP
3 | XXAUw5H1kPSuAqTsZBpDbCZk1nvnZrF9HpxFCgHIhTcQWHzFslvgrl9nAjOWtnIy
4 | FCISUTaznOHSGbKEpkObyocnjl2vfexB
5 | -----END PUBLIC KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id3/user/SignerConfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/fabric/core/generic/msp/testdata/idemixtypefolder/msps/manager.id3/user/SignerConfig
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/manager@org2.example.com/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9Aj3bIQrCtutE3k7
3 | iTZzrxmGHemPeXbRwIa+DENvGhKhRANCAASvw9UuWnntYOnESSePCYacjqb/L0st
4 | lsZlpcejt2M9seBrYsEqzdFYdc0HQdSPl0AHrouE7lCodMkib8/+HhMR
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/manager@org2.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg6wxbq2v7JDebqXY0
3 | gzg3zK+X5SbRlo2xnxO6oH7P0O6hRANCAATjeGwEFxKOP2kpbVihp4L2lr1KDv1Z
4 | GBkI0DDd5schaJ5uEcPR0youtnpTfe9BKlGa9ZcNesfzAIAZ9Qpc7c65
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/x509typefolder/core.yaml:
--------------------------------------------------------------------------------
1 | fabric:
2 | defaultMSP: Admin@org1.example.com
3 | msps:
4 | - id: pineapple
5 | mspType: bccsp-folder
6 | mspID: bccsp
7 | path: ./msps
8 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/x509typefolder/msps/Admin@org1.example.com/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgjPDeInSpqDtUJlq1
3 | QFWB7eXP2pi97nE6cwCCGS/FNIahRANCAAQbwBgeZWjfp/EEHrDM+i5QR0rXfjRn
4 | lNS3B4A6E7ga09L0yxZHMsNQZLpAqaGjN89tWdDR9vmqd8zazArQRxdu
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/x509typefolder/msps/auditor@org1.example.com/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTMFXAAOTfrCV4lUu
3 | 3C1TyaazQq2c9qORCTfxX8QL9/+hRANCAASqU3volWluOQi8OWFxbTN/sCSd7RXF
4 | uz2qEIF0uAmXfRBlN5+SCQ+Mf4YzJVCWVbQ4jykux4QFUdGwb/0tsGE/
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/testdata/x509typefolder/msps/issuer.id1@org1.example.com/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgcsasN0M5goKEQdhp
3 | NrH04qN6Jxec9RbSG32dQiC6QlChRANCAAQuSSd0CrPGtwUNoaK2Ynd9SJHSCd6H
4 | 4bH8SJR3J6NA5Ooyg9QEZO9hAAgWDGWoJavBeXGEwb0yKpJQGAT0E/dH
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/x509/audit.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package x509
8 |
9 | import "encoding/json"
10 |
11 | type AuditInfo struct {
12 | EnrollmentId string
13 | RevocationHandle []byte
14 | }
15 |
16 | func (a *AuditInfo) Bytes() ([]byte, error) {
17 | return json.Marshal(a)
18 | }
19 |
20 | func (a *AuditInfo) FromBytes(raw []byte) error {
21 | return json.Unmarshal(raw, a)
22 | }
23 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/x509/cert.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package x509
8 |
9 | import (
10 | "crypto/x509"
11 | "encoding/pem"
12 |
13 | "github.com/pkg/errors"
14 | )
15 |
16 | func PemDecodeCert(pemBytes []byte) (*x509.Certificate, error) {
17 | block, _ := pem.Decode(pemBytes)
18 | if block == nil {
19 | return nil, errors.New("bytes are not PEM encoded")
20 | }
21 |
22 | switch block.Type {
23 | case "CERTIFICATE":
24 | cert, err := x509.ParseCertificate(block.Bytes)
25 | if err != nil {
26 | return nil, errors.WithMessage(err, "pem bytes are not cert encoded ")
27 | }
28 | return cert, nil
29 | default:
30 | return nil, errors.Errorf("bad type %s, expected 'CERTIFICATE", block.Type)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/msp/x509/testdata/msp/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgnua+u09X+gqgMIoa
3 | LB+Wx1ubmzyws2zV2wgrOLMudH+hRANCAAQfoflioOL9uq1twxj7x4ucuMdDep7u
4 | 6yqJMG2AivhfLNpXQIItnilWC8SnRCrKklJNRouiDAGAnAQBxDPiEcDl
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/fabric/core/generic/transaction/id.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package transaction
8 |
9 | import (
10 | "crypto/rand"
11 |
12 | "github.com/hyperledger/fabric/protoutil"
13 | "github.com/pkg/errors"
14 |
15 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
16 | )
17 |
18 | func ComputeTxID(id *driver.TxIDComponents) string {
19 | if len(id.Nonce) == 0 {
20 | n, err := GetRandomNonce()
21 | if err != nil {
22 | panic(err)
23 | }
24 | id.Nonce = n
25 | }
26 | return protoutil.ComputeTxID(id.Nonce, id.Creator)
27 | }
28 |
29 | func GetRandomNonce() ([]byte, error) {
30 | key := make([]byte, 24)
31 |
32 | _, err := rand.Read(key)
33 | if err != nil {
34 | return nil, errors.Wrap(err, "error getting random bytes")
35 | }
36 | return key, nil
37 | }
38 |
--------------------------------------------------------------------------------
/platform/fabric/driver/channel.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | // Channel gives access to Fabric channel related information
10 | type Channel interface {
11 | // Name returns the name of the channel this instance is bound to
12 | Name() string
13 |
14 | Committer() Committer
15 |
16 | Vault() Vault
17 |
18 | VaultStore() VaultStore
19 |
20 | Delivery() Delivery
21 |
22 | Ledger() Ledger
23 |
24 | Finality() Finality
25 |
26 | ChannelMembership() ChannelMembership
27 |
28 | ChaincodeManager() ChaincodeManager
29 |
30 | RWSetLoader() RWSetLoader
31 |
32 | EnvelopeService() EnvelopeService
33 |
34 | TransactionService() EndorserTransactionService
35 |
36 | MetadataService() MetadataService
37 |
38 | Close() error
39 | }
40 |
--------------------------------------------------------------------------------
/platform/fabric/driver/driver.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | // Driver models the network driver factory
10 | type Driver interface {
11 | // New returns a new network instance for the passed network and channel (if applicable)
12 | New(network string, defaultNetwork bool) (FabricNetworkService, error)
13 | }
14 |
--------------------------------------------------------------------------------
/platform/fabric/driver/finality.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "context"
11 | )
12 |
13 | type Finality interface {
14 | // IsFinal takes in input a transaction id and waits for its confirmation
15 | // with the respect to the passed context that can be used to set a deadline
16 | // for the waiting time.
17 | IsFinal(ctx context.Context, txID string) error
18 | }
19 |
--------------------------------------------------------------------------------
/platform/fabric/driver/id.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11 | )
12 |
13 | // IdentityProvider models the identity provider
14 | type IdentityProvider interface {
15 | // Identity returns the Fabric identity bound to the passed label.
16 | // If not Fabric identity is associated to the label, it returns the the SFC identity bound to that label.
17 | Identity(label string) (view.Identity, error)
18 | }
19 |
--------------------------------------------------------------------------------
/platform/fabric/driver/kvs.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "fmt"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13 | )
14 |
15 | type Key struct {
16 | Network driver.Network
17 | Channel driver.Channel
18 | TxID driver.TxID
19 | }
20 |
21 | func (k Key) UniqueKey() string {
22 | return fmt.Sprintf("%s.%s.%s", k.Network, k.Channel, k.TxID)
23 | }
24 |
25 | type MetadataStore interface {
26 | driver.MetadataStore[Key, TransientMap]
27 | }
28 |
29 | type EnvelopeStore interface {
30 | driver.EnvelopeStore[Key]
31 | }
32 |
33 | type EndorseTxStore interface {
34 | driver.EndorseTxStore[Key]
35 | }
36 |
--------------------------------------------------------------------------------
/platform/fabric/driver/ordering.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import "context"
10 |
11 | // Ordering models the ordering service
12 | type Ordering interface {
13 | // Broadcast sends the passed blob to the ordering service to be ordered
14 | Broadcast(context context.Context, blob interface{}) error
15 |
16 | // SetConsensusType sets the consensus type the ordering service should use
17 | SetConsensusType(consensusType string) error
18 | }
19 |
--------------------------------------------------------------------------------
/platform/fabric/finality.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fabric
8 |
9 | import (
10 | "context"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
13 | )
14 |
15 | type Finality struct {
16 | finality driver.Finality
17 | }
18 |
19 | func (c *Finality) IsFinal(ctx context.Context, txID string) error {
20 | return c.finality.IsFinal(ctx, txID)
21 | }
22 |
--------------------------------------------------------------------------------
/platform/fabric/identity.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fabric
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
12 | )
13 |
14 | type IdentityProvider struct {
15 | localMembership driver.LocalMembership
16 | ip driver.IdentityProvider
17 | }
18 |
19 | func (i *IdentityProvider) DefaultIdentity() view.Identity {
20 | return i.localMembership.DefaultIdentity()
21 | }
22 |
23 | func (i *IdentityProvider) Identity(label string) (view.Identity, error) {
24 | return i.ip.Identity(label)
25 | }
26 |
--------------------------------------------------------------------------------
/platform/fabric/ordering.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fabric
8 |
9 | import (
10 | "context"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
13 | )
14 |
15 | type Ordering struct {
16 | network driver.FabricNetworkService
17 | }
18 |
19 | func (n *Ordering) Broadcast(context context.Context, blob interface{}) error {
20 | switch b := blob.(type) {
21 | case *Envelope:
22 | return n.network.OrderingService().Broadcast(context, b.e)
23 | case *Transaction:
24 | return n.network.OrderingService().Broadcast(context, b.tx)
25 | default:
26 | return n.network.OrderingService().Broadcast(context, blob)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/platform/fabric/sdk/dig/fns/providers.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fns
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
12 | "go.uber.org/dig"
13 | )
14 |
15 | func NewProvider(in struct {
16 | dig.In
17 | ConfigService driver.ConfigService
18 | Drivers []core.NamedDriver `group:"fabric-platform-drivers"`
19 | }) (*core.FSNProvider, error) {
20 | return core.NewFabricNetworkServiceProvider(in.ConfigService, in.Drivers)
21 | }
22 |
--------------------------------------------------------------------------------
/platform/fabric/sdk/dig/sdk_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sdk
8 |
9 | import (
10 | "testing"
11 |
12 | sdk "github.com/hyperledger-labs/fabric-smart-client/platform/view/sdk/dig"
13 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/assert"
14 | )
15 |
16 | func TestWiring(t *testing.T) {
17 | assert.NoError(sdk.DryRunWiring(NewFrom, sdk.WithBool("fabric.enabled", true)))
18 | }
19 |
--------------------------------------------------------------------------------
/platform/fabric/services/chaincode/logger.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package chaincode
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/common/services/logging"
10 |
11 | var logger = logging.MustGetLogger()
12 |
--------------------------------------------------------------------------------
/platform/fabric/services/endorser/signer.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package endorser
8 |
9 | type SerializableSigner interface {
10 | Sign(message []byte) ([]byte, error)
11 |
12 | Serialize() ([]byte, error)
13 | }
14 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/accept.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package state
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
12 | )
13 |
14 | func NewAcceptView(tx *Transaction) view.View {
15 | return endorser.NewAcceptView(tx.tx)
16 | }
17 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/cc/query/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state/cc/query
2 |
3 | go 1.23.0
4 |
5 | toolchain go1.24.1
6 |
7 | require (
8 | github.com/hyperledger/fabric-chaincode-go v0.0.0-20240704073638-9fb89180dc17
9 | github.com/hyperledger/fabric-protos-go v0.3.3
10 | )
11 |
12 | require (
13 | github.com/golang/protobuf v1.5.4 // indirect
14 | golang.org/x/net v0.38.0 // indirect
15 | golang.org/x/sys v0.31.0 // indirect
16 | golang.org/x/text v0.23.0 // indirect
17 | google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
18 | google.golang.org/grpc v1.65.0 // indirect
19 | google.golang.org/protobuf v1.34.1 // indirect
20 | )
21 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/codec.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package state
8 |
9 | type Marshaller interface {
10 | Marshal(v interface{}) ([]byte, error)
11 | }
12 |
13 | type Unmarshaller interface {
14 | Unmarshal(data []byte, v interface{}) error
15 | }
16 |
17 | type Codec interface {
18 | Marshaller
19 | Unmarshaller
20 | }
21 |
22 | func Unmarshal(unmarshaller Unmarshaller, data []byte, v interface{}) error {
23 | return unmarshaller.Unmarshal(data, v)
24 | }
25 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/finality.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package state
8 |
9 | import (
10 | "time"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser"
13 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
14 | )
15 |
16 | // NewFinalityView returns a new instance of the finality view that waits for the finality of the passed transaction.
17 | func NewFinalityView(tx *Transaction) view.View {
18 | return endorser.NewFinalityView(tx.tx)
19 | }
20 |
21 | // NewFinalityWithTimeoutView runs the finality view for the passed transaction and timeout
22 | func NewFinalityWithTimeoutView(tx *Transaction, timeout time.Duration) view.View {
23 | return endorser.NewFinalityWithTimeoutView(tx.tx, timeout)
24 | }
25 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/json.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package state
8 |
9 | import (
10 | "encoding/json"
11 | )
12 |
13 | type JSONCodec struct{}
14 |
15 | func (J *JSONCodec) Marshal(v interface{}) ([]byte, error) {
16 | s, ok := v.(Serializable)
17 | if ok {
18 | return s.Bytes()
19 | }
20 | return json.Marshal(v)
21 | }
22 |
23 | func (J *JSONCodec) Unmarshal(data []byte, v interface{}) error {
24 | s, ok := v.(State)
25 | if ok {
26 | return s.SetFromBytes(data)
27 | }
28 | return json.Unmarshal(data, v)
29 | }
30 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/ordering.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package state
8 |
9 | import (
10 | "time"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser"
13 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
14 | )
15 |
16 | // NewOrderingAndFinalityView returns a view that does the following:
17 | // 1. Sends the passed transaction to the ordering service.
18 | // 2. Waits for the finality of the transaction.
19 | func NewOrderingAndFinalityView(tx *Transaction) view.View {
20 | return endorser.NewOrderingAndFinalityView(tx.tx)
21 | }
22 |
23 | func NewOrderingAndFinalityWithTimeoutView(tx *Transaction, timeout time.Duration) view.View {
24 | return endorser.NewOrderingAndFinalityWithTimeoutView(tx.tx, timeout)
25 | }
26 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/script/api/scripts.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package api
8 |
9 | import (
10 | "bytes"
11 | )
12 |
13 | type Scripts struct {
14 | Birth *Script
15 | Death *Script
16 | }
17 |
18 | // Script models a UTXO script
19 | type Script struct {
20 | Type string // Unique identifier of this script
21 | Raw []byte // Payload of the script. The content depends on the script's type.
22 | }
23 |
24 | func (s *Script) Equal(s2 *Script) bool {
25 | if s2 == nil {
26 | return false
27 | }
28 | return s.Type == s2.Type && bytes.Equal(s.Raw, s2.Raw)
29 | }
30 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/script/api/statevalidation.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package api
8 |
9 | type StateValidator interface {
10 | Validate(tx Transaction, index uint32) error
11 | }
12 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/script/ownable/scripts.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package ownable
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state/script/api"
11 | )
12 |
13 | const OwnableScript = "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state/ownable"
14 |
15 | func NewScripts() *api.Scripts {
16 | return &api.Scripts{
17 | Birth: &api.Script{
18 | Type: OwnableScript,
19 | Raw: nil,
20 | },
21 | Death: &api.Script{
22 | Type: OwnableScript,
23 | Raw: nil,
24 | },
25 | }
26 | }
27 |
28 | func IsScriptValid(s *api.Script) bool {
29 | return s != nil && s.Type == OwnableScript && len(s.Raw) == 0
30 | }
31 |
--------------------------------------------------------------------------------
/platform/fabric/services/state/script/ownable/state.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package ownable
8 |
9 | import (
10 | state2 "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
12 | )
13 |
14 | type State struct {
15 | state2.EmbeddingState
16 | State interface{}
17 |
18 | Owners []view.Identity
19 | }
20 |
21 | func (m *State) GetState() interface{} {
22 | return m.State
23 | }
24 |
--------------------------------------------------------------------------------
/platform/fabric/sig.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fabric
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
12 | )
13 |
14 | type SignerService struct {
15 | sigService driver.SignerService
16 | }
17 |
18 | func (s *SignerService) GetSigner(id view.Identity) (Signer, error) {
19 | return s.sigService.GetSigner(id)
20 | }
21 |
--------------------------------------------------------------------------------
/platform/orion/core/generic/config/identities.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package config
8 |
9 | // Identity models an Orion identity
10 | type Identity struct {
11 | // Name of the resolver
12 | Name string `yaml:"name,omitempty"`
13 | Cert string `yaml:"cert,omitempty"`
14 | Key string `yaml:"key,omitempty"`
15 | }
16 |
17 | type Identities struct {
18 | Identities []Identity `yaml:"identities,omitempty"`
19 | }
20 |
--------------------------------------------------------------------------------
/platform/orion/core/generic/identity.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package generic
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/orion/driver"
11 | )
12 |
13 | type IdentityManager struct {
14 | identities []*driver.Identity
15 | defaultIdentity string
16 | }
17 |
18 | func (i *IdentityManager) Me() string {
19 | return i.defaultIdentity
20 | }
21 |
22 | func (i *IdentityManager) Identity(id string) *driver.Identity {
23 | for _, identity := range i.identities {
24 | if identity.Name == id {
25 | return identity
26 | }
27 | }
28 | return nil
29 | }
30 |
--------------------------------------------------------------------------------
/platform/orion/driver/config.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import "time"
10 |
11 | type NetworkConfig interface {
12 | FinalityEventQueueWorkers() int
13 | FinalityNumRetries() int
14 | FinalitySleepTime() time.Duration
15 | PollingTimeout() time.Duration
16 | }
17 |
18 | type NetworkConfigProvider interface {
19 | GetNetworkConfig(network string) (NetworkConfig, error)
20 | }
21 |
--------------------------------------------------------------------------------
/platform/orion/driver/delivery.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import "context"
10 |
11 | // DeliveryService models the delivery service
12 | type DeliveryService interface {
13 | // StartDelivery starts the delivery
14 | StartDelivery(context.Context) error
15 | // Stop stops delivery
16 | Stop()
17 | }
18 |
--------------------------------------------------------------------------------
/platform/orion/driver/finality.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "context"
11 | )
12 |
13 | type Finality interface {
14 | // IsFinal takes in input a transaction id and waits for its confirmation.
15 | // with the respect to the passed context that can be used to set a deadline
16 | // for the waiting time.
17 | IsFinal(ctx context.Context, txID string) error
18 | }
19 |
--------------------------------------------------------------------------------
/platform/orion/driver/id.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | type Identity struct {
10 | Name string
11 | Cert string
12 | Key string
13 | }
14 |
15 | type IdentityManager interface {
16 | Me() string
17 | Identity(id string) *Identity
18 | }
19 |
--------------------------------------------------------------------------------
/platform/orion/driver/kvs.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "fmt"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13 | )
14 |
15 | type Key struct {
16 | Network driver.Network
17 | TxID driver.TxID
18 | }
19 |
20 | func (k Key) UniqueKey() string {
21 | return fmt.Sprintf("%s.%s", k.Network, k.TxID)
22 | }
23 |
24 | type MetadataStore interface {
25 | driver.MetadataStore[Key, TransientMap]
26 | }
27 |
28 | type EnvelopeStore interface {
29 | driver.EnvelopeStore[Key]
30 | }
31 |
32 | type EndorseTxStore interface {
33 | driver.EndorseTxStore[Key]
34 | }
35 |
--------------------------------------------------------------------------------
/platform/orion/driver/rwset.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
11 | )
12 |
13 | type (
14 | GetStateOpt = driver.GetStateOpt
15 | RWSet = driver.RWSet
16 | )
17 |
--------------------------------------------------------------------------------
/platform/orion/driver/vault.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "context"
11 |
12 | driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13 | )
14 |
15 | type (
16 | TxValidationStatus = driver2.TxValidationStatus[ValidationCode]
17 | BlockNum = uint64
18 | TxNum = uint64
19 | )
20 |
21 | // Vault models a key value store that can be updated by committing rwsets
22 | type Vault interface {
23 | driver2.Vault[ValidationCode]
24 | GetLastTxID(context.Context) (string, error)
25 | }
26 |
--------------------------------------------------------------------------------
/platform/orion/finality.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package orion
8 |
9 | import (
10 | "context"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/orion/driver"
13 | )
14 |
15 | type Finality struct {
16 | finality driver.Finality
17 | }
18 |
19 | func (c *Finality) IsFinal(ctx context.Context, txID string) error {
20 | if ctx == nil {
21 | ctx = context.Background()
22 | }
23 | return c.finality.IsFinal(ctx, txID)
24 | }
25 |
--------------------------------------------------------------------------------
/platform/orion/identity.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package orion
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/orion/driver"
10 |
11 | type IdentityManager struct {
12 | im driver.IdentityManager
13 | }
14 |
15 | func (im *IdentityManager) Me() string {
16 | return im.im.Me()
17 | }
18 |
--------------------------------------------------------------------------------
/platform/orion/sdk/dig/sdk_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package orion
8 |
9 | import (
10 | "testing"
11 |
12 | sdk "github.com/hyperledger-labs/fabric-smart-client/platform/view/sdk/dig"
13 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/assert"
14 | )
15 |
16 | func TestWiring(t *testing.T) {
17 | assert.NoError(sdk.DryRunWiring(NewFrom, sdk.WithBool("orion.enabled", true)))
18 | }
19 |
--------------------------------------------------------------------------------
/platform/orion/sdk/finality/handler.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package finality
8 |
9 | import (
10 | "context"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/orion"
13 | )
14 |
15 | func NewHandler(ons *orion.NetworkService) *handler {
16 | return &handler{ons: ons}
17 | }
18 |
19 | type handler struct {
20 | ons *orion.NetworkService
21 | }
22 |
23 | func (f *handler) IsFinal(ctx context.Context, network, channel, txID string) error {
24 | return f.ons.Finality().IsFinal(ctx, txID)
25 | }
26 |
--------------------------------------------------------------------------------
/platform/orion/services/otx/utils.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package otx
8 |
9 | func UsersMap(users ...string) map[string]bool {
10 | m := make(map[string]bool)
11 | for _, u := range users {
12 | m[u] = true
13 | }
14 | return m
15 | }
16 |
--------------------------------------------------------------------------------
/platform/view/core/config/testdata/core.yaml:
--------------------------------------------------------------------------------
1 |
2 | number: 5
3 | duration: 5s
4 | str: a string # with trailing spaces
5 | path:
6 | relative: file.name
7 | absolute: /absolute/path/file.name
8 | dir: /absolute/path/dir
9 | trailing: /absolute/path/dir/
10 | fsc:
11 | kvs:
12 | keyexists: true
13 | persistence:
14 | type: sql
15 | opts:
16 | driver: sqlite
17 | skipPragmas: true
18 | dataSource: ds
19 | emptyKey:
20 | nested:
21 | keys:
22 | one: 1
23 | two: 2
24 | CAPITALS: true
--------------------------------------------------------------------------------
/platform/view/core/endpoint/pki.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package endpoint
8 |
9 | import (
10 | "crypto/x509"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash"
13 | )
14 |
15 | type DefaultPublicKeyIDSynthesizer struct{}
16 |
17 | func (d DefaultPublicKeyIDSynthesizer) PublicKeyID(key any) []byte {
18 | raw, err := x509.MarshalPKIXPublicKey(key)
19 | if err != nil {
20 | return nil
21 | }
22 | return hash.Hashable(raw).Raw()
23 | }
24 |
--------------------------------------------------------------------------------
/platform/view/core/id/testdata/admin/admin.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICFjCCAb2gAwIBAgIRAJ4A4LoqJkeJDeQM2vlTRJ8wCgYIKoZIzj0EAwIwcTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGDAWBgNVBAoTD2ZzYy5leGFtcGxlLmNvbTEbMBkGA1UEAxMSY2Eu
5 | ZnNjLmV4YW1wbGUuY29tMB4XDTIxMDYwNjA4MzQwMFoXDTMxMDYwNDA4MzQwMFow
6 | WjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh
7 | biBGcmFuY2lzY28xHjAcBgNVBAMMFUFkbWluQGZzYy5leGFtcGxlLmNvbTBZMBMG
8 | ByqGSM49AgEGCCqGSM49AwEHA0IABD/gVINk8ODmvwXSve7nN/A8swB2Ly3Ip2gP
9 | HzbSsJrMtLCZHE8CuRZYY/PmPLlq5Q/9UnAPTghDqWWSGc8xhEOjTTBLMA4GA1Ud
10 | DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAICfIJ+8cpyOkxc/X
11 | QUHdA/sTD1coJO0vgPd98bmTtgHrMAoGCCqGSM49BAMCA0cAMEQCIFmcwHG9vYR+
12 | kSvV8QREgQKuBvdidBqfHyOA126T9SG6AiAr+kWgo1JtWXVwca19syhTik6TcPNe
13 | uuwJ5DilZ/Yk4w==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/core/id/testdata/default/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgWUN0Eg3JnK+V4+8K
3 | 6PHRf6bfXmk8alGiG0oGwzvWi9yhRANCAARuhwtN9PAh6M3vz3ToSqhhC3tGAf1N
4 | EW/ZNvAPsg/UUDqb7qAyaH4UEHyQPOswtfhEoafN9Pe8FTOd863iGqVD
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/core/id/testdata/default/signcerts/default.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICGjCCAcGgAwIBAgIRAOGws0ZKlk06g85HaqQMLeAwCgYIKoZIzj0EAwIwcTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGDAWBgNVBAoTD2ZzYy5leGFtcGxlLmNvbTEbMBkGA1UEAxMSY2Eu
5 | ZnNjLmV4YW1wbGUuY29tMB4XDTIxMDYwNjA4MzQwMFoXDTMxMDYwNDA4MzQwMFow
6 | XjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh
7 | biBGcmFuY2lzY28xIjAgBgNVBAMMGWluaXRpYXRvckBmc2MuZXhhbXBsZS5jb20w
8 | WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuhwtN9PAh6M3vz3ToSqhhC3tGAf1N
9 | EW/ZNvAPsg/UUDqb7qAyaH4UEHyQPOswtfhEoafN9Pe8FTOd863iGqVDo00wSzAO
10 | BgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCAnyCfvHKcj
11 | pMXP10FB3QP7Ew9XKCTtL4D3ffG5k7YB6zAKBggqhkjOPQQDAgNHADBEAiA5nOKl
12 | Wa+FCLyAn5Cu4B4bfbT+Ow5NpxEfDt9pnDcEowIgHbbRhuM7xNuQ7a30dVMXbejJ
13 | d1Q16V9Y4UcZuNngLr4=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/core/id/x509/cert.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package x509
8 |
9 | import (
10 | "crypto/x509"
11 | "encoding/pem"
12 |
13 | "github.com/pkg/errors"
14 | )
15 |
16 | func PemDecodeCert(pemBytes []byte) (*x509.Certificate, error) {
17 | block, _ := pem.Decode(pemBytes)
18 | if block == nil {
19 | return nil, errors.New("bytes are not PEM encoded")
20 | }
21 |
22 | switch block.Type {
23 | case "CERTIFICATE":
24 | cert, err := x509.ParseCertificate(block.Bytes)
25 | if err != nil {
26 | return nil, errors.WithMessage(err, "pem bytes are not cert encoded ")
27 | }
28 | return cert, nil
29 | default:
30 | return nil, errors.Errorf("bad type %s, expected 'CERTIFICATE", block.Type)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/platform/view/core/manager/metrics.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package manager
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/metrics"
10 |
11 | type Metrics struct {
12 | Contexts metrics.Gauge
13 | }
14 |
15 | func newMetrics(p metrics.Provider) *Metrics {
16 | return &Metrics{
17 | Contexts: p.NewGauge(metrics.GaugeOpts{
18 | Namespace: "host",
19 | Name: "contexts",
20 | Help: "The number of open contexts on the client side",
21 | StatsdFormat: "%{#fqname}",
22 | }),
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/platform/view/driver/comm.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "reflect"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
13 | )
14 |
15 | var (
16 | CommServiceID = reflect.TypeOf((*CommService)(nil))
17 | )
18 |
19 | type CommService interface {
20 | Addresses(id view.Identity) ([]string, error)
21 | }
22 |
23 | // GetCommService returns an instance of the communication service.
24 | // It panics, if no instance is found.
25 | func GetCommService(ctx ServiceProvider) CommService {
26 | s, err := ctx.GetService(CommServiceID)
27 | if err != nil {
28 | panic(err)
29 | }
30 | return s.(CommService)
31 | }
32 |
--------------------------------------------------------------------------------
/platform/view/driver/factory.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
10 |
11 | // Factory is used to create instances of the View interface
12 | type Factory interface {
13 | // NewView returns an instance of the View interface build using the passed argument.
14 | NewView(in []byte) (view.View, error)
15 | }
16 |
--------------------------------------------------------------------------------
/platform/view/driver/serviceprovider.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | // ServiceProvider is used to return instances of a given type
10 | type ServiceProvider interface {
11 | // GetService returns an instance of the given type
12 | GetService(v interface{}) (interface{}, error)
13 | }
14 |
--------------------------------------------------------------------------------
/platform/view/driver/session.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package driver
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11 | )
12 |
13 | //go:generate counterfeiter -o mock/session.go -fake-name Session . Session
14 |
15 | // Session encapsulates a communication channel to an endpoint
16 | type Session interface {
17 | view.Session
18 | }
19 |
--------------------------------------------------------------------------------
/platform/view/sdk/dig/sdk_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sdk
8 |
9 | import (
10 | "testing"
11 |
12 | dig2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/sdk/dig"
13 | digutils "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/dig"
14 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/assert"
15 | )
16 |
17 | func TestWiring(t *testing.T) {
18 | assert.NoError(DryRunWiring(digutils.Identity[dig2.SDK]()))
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/sdk/metadata/metadata.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package metadata
8 |
9 | // Variables defined by the Makefile and passed in with ldflags
10 | var Version = "latest"
11 | var CommitSHA = "development build"
12 |
--------------------------------------------------------------------------------
/platform/view/sdk/vfsdk/options.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package vfsdk
8 |
9 | type FactoryOption func(*factoryEntry)
10 |
11 | func WithFactoryId(fid string) FactoryOption {
12 | return func(f *factoryEntry) {
13 | f.fids = append(f.fids, fid)
14 | }
15 | }
16 | func WithInitiators(initiators ...any) FactoryOption {
17 | return func(f *factoryEntry) {
18 | f.initiators = append(f.initiators, initiators...)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/platform/view/serviceprovider.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package view
8 |
9 | // ServiceProvider is used to return instances of a given type
10 | type ServiceProvider interface {
11 | // GetService returns an instance of the given type
12 | GetService(v interface{}) (interface{}, error)
13 | }
14 |
--------------------------------------------------------------------------------
/platform/view/services/client/view/cmd/testdata/not_a_yaml.yaml:
--------------------------------------------------------------------------------
1 | dgdgd
2 | dfgdf
3 | gdf
4 | gdfg
5 | dfgdfgdfgf dfgdfgdf
--------------------------------------------------------------------------------
/platform/view/services/client/view/cmd/testdata/valid_config/config.yaml:
--------------------------------------------------------------------------------
1 | version: 0
2 | tlsconfig:
3 | certpath: ""
4 | keypath: ""
5 | peercacertpath: ""
6 | timeout: 0s
7 | signerconfig:
8 | mspid: SampleOrg
9 | identitypath: cert.pem
10 | keypath: key.pem
11 |
--------------------------------------------------------------------------------
/platform/view/services/client/view/testdata/config.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "ID": "Alice",
4 | "ChannelID": "testchannel",
5 | "MSPInfo": {
6 | "MSPConfigPath": "",
7 | "MSPID": "",
8 | "MSPType": ""
9 | },
10 | "ViewPeer": {
11 | "Address": "127.0.0.1:7051",
12 | "ConnectionTimeout": 0,
13 | "TLSEnabled": false,
14 | "TLSRootCertFile": "",
15 | "ServerNameOverride": ""
16 | }
17 | },
18 | {
19 | "ID": "Bob",
20 | "ChannelID": "testchannel",
21 | "MSPInfo": {
22 | "MSPConfigPath": "",
23 | "MSPID": "",
24 | "MSPType": ""
25 | },
26 | "ViewPeer": {
27 | "Address": "127.0.0.1:8051",
28 | "ConnectionTimeout": 0,
29 | "TLSEnabled": false,
30 | "TLSRootCertFile": "",
31 | "ServerNameOverride": ""
32 | }
33 | }
34 | ]
35 |
36 |
--------------------------------------------------------------------------------
/platform/view/services/comm/host/libp2p/testdata/dht.priv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/view/services/comm/host/libp2p/testdata/dht.priv
--------------------------------------------------------------------------------
/platform/view/services/comm/host/libp2p/testdata/dht.pub:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/view/services/comm/host/libp2p/testdata/dht.pub
--------------------------------------------------------------------------------
/platform/view/services/comm/host/libp2p/testdata/dht1.priv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/view/services/comm/host/libp2p/testdata/dht1.priv
--------------------------------------------------------------------------------
/platform/view/services/comm/host/libp2p/testdata/dht1.pub:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hyperledger-labs/fabric-smart-client/4f0c74f7564b3b569d9b3371033151358441a772/platform/view/services/comm/host/libp2p/testdata/dht1.pub
--------------------------------------------------------------------------------
/platform/view/services/comm/host/libp2p/testdata/msp/user1/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgU4WJ9w/rdOJpeXbV
3 | Ll1fti4hpNPkB1jgM5a9nBr3WSihRANCAAScymrhtkK1MEvu97adakA/LgrhgLfv
4 | E52WJtYumLakUy3W2oJBIaVud0w99jcW7OIog0b/nb54mKQefi3TwWi7
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/comm/host/libp2p/testdata/msp/user2/keystore/priv_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgzxo6HU2ySfAMwk3U
3 | 300rGLviYdBQYEvNV1S9Iwvz4myhRANCAARuLILIwNpoe5wixxj9J7carvBdWnrR
4 | q/KneJotejcDIDaBvIDxvjvyDQvzaY9mc6byt3yz9GopSVgP9GN8qQW/
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/comm/host/rest/client.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package rest
8 |
9 | import (
10 | "context"
11 | "crypto/tls"
12 |
13 | host2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/comm/host"
14 | )
15 |
16 | type clientStreamProvider interface {
17 | NewClientStream(info host2.StreamInfo, ctx context.Context, src host2.PeerID, config *tls.Config) (host2.P2PStream, error)
18 | }
19 |
20 | type client struct {
21 | tlsConfig *tls.Config
22 | nodeID host2.PeerID
23 | streamProvider clientStreamProvider
24 | }
25 |
26 | func (c *client) OpenStream(info host2.StreamInfo, ctx context.Context) (host2.P2PStream, error) {
27 | return c.streamProvider.NewClientStream(info, ctx, c.nodeID, c.tlsConfig)
28 | }
29 |
--------------------------------------------------------------------------------
/platform/view/services/comm/host/rest/websocket/common.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package websocket
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/services/logging"
11 | host2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/comm/host"
12 | )
13 |
14 | var logger = logging.MustGetLogger()
15 |
16 | // StreamMeta is the first message sent from the websocket client to transmit metadata information
17 | type StreamMeta struct {
18 | SessionID string `json:"session_id"`
19 | ContextID string `json:"context_id"`
20 | PeerID host2.PeerID `json:"peer_id"`
21 | SpanContext []byte `json:"span_context"`
22 | }
23 |
24 | var schemes = map[bool]string{
25 | true: "wss",
26 | false: "ws",
27 | }
28 |
--------------------------------------------------------------------------------
/platform/view/services/comm/ids.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package comm
8 |
9 | import "encoding/base64"
10 |
11 | func computeInternalSessionID(topic string, pkid []byte) string {
12 | return topic + "." + base64.StdEncoding.EncodeToString(pkid)
13 | }
14 |
--------------------------------------------------------------------------------
/platform/view/services/comm/io/api.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package io
8 |
9 | import (
10 | "io"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/comm/io/streamio"
13 | )
14 |
15 | /* Dream interface ideally non-blocking */
16 | // Rename Channel into Conn
17 |
18 | // We want a function blocking (timeout):
19 | // NewConn(stub shim.ChaincodeStubInterface, targetPeer string, sessionID string) (Conn, error)
20 |
21 | type Conn interface {
22 | io.Writer
23 | io.Reader
24 | Flush() error
25 | }
26 |
27 | type MsgConn interface {
28 | io.Writer
29 | streamio.MsgReader
30 | Flush() error
31 | }
32 |
--------------------------------------------------------------------------------
/platform/view/services/comm/io/logger.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package io
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/common/services/logging"
10 |
11 | var logger = logging.MustGetLogger()
12 |
--------------------------------------------------------------------------------
/platform/view/services/comm/messages.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | package comm;
4 |
5 |
6 | option go_package = "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/comm";
7 |
8 |
9 | message ViewPacket {
10 | string sessionID = 1;
11 | string contextID = 2;
12 | int32 status = 3;
13 | bytes payload = 4;
14 | string caller = 5;
15 | }
16 |
--------------------------------------------------------------------------------
/platform/view/services/comm/utils/endpoint.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package utils
8 |
9 | import (
10 | "fmt"
11 | "net"
12 | "strings"
13 |
14 | "github.com/pkg/errors"
15 | )
16 |
17 | func AddressToEndpoint(endpoint string) (string, error) {
18 | s := strings.Split(endpoint, ":")
19 | if len(s) > 2 {
20 | if host := strings.Join(s[:len(s)-1], ":"); host == "[::1]" {
21 | s = []string{"0.0.0.0", s[len(s)-1]}
22 | }
23 | }
24 | if len(s) != 2 {
25 | return "", errors.Errorf("invalid endpoint [%s], expected 2 components, got [%d]", endpoint, len(s))
26 | }
27 | var addrS string
28 | addr, err := net.LookupIP(s[0])
29 | if err != nil {
30 | addrS = s[0]
31 | } else {
32 | addrS = addr[0].String()
33 | }
34 | port := s[1]
35 |
36 | return fmt.Sprintf("/ip4/%s/tcp/%s", addrS, port), nil
37 | }
38 |
--------------------------------------------------------------------------------
/platform/view/services/crypto/provider.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package crypto
8 |
9 | import (
10 | "crypto/sha256"
11 | "hash"
12 |
13 | "github.com/pkg/errors"
14 | )
15 |
16 | type provider struct {
17 | }
18 |
19 | func NewProvider() *provider {
20 | return &provider{}
21 | }
22 |
23 | func (p *provider) Hash(msg []byte) ([]byte, error) {
24 | hash := sha256.New()
25 | n, err := hash.Write(msg)
26 | if n != len(msg) {
27 | return nil, errors.Errorf("hash failure")
28 | }
29 | if err != nil {
30 | return nil, err
31 | }
32 | digest := hash.Sum(nil)
33 |
34 | return digest, nil
35 | }
36 |
37 | func (p *provider) GetHash() hash.Hash {
38 | return sha256.New()
39 | }
40 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/common/test_utils.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package common
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kvs/mock"
10 |
11 | func MockConfig[T any](config T) *config {
12 | cp := &mock.ConfigProvider{}
13 | cp.UnmarshalKeyCalls(func(_ string, val interface{}) error {
14 | *val.(*T) = config
15 | return nil
16 | })
17 | return NewConfig(cp)
18 | }
19 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/common/utils.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package common
8 |
9 | import (
10 | "database/sql"
11 | "errors"
12 | )
13 |
14 | type RWDB struct {
15 | ReadDB *sql.DB
16 | WriteDB *sql.DB
17 | }
18 |
19 | type DBObject interface {
20 | CreateSchema() error
21 | }
22 |
23 | func CopyPtr[T any](t T) *T {
24 | v := t
25 | return &v
26 | }
27 |
28 | func Close(readDB, writeDB *sql.DB) error {
29 | if readDB == writeDB {
30 | return readDB.Close()
31 | }
32 | return errors.Join(readDB.Close(), writeDB.Close())
33 | }
34 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/multiplexed/test_utils.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package multiplexed
8 |
9 | import (
10 | "strings"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kvs/mock"
14 | )
15 |
16 | func MockTypeConfig[T any](typ driver.PersistenceType, config T) *mock.ConfigProvider {
17 | cp := &mock.ConfigProvider{}
18 | cp.UnmarshalKeyCalls(func(key string, val interface{}) error {
19 | if strings.Contains(key, "type") {
20 | *val.(*driver.PersistenceType) = typ
21 | } else if strings.Contains(key, "opts") {
22 | *val.(*T) = config
23 | }
24 | return nil
25 | })
26 | return cp
27 | }
28 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/common/conditions.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package common
8 |
9 | import (
10 | "database/sql"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13 | )
14 |
15 | type IsolationLevelMapper interface {
16 | Map(level driver.IsolationLevel) (sql.IsolationLevel, error)
17 | }
18 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/postgres/pagination.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package postgres
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/query/common"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/query/pagination"
12 | )
13 |
14 | func NewPaginationInterpreter() common.PagInterpreter {
15 | return pagination.NewDefaultInterpreter()
16 | }
17 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/query/common/field.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package common
8 |
9 | type Field Serializable
10 |
11 | func (n FieldName) WriteString(b Builder) {
12 | b.WriteString(string(n))
13 | }
14 |
15 | type field struct {
16 | table *aliasedTable
17 | name FieldName
18 | }
19 |
20 | func (f field) WriteString(b Builder) {
21 | if f.table != nil {
22 | b.WriteString(string(f.table.Alias())).WriteRune('.')
23 | }
24 | b.WriteString(string(f.name))
25 | }
26 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/query/cond/condition.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package cond
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/query/common"
11 | )
12 |
13 | type Tuple = common.Tuple
14 |
15 | type Condition = common.ConditionSerializable
16 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/query/delete/query_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package _delete_test
8 |
9 | import (
10 | "testing"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/postgres"
13 | q "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/query"
14 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/query/cond"
15 | . "github.com/onsi/gomega"
16 | )
17 |
18 | func TestDeleteSimple(t *testing.T) {
19 | RegisterTestingT(t)
20 |
21 | query, params := q.DeleteFrom("my_table").
22 | Where(cond.Eq("id", 10)).
23 | Format(postgres.NewConditionInterpreter())
24 |
25 | Expect(query).To(Equal("DELETE FROM my_table WHERE id = $1"))
26 | Expect(params).To(ConsistOf(10))
27 | }
28 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/query/select/orderby.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package _select
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/query/common"
10 |
11 | type OrderBy common.Serializable
12 |
13 | type orderBy struct {
14 | asc bool
15 | field common.Field
16 | }
17 |
18 | func (o orderBy) WriteString(sb common.Builder) {
19 | sb.WriteSerializables(o.field)
20 |
21 | if o.asc {
22 | sb.WriteString(" ASC")
23 | } else {
24 | sb.WriteString(" DESC")
25 | }
26 | }
27 |
28 | func Asc(name common.Field) orderBy {
29 | return orderBy{asc: true, field: name}
30 | }
31 |
32 | func Desc(name common.Field) orderBy {
33 | return orderBy{asc: false, field: name}
34 | }
35 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/sqlite/isolationlevels.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sqlite
8 |
9 | import (
10 | "database/sql"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13 | "github.com/pkg/errors"
14 | )
15 |
16 | var isolationLevels = isolationLevelMapper{
17 | driver.LevelDefault: sql.LevelDefault,
18 | driver.LevelSerializable: sql.LevelSerializable,
19 | }
20 |
21 | type isolationLevelMapper map[driver.IsolationLevel]sql.IsolationLevel
22 |
23 | func (m isolationLevelMapper) Map(level driver.IsolationLevel) (sql.IsolationLevel, error) {
24 | il, ok := m[level]
25 | if !ok {
26 | return 0, errors.Errorf("isolation level [%d] not defined for sqlite", il)
27 | }
28 | return il, nil
29 | }
30 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/sqlite/pagination.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sqlite
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/query/common"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/query/pagination"
12 | )
13 |
14 | func NewPaginationInterpreter() common.PagInterpreter {
15 | return pagination.NewDefaultInterpreter()
16 | }
17 |
--------------------------------------------------------------------------------
/platform/view/services/db/driver/sql/sqlite/sanitizer.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package sqlite
8 |
9 | func newSanitizer() *stringSanitizer { return &stringSanitizer{} }
10 |
11 | type stringSanitizer struct{}
12 |
13 | func (s *stringSanitizer) Encode(str string) (string, error) { return str, nil }
14 |
15 | func (s *stringSanitizer) Decode(str string) (string, error) { return str, nil }
16 |
--------------------------------------------------------------------------------
/platform/view/services/events/events.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package events
8 |
9 | //go:generate counterfeiter -o fakes/listener.go -fake-name Listener . Listener
10 | //go:generate counterfeiter -o fakes/event.go -fake-name Event . Event
11 |
12 | type Subscriber interface {
13 | Subscribe(topic string, receiver Listener)
14 | Unsubscribe(topic string, receiver Listener)
15 | }
16 |
17 | type Publisher interface {
18 | Publish(event Event)
19 | }
20 |
21 | type Listener interface {
22 | OnReceive(event Event)
23 | }
24 |
25 | type Event interface {
26 | Topic() string
27 | Message() interface{}
28 | }
29 |
30 | type EventSystem interface {
31 | Subscriber
32 | Publisher
33 | }
34 |
--------------------------------------------------------------------------------
/platform/view/services/events/service.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package events
8 |
9 | type EventService interface {
10 | GetPublisher() Publisher
11 | GetSubscriber() Subscriber
12 | }
13 |
14 | type Service struct {
15 | EventSystem EventSystem
16 | }
17 |
18 | func (s *Service) GetSubscriber() Subscriber {
19 | return s.EventSystem
20 | }
21 |
22 | func (s *Service) GetPublisher() Publisher {
23 | return s.EventSystem
24 | }
25 |
--------------------------------------------------------------------------------
/platform/view/services/events/subscribers_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package events_test
8 |
9 | import (
10 | "testing"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/events"
13 | "github.com/stretchr/testify/assert"
14 | )
15 |
16 | type A struct {
17 | Name string
18 | }
19 |
20 | type B struct {
21 | Age int
22 | }
23 |
24 | func TestSubscribers(t *testing.T) {
25 | s := events.NewSubscribers()
26 | a := &A{Name: "a"}
27 | a2 := &A{Name: "a"}
28 | b := &B{Age: 1}
29 | s.Set("0", a, b)
30 | s.Set("0", a2, b)
31 | s.Delete("0", a2)
32 | s.Set("1", b, a)
33 |
34 | b1, ok := s.Get("0", a)
35 | assert.True(t, ok)
36 | assert.Equal(t, b, b1)
37 |
38 | b1, ok = s.Get("0", b)
39 | assert.False(t, ok)
40 | assert.Nil(t, b1)
41 | }
42 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/generate_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | //go:generate protoc --proto_path=testdata/grpc --go_out=plugins=grpc,paths=source_relative:testpb testdata/grpc/test.proto
8 |
9 | package grpc_test
10 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/logging/context.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package logging
8 |
9 | import (
10 | "context"
11 |
12 | "go.uber.org/zap/zapcore"
13 | )
14 |
15 | type fieldKeyType struct{}
16 |
17 | var fieldKey = &fieldKeyType{}
18 |
19 | func WithFields(ctx context.Context, fields []zapcore.Field) context.Context {
20 | return context.WithValue(ctx, fieldKey, fields)
21 | }
22 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/.gitignore:
--------------------------------------------------------------------------------
1 | #SPDX-License-Identifier: Apache-2.0
2 |
3 | certs
4 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIB8TCCAZegAwIBAgIQUigdJy6IudO7sVOXsKVrtzAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMTENMAsGA1UEAxMET3JnMTAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMFgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ0wCwYDVQQKEwRPcmcx
7 | MQ0wCwYDVQQDEwRPcmcxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVOI+oAAB
8 | Pl+iRsCcGq81WbXap2L1r432T5gbzUNKYRvVsyFFYmdO8ql8uDi4UxSY64eaeRFT
9 | uxdcsTG7M5K2yaNDMEEwDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYGBFUdJQAw
10 | DwYDVR0TAQH/BAUwAwEB/zANBgNVHQ4EBgQEAQIDBDAKBggqhkjOPQQDAgNIADBF
11 | AiEA6U7IRGf+S7e9U2+jSI2eFiBsVEBIi35LgYoKqjELj5oCIAD7DfVMaMHzzjiQ
12 | XIlJQdS/9afDi32qZWZfe3kAUAs0
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICEDCCAbagAwIBAgIQUFdWsXAm1ui0HGC0pZKyCzAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMTENMAsGA1UEAxMET3JnMTAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMGYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtPcmcx
7 | LWNoaWxkMTEUMBIGA1UEAxMLT3JnMS1jaGlsZDEwWTATBgcqhkjOPQIBBggqhkjO
8 | PQMBBwNCAAQqi4WZz5mp1irSrcZ8VpgYR+3j9KvydJunAFjstUzy3KOwqmi6T8L8
9 | 06hBmgIbnrG3xKFHslRJHI4+utk0lQtUo1QwUjAOBgNVHQ8BAf8EBAMCAaYwDwYD
10 | VR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MA0GA1UdDgQGBAQBAgMEMA8G
11 | A1UdIwQIMAaABAECAwQwCgYIKoZIzj0EAwIDSAAwRQIgff2sx62yXS8WZHLyvgDI
12 | lDGkUfm1fwzxg6qiZ6q3oHICIQDj+6Id8GJj7VQeQrJxO6v7Z/AyQPW1sRW8OjxO
13 | VdJ1IQ==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child1-client1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICHzCCAcagAwIBAgIQMspIqOt+/arNiGqJTnRmhTAKBggqhkjOPQQDAjBmMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLT3JnMS1jaGlsZDExFDASBgNVBAMTC09yZzEtY2hp
5 | bGQxMB4XDTE4MDgyMTA4MjUzM1oXDTI4MDgxODA4MjUzM1owdjELMAkGA1UEBhMC
6 | VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28x
7 | HDAaBgNVBAoTE09yZzEtY2hpbGQxLWNsaWVudDExHDAaBgNVBAMTE09yZzEtY2hp
8 | bGQxLWNsaWVudDEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT9AveGhSGrUZEo
9 | wiZuBUv9Ry7FEGvLwUkd3wQKpDD7LIZLLaQcOOccLBT9OnzJ1VD+0XRo7JbbVgqT
10 | Zr7hmoefo0YwRDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwIw
11 | DAYDVR0TAQH/BAIwADAPBgNVHSMECDAGgAQBAgMEMAoGCCqGSM49BAMCA0cAMEQC
12 | IEYv+/eH0PtBhFvkOYZDh5SEvF2Q033CwJsKBqBhRFlTAiB7kpAISt/x4jJw6UEr
13 | RS0fb772EnAaBEDXa7uwdIkgTw==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child1-client1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIJBozVe9EJv6DB7M2AGSu+ZDu2LqAxlPPTb/5+KPsw2CoAoGCCqGSM49
3 | AwEHoUQDQgAE/QL3hoUhq1GRKMImbgVL/UcuxRBry8FJHd8ECqQw+yyGSy2kHDjn
4 | HCwU/Tp8ydVQ/tF0aOyW21YKk2a+4ZqHnw==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child1-client2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICIDCCAcagAwIBAgIQLMR83E59jMzXwRK0DD06PDAKBggqhkjOPQQDAjBmMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLT3JnMS1jaGlsZDExFDASBgNVBAMTC09yZzEtY2hp
5 | bGQxMB4XDTE4MDgyMTA4MjUzM1oXDTI4MDgxODA4MjUzM1owdjELMAkGA1UEBhMC
6 | VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28x
7 | HDAaBgNVBAoTE09yZzEtY2hpbGQxLWNsaWVudDIxHDAaBgNVBAMTE09yZzEtY2hp
8 | bGQxLWNsaWVudDIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATLs6+t/PTll+kk
9 | Kh49SROhPz5x6mgukBbDglmcYZbFrW6wpnT5cjJKJ9wFP5cPBATZp+5OdisR8O3d
10 | syMH2Jo5o0YwRDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwIw
11 | DAYDVR0TAQH/BAIwADAPBgNVHSMECDAGgAQBAgMEMAoGCCqGSM49BAMCA0gAMEUC
12 | IBz5+OtbtAJ/JBUs1MmB94YeMGcY5As6ww24fMAHVfuKAiEAoeLFHzqW18ICh/ug
13 | b0ZeQh2/OLCPy1ECwPBEhuDa+f0=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child1-client2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEILjb2qiEyJjGw288Ab8rUkez9u5mswhThQOYuHl7676voAoGCCqGSM49
3 | AwEHoUQDQgAEy7Ovrfz05ZfpJCoePUkToT8+cepoLpAWw4JZnGGWxa1usKZ0+XIy
4 | SifcBT+XDwQE2afuTnYrEfDt3bMjB9iaOQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEICE+hiFM1+dMGhAHoD7vSJve49PhakF91K/j1jDqiAxSoAoGCCqGSM49
3 | AwEHoUQDQgAEKouFmc+ZqdYq0q3GfFaYGEft4/Sr8nSbpwBY7LVM8tyjsKpouk/C
4 | /NOoQZoCG56xt8ShR7JUSRyOPrrZNJULVA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child1-server1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIO/cw3SmIcO8X7U/hY5TUaX8Ueay5kcOGI+YQglHalrNoAoGCCqGSM49
3 | AwEHoUQDQgAEesGNd7pbexjj3XhFX524m2g1JIqViiIEmtrutXJEkuMk2uBIt8pg
4 | DQA0tZrtGa2CSLFbA3bSRemKmNt9+WtMoA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child1-server2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEILcrnLMw3iSZlo0ggEQtzSIGEhR2ctJPu5IRQ1lYc50ZoAoGCCqGSM49
3 | AwEHoUQDQgAExvDBanuS7UbDId1uxGZg8gXJoM/oAmWlALlehFeIwJ8HgJtyMZT5
4 | BnpXflB/2OsPNYOcKId2pFU7F67eRX91vA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICETCCAbagAwIBAgIQZACiIvVrKZ5A3SfgpoEv6jAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMTENMAsGA1UEAxMET3JnMTAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMGYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtPcmcx
7 | LWNoaWxkMjEUMBIGA1UEAxMLT3JnMS1jaGlsZDIwWTATBgcqhkjOPQIBBggqhkjO
8 | PQMBBwNCAAQ4sMXNYbfZPxvzoV2k30z7wUnNWBUOSACOlgcjVky43keImYe04X7K
9 | qBb4N0Krz0BwIBMhqlYl9B8DFi3VhiFQo1QwUjAOBgNVHQ8BAf8EBAMCAaYwDwYD
10 | VR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MA0GA1UdDgQGBAQBAgMEMA8G
11 | A1UdIwQIMAaABAECAwQwCgYIKoZIzj0EAwIDSQAwRgIhAPcAtGGuakJ/dHcGlIX1
12 | ZFJlOLaZ02kGF9aonEY6xci/AiEAv3vCjDqLuCzpPpkgOTa9LKNpGS54Vpv6v6KR
13 | F/WRxJ4=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child2-client1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIKR2IrzSVU6ex+zRO3SvzPkx6XbxO9XmHC0yGvR6rNtRoAoGCCqGSM49
3 | AwEHoUQDQgAE8JHPuEfKQ0tUCi60d0NKjKuWq6ftGGfOcr7ySx2KWjUjdynrCt1F
4 | SQAZRRW2GPzm2rVa+NOFIY2t4m+3Uiad9g==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child2-client2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICIDCCAcegAwIBAgIRANdlnJibuaSLUZPshwIGwCAwCgYIKoZIzj0EAwIwZjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC09yZzEtY2hpbGQyMRQwEgYDVQQDEwtPcmcxLWNo
5 | aWxkMjAeFw0xODA4MjEwODI1MzNaFw0yODA4MTgwODI1MzNaMHYxCzAJBgNVBAYT
6 | AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
7 | MRwwGgYDVQQKExNPcmcxLWNoaWxkMi1jbGllbnQyMRwwGgYDVQQDExNPcmcxLWNo
8 | aWxkMi1jbGllbnQyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEiCM9QOndq5kC
9 | YEoDXPzg7X0BEkRxqdNUljyry9yMrp5jGZomNDh7gan/86px0Fywly0b9VymeUDZ
10 | MdmCpqgwnqNGMEQwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMC
11 | MAwGA1UdEwEB/wQCMAAwDwYDVR0jBAgwBoAEAQIDBDAKBggqhkjOPQQDAgNHADBE
12 | AiBsr8z6c+M2WkBzwQX8qUoLd/B26f/dCKgAoKJflODFnQIgG8/YkoxcQZdKzQ9d
13 | MRoPabMoqMKW0Zq5Nn2tVOCDO98=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child2-client2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIE7M2bia31j6vyT1/tdzsWCWXeoGBh1DGJXtDf9VlvPWoAoGCCqGSM49
3 | AwEHoUQDQgAEiCM9QOndq5kCYEoDXPzg7X0BEkRxqdNUljyry9yMrp5jGZomNDh7
4 | gan/86px0Fywly0b9VymeUDZMdmCpqgwng==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIDCQcN4pwQ70xDntA3y8JroGqoR1BySF5VM9kwIMtImvoAoGCCqGSM49
3 | AwEHoUQDQgAEOLDFzWG32T8b86FdpN9M+8FJzVgVDkgAjpYHI1ZMuN5HiJmHtOF+
4 | yqgW+DdCq89AcCATIapWJfQfAxYt1YYhUA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child2-server1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIBY3frDJGPXYOVq1aYgsarUkW5Gnwnh9EjdKUo55wAfKoAoGCCqGSM49
3 | AwEHoUQDQgAERcGTn+HM6w9i2IzOYzCuAUocgYhsNfqMKfWrVWwl2VmmbrD05dsO
4 | hbGbUm8LKoVkm0xQy7iKGYhsju74dZV/Yw==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-child2-server2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIKfddaKjLtPaEUaXqK7UNvKntDEqUKWDFj+vLp6r2AQyoAoGCCqGSM49
3 | AwEHoUQDQgAEXHmhRwQoirXEXv2ZM61I4q6qzB2liXhn2E7KmDftitMUUDALm5Kh
4 | htzw1c7sBbqpFa9M1DjXYWZxh5KdKVjAtA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-client1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICAzCCAaqgAwIBAgIQe/ZUgn+/dH6FGrx+dr/PfjAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMTENMAsGA1UEAxMET3JnMTAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRUwEwYDVQQKEwxPcmcx
7 | LWNsaWVudDExFTATBgNVBAMTDE9yZzEtY2xpZW50MTBZMBMGByqGSM49AgEGCCqG
8 | SM49AwEHA0IABHBOoWe5rrM0oucFyFSj3SLi2D0yMUMY/o3pD0XxZyRf0SSjNDY9
9 | 0wZPbKcAh8Ltbd0RMqG42mXBUJNMt9j43uSjRjBEMA4GA1UdDwEB/wQEAwIFoDAT
10 | BgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMA8GA1UdIwQIMAaABAEC
11 | AwQwCgYIKoZIzj0EAwIDRwAwRAIgaK/prRkZS6zctxwBUl2QApUrH7pMmab30Nn9
12 | ER8f3m0CICBZ9XoxKXEFFcSRpfiA2/vzoOPg76lRXcCklxzGSJYu
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-client1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEINVHep4/z6iPa151Ipp4MmCb1l/VKkY3vuMfUQf3LhQboAoGCCqGSM49
3 | AwEHoUQDQgAEcE6hZ7muszSi5wXIVKPdIuLYPTIxQxj+jekPRfFnJF/RJKM0Nj3T
4 | Bk9spwCHwu1t3REyobjaZcFQk0y32Pje5A==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-client2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICBDCCAaugAwIBAgIRALax2b24HQvULDBbsolaKN4wCgYIKoZIzj0EAwIwWDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xDTALBgNVBAoTBE9yZzExDTALBgNVBAMTBE9yZzEwHhcNMTgwODIx
5 | MDgyNTMzWhcNMjgwODE4MDgyNTMzWjBoMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
6 | Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMT3Jn
7 | MS1jbGllbnQyMRUwEwYDVQQDEwxPcmcxLWNsaWVudDIwWTATBgcqhkjOPQIBBggq
8 | hkjOPQMBBwNCAAT2AGRtxqxc2FKru2XnFkV2HKNCCNmZ3CQ9oNGivr6j7vUhjYig
9 | RfIoY7zUgUg/KnmWXd8i46YJJ88TuPIq5ir+o0YwRDAOBgNVHQ8BAf8EBAMCBaAw
10 | EwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAPBgNVHSMECDAGgAQB
11 | AgMEMAoGCCqGSM49BAMCA0cAMEQCIDvmAa/WiHi21y0mTHXM2bm9zn9VIxJsAGfl
12 | Hv/GuEpVAiAmn+PSXRK7fJrqkvnwpCPnwzSmgw/57HbTm7Um4RW1RQ==
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-client2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIHyMVchnq8AejNfFrJ21w2xpeBFUZngtIXYppETD63htoAoGCCqGSM49
3 | AwEHoUQDQgAE9gBkbcasXNhSq7tl5xZFdhyjQgjZmdwkPaDRor6+o+71IY2IoEXy
4 | KGO81IFIPyp5ll3fIuOmCSfPE7jyKuYq/g==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEINWROTDvcM6Li142MO4d71das6/qKlkPBEaVWvVj+kB2oAoGCCqGSM49
3 | AwEHoUQDQgAEVOI+oAABPl+iRsCcGq81WbXap2L1r432T5gbzUNKYRvVsyFFYmdO
4 | 8ql8uDi4UxSY64eaeRFTuxdcsTG7M5K2yQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-server1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICJzCCAc6gAwIBAgIRAOG3lHMXyOfMnnwuhmFadacwCgYIKoZIzj0EAwIwWDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xDTALBgNVBAoTBE9yZzExDTALBgNVBAMTBE9yZzEwHhcNMTgwODIx
5 | MDgyNTMzWhcNMjgwODE4MDgyNTMzWjBlMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
6 | Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMT3Jn
7 | MS1zZXJ2ZXIxMRIwEAYDVQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjO
8 | PQMBBwNCAAR3TOK0+NiNmc4ykv9SnVcVv47SAuyvU57477JxknlRPepEDZTM2hRp
9 | QMDCQ5Xhlj3hzWJZ7pwBlwgsBHLKFZYNo2wwajAOBgNVHQ8BAf8EBAMCBaAwHQYD
10 | VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwDwYDVR0j
11 | BAgwBoAEAQIDBDAaBgNVHREEEzARgglsb2NhbGhvc3SHBH8AAAEwCgYIKoZIzj0E
12 | AwIDRwAwRAIgcGXiuBaP5eam8d3qR6+R8Jc2KuzqxrmI5OvkYl0O4WoCIGhTz0TK
13 | OKsG+IMU9QXw0+4aHVvI78yHC3/L+w+lAGg8
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-server1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIAkkp8rbeZ7rFXOFai94Bhnnli2ziX4eJ2jDMX0urCAxoAoGCCqGSM49
3 | AwEHoUQDQgAEd0zitPjYjZnOMpL/Up1XFb+O0gLsr1Oe+O+ycZJ5UT3qRA2UzNoU
4 | aUDAwkOV4ZY94c1iWe6cAZcILARyyhWWDQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-server2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICJzCCAc6gAwIBAgIRAJL1pE3e/L6VkCeqQ9jo9C8wCgYIKoZIzj0EAwIwWDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xDTALBgNVBAoTBE9yZzExDTALBgNVBAMTBE9yZzEwHhcNMTgwODIx
5 | MDgyNTMzWhcNMjgwODE4MDgyNTMzWjBlMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
6 | Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMT3Jn
7 | MS1zZXJ2ZXIyMRIwEAYDVQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjO
8 | PQMBBwNCAASHis0jAl+qy3Pg9iCM4I4H7Y3shuz2Pgi2qW6r66nhKJai0MVRIw62
9 | 6PmdRk9I7kIxZ25QOsx8qWOBdrU2H13Jo2wwajAOBgNVHQ8BAf8EBAMCBaAwHQYD
10 | VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwDwYDVR0j
11 | BAgwBoAEAQIDBDAaBgNVHREEEzARgglsb2NhbGhvc3SHBH8AAAEwCgYIKoZIzj0E
12 | AwIDRwAwRAIgO26plzMeXJ32spqW5IAxpu3L707Ba3pFZc/90MmPCAYCIDWlLuV4
13 | SmXKFedEWBi81PgEfB7U1gNKHZkOPXXTFwz4
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org1-server2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIDXcyUCV8EvKQZZzIZBkXehN/7lapE8iqkvTGI7Xy+GpoAoGCCqGSM49
3 | AwEHoUQDQgAEh4rNIwJfqstz4PYgjOCOB+2N7Ibs9j4Itqluq+up4SiWotDFUSMO
4 | tuj5nUZPSO5CMWduUDrMfKljgXa1Nh9dyQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIB8TCCAZegAwIBAgIQOfRQyuuZxrmXrrwCQB9FSjAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMjENMAsGA1UEAxMET3JnMjAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMFgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ0wCwYDVQQKEwRPcmcy
7 | MQ0wCwYDVQQDEwRPcmcyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5pwa9E3o
8 | wGR7GHtxI7yaABwFFH45F/yK+HMlVyYKzpzsqN/Z9R+pypX8pLuZREO1UuKMe1me
9 | REfXBdx7ttFDNqNDMEEwDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYGBFUdJQAw
10 | DwYDVR0TAQH/BAUwAwEB/zANBgNVHQ4EBgQEAQIDBDAKBggqhkjOPQQDAgNIADBF
11 | AiBhktpBCl9SpEoQV202WZMW8IOT31Pe08RA4VshOf8sNgIhAMJ90WpOpeK0bJ0s
12 | xXStJQmPDTiNRy0KFystyPT5UG/a
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICEDCCAbagAwIBAgIQBxiM0TdZyecFxrQ41IyCEDAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMjENMAsGA1UEAxMET3JnMjAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMGYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtPcmcy
7 | LWNoaWxkMTEUMBIGA1UEAxMLT3JnMi1jaGlsZDEwWTATBgcqhkjOPQIBBggqhkjO
8 | PQMBBwNCAASXCOd/niltunwGpY1l8yipHODwDXTWxhynH+EK7kgwBxhf5QCeHecj
9 | O2FjfwnZ/buwFZ/8mmUDFH/0IHauB0Ymo1QwUjAOBgNVHQ8BAf8EBAMCAaYwDwYD
10 | VR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MA0GA1UdDgQGBAQBAgMEMA8G
11 | A1UdIwQIMAaABAECAwQwCgYIKoZIzj0EAwIDSAAwRQIgSFGsFDo5k077YQycFfv2
12 | TdGS6Py6rg8DWprbitTA+VUCIQDR1fzDvZ9/Z4n2xEv4oxLM6PyHBe3TZmDdHRFg
13 | Ku0GYg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child1-client1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIHDbB8rcNWgpnvjw3rGb1vRjpz344/RGhM16L30q22h0oAoGCCqGSM49
3 | AwEHoUQDQgAE2unUgbEwZCAX1KEod3okX+hiCbhZSUKPQsWUdflJUeUNs+QgX3cK
4 | P3cJny9Cz/QwK6W7tHnjjTduTqS1/WYOdQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child1-client2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICITCCAcegAwIBAgIRAIa5ruDcve9HnsBOiaEyYy0wCgYIKoZIzj0EAwIwZjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC09yZzItY2hpbGQxMRQwEgYDVQQDEwtPcmcyLWNo
5 | aWxkMTAeFw0xODA4MjEwODI1MzNaFw0yODA4MTgwODI1MzNaMHYxCzAJBgNVBAYT
6 | AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
7 | MRwwGgYDVQQKExNPcmcyLWNoaWxkMS1jbGllbnQyMRwwGgYDVQQDExNPcmcyLWNo
8 | aWxkMS1jbGllbnQyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuBHPafPq0OgH
9 | hw1vR6pC1enlQ6JoY/1EDxI4fbYJKGTJ9C/1tacZb7H0QZpfaZYF5CVx4+kJQLhT
10 | 0PiP8z94naNGMEQwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMC
11 | MAwGA1UdEwEB/wQCMAAwDwYDVR0jBAgwBoAEAQIDBDAKBggqhkjOPQQDAgNIADBF
12 | AiB8mWf5vTq5Lq8EtfSYki+ZCgktfMj8+UoJOIG5jc4SVgIhAJ+DWyUesUamkTNw
13 | yRoTH6mHafpatZYrvdbZOEliNzZe
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child1-client2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEINs92HUGXl6MamBY5XSOUwkO+eNvwtt/YWWk+6V1iUmzoAoGCCqGSM49
3 | AwEHoUQDQgAEuBHPafPq0OgHhw1vR6pC1enlQ6JoY/1EDxI4fbYJKGTJ9C/1tacZ
4 | b7H0QZpfaZYF5CVx4+kJQLhT0PiP8z94nQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEINsFs+zWVWrvjmSwbAJ1xry93NOCnjm8hzV4vG/xSRnmoAoGCCqGSM49
3 | AwEHoUQDQgAElwjnf54pbbp8BqWNZfMoqRzg8A101sYcpx/hCu5IMAcYX+UAnh3n
4 | IzthY38J2f27sBWf/JplAxR/9CB2rgdGJg==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child1-server1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIMYv+XGyXrooJQl5c3afeWp3oOz4wgK2vhj+5+mZQpXuoAoGCCqGSM49
3 | AwEHoUQDQgAEjA9jcgNnm3xn1LBgwtrJYlIVir/ZijyuiiBf5Q+UgVRV1/5PI1Ho
4 | DzJfOPZbIvof2Dth66xyN4iqzHdrG+qLrQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child1-server2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIAwiG2fPNeYbhbRXSVKdYuHpcFGFvGFVHMs6wWrGL4FGoAoGCCqGSM49
3 | AwEHoUQDQgAE+A9ZDKH/C0rGcb+iRWnpuqFny0EZ67Z0SifnOoeBQW5c4QYcxLqM
4 | WG8Rg3YpG8uNa5OOuZpAfowgDUrUisVP7g==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICETCCAbegAwIBAgIRALFabOuXr/rx4EO2ABzLRuEwCgYIKoZIzj0EAwIwWDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xDTALBgNVBAoTBE9yZzIxDTALBgNVBAMTBE9yZzIwHhcNMTgwODIx
5 | MDgyNTMzWhcNMjgwODE4MDgyNTMzWjBmMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
6 | Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEUMBIGA1UEChMLT3Jn
7 | Mi1jaGlsZDIxFDASBgNVBAMTC09yZzItY2hpbGQyMFkwEwYHKoZIzj0CAQYIKoZI
8 | zj0DAQcDQgAEv9uf0HFbsWIX97AyUjsyDTUcjd5G95Rf8I39Ms+TUBU1cGEZCad3
9 | DVLWJ33jAyKdFgdDFg8IUtCVaumuuKb556NUMFIwDgYDVR0PAQH/BAQDAgGmMA8G
10 | A1UdJQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zANBgNVHQ4EBgQEAQIDBDAP
11 | BgNVHSMECDAGgAQBAgMEMAoGCCqGSM49BAMCA0gAMEUCIQCw+VLD0/pIEo9YQzyD
12 | NF/b2H3Pfo+D7xetl5dwc2n5ywIgEQ3jDLFtRGQ2ZLHfoJ2+Jk+W66epGkGXQ5ew
13 | YuH0MLQ=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child2-client1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICITCCAcegAwIBAgIRAJTFkXd5UX5v7Sf3rHA8nxAwCgYIKoZIzj0EAwIwZjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC09yZzItY2hpbGQyMRQwEgYDVQQDEwtPcmcyLWNo
5 | aWxkMjAeFw0xODA4MjEwODI1MzNaFw0yODA4MTgwODI1MzNaMHYxCzAJBgNVBAYT
6 | AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
7 | MRwwGgYDVQQKExNPcmcyLWNoaWxkMi1jbGllbnQxMRwwGgYDVQQDExNPcmcyLWNo
8 | aWxkMi1jbGllbnQxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE51qXXc+pm85T
9 | xTA4b6/cOq4hYHWqHQMcVDYfSs3VUehFrUhx6vU0hXQOR4/RD+z8mfjzhl965kQT
10 | d/LvGoMm36NGMEQwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMC
11 | MAwGA1UdEwEB/wQCMAAwDwYDVR0jBAgwBoAEAQIDBDAKBggqhkjOPQQDAgNIADBF
12 | AiATkctpn82jnJEd6UZFey4H7dSSB4Wuxm7n0ImGnPH72QIhAL6WzYRFtMj9iUvF
13 | Drg+oiBuLigEMD1ha+6Tud9Do7O0
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child2-client1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIIDbVu1RHsoAOZI302qdTunHbTvHeeA/7U9TOeKvsVdXoAoGCCqGSM49
3 | AwEHoUQDQgAE51qXXc+pm85TxTA4b6/cOq4hYHWqHQMcVDYfSs3VUehFrUhx6vU0
4 | hXQOR4/RD+z8mfjzhl965kQTd/LvGoMm3w==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child2-client2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICIDCCAcagAwIBAgIQfHKzk9kORYJeYA3Y/EnITDAKBggqhkjOPQQDAjBmMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLT3JnMi1jaGlsZDIxFDASBgNVBAMTC09yZzItY2hp
5 | bGQyMB4XDTE4MDgyMTA4MjUzM1oXDTI4MDgxODA4MjUzM1owdjELMAkGA1UEBhMC
6 | VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28x
7 | HDAaBgNVBAoTE09yZzItY2hpbGQyLWNsaWVudDIxHDAaBgNVBAMTE09yZzItY2hp
8 | bGQyLWNsaWVudDIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT9qre6ojDN/U32
9 | cK0DopfIl0Epj7s1kCm5LVFBT1NVtyV3QTml+6/MJI/dcBxyP1OaGB0AyllWiskk
10 | SdpCklASo0YwRDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwIw
11 | DAYDVR0TAQH/BAIwADAPBgNVHSMECDAGgAQBAgMEMAoGCCqGSM49BAMCA0gAMEUC
12 | IAoCMaLjNCOQJQx3qyxi9IktAAHcIPQ5ZzSNF6rYsgnmAiEAnpsnYmF5lorBDiZA
13 | LoNDS7u4RLbsCqwTHPSAjehn30U=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child2-client2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIHU767dhj0UVA9wYzUarAq1kyJhnNFo8C0BCfVk1wGeZoAoGCCqGSM49
3 | AwEHoUQDQgAE/aq3uqIwzf1N9nCtA6KXyJdBKY+7NZApuS1RQU9TVbcld0E5pfuv
4 | zCSP3XAccj9TmhgdAMpZVorJJEnaQpJQEg==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIBMR8FdTgqe7DdIjk5jMoPVAYfMHOGoaG61SlUnYPa7xoAoGCCqGSM49
3 | AwEHoUQDQgAEv9uf0HFbsWIX97AyUjsyDTUcjd5G95Rf8I39Ms+TUBU1cGEZCad3
4 | DVLWJ33jAyKdFgdDFg8IUtCVaumuuKb55w==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child2-server1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIPLV9Mc8EWRPXOcR/znEP8ArJ9YidRD3iJhJU8KrlMH1oAoGCCqGSM49
3 | AwEHoUQDQgAEdl9JCEyvH/euk9lgxahR69pBhc7QOJNI8gzYA9cp5kUuv4PHsB7M
4 | XxP9JyHAOH+tKtz0M9px6R7OW2j1t0aV9A==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-child2-server2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIDkRdqR6KlHE591+uXrdwgpy2Q5js1y2ZmIwEemxxTTzoAoGCCqGSM49
3 | AwEHoUQDQgAE52UGklgTNeIxMzi2+EYPO6Nn5o6Dydk6jdMHFaXMk1PRSWKfYLyb
4 | hd76vmkr8PGGO3JYqYXdRmqQFsrdkl1dSQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-client1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICAzCCAaqgAwIBAgIQZQxlnLKo+Uzv6ZMdTFNGlTAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMjENMAsGA1UEAxMET3JnMjAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRUwEwYDVQQKEwxPcmcy
7 | LWNsaWVudDExFTATBgNVBAMTDE9yZzItY2xpZW50MTBZMBMGByqGSM49AgEGCCqG
8 | SM49AwEHA0IABOpiXhE2MPNfYd1Jj1MWlu6w7T1yirD9hqeV+ayvtLuZrsAz0jgp
9 | BHyojYvMWeHuFpEiQBlPkR+iXMCTKGmOmbSjRjBEMA4GA1UdDwEB/wQEAwIFoDAT
10 | BgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMA8GA1UdIwQIMAaABAEC
11 | AwQwCgYIKoZIzj0EAwIDRwAwRAIgZL+WlTg0OdD5LOpgNT5CI6hcNYPfzcAwqa5H
12 | 62APyqICIA0KHuBF1aJxMBqgcc4V1zfGBRbNlAWxMI/hJLS094+T
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-client1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIPdDp1kovQWJfqmgQZS9rf37rz1eqGAUA7dQNDVKGYRSoAoGCCqGSM49
3 | AwEHoUQDQgAE6mJeETYw819h3UmPUxaW7rDtPXKKsP2Gp5X5rK+0u5muwDPSOCkE
4 | fKiNi8xZ4e4WkSJAGU+RH6JcwJMoaY6ZtA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-client2-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICAzCCAaqgAwIBAgIQXZUDWc1UK4EX1dic0Iwt0jAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMjENMAsGA1UEAxMET3JnMjAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRUwEwYDVQQKEwxPcmcy
7 | LWNsaWVudDIxFTATBgNVBAMTDE9yZzItY2xpZW50MjBZMBMGByqGSM49AgEGCCqG
8 | SM49AwEHA0IABHiIm1CMTEemB7n0jKqb6n9XlWFz6AZhmzY9ddLYCaNSSGZ0NRQp
9 | mVr++V5u2lmqEnBnotxTRTw23vMwvZ5o5zqjRjBEMA4GA1UdDwEB/wQEAwIFoDAT
10 | BgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMA8GA1UdIwQIMAaABAEC
11 | AwQwCgYIKoZIzj0EAwIDRwAwRAIgRni1TBf4styDZqMMOjCxdXACigo3n1dZbvtY
12 | Pe+16E0CIH4+gv2ycrDbsA1QyV1HMpWoJdEOdpMVBnLBhzVNcWCx
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-client2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEINB0/N4Wr4sVonDsUMSN3Sd+QocL0SqBBgxofQAfaV9loAoGCCqGSM49
3 | AwEHoUQDQgAEeIibUIxMR6YHufSMqpvqf1eVYXPoBmGbNj110tgJo1JIZnQ1FCmZ
4 | Wv75Xm7aWaoScGei3FNFPDbe8zC9nmjnOg==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEICPfzizCmGyTIDe67doDZQB3SbyY34AjAvC5OXAchuwqoAoGCCqGSM49
3 | AwEHoUQDQgAE5pwa9E3owGR7GHtxI7yaABwFFH45F/yK+HMlVyYKzpzsqN/Z9R+p
4 | ypX8pLuZREO1UuKMe1meREfXBdx7ttFDNg==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-server1-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICJzCCAc6gAwIBAgIRAIzUBumAL8609YSa11CzYycwCgYIKoZIzj0EAwIwWDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xDTALBgNVBAoTBE9yZzIxDTALBgNVBAMTBE9yZzIwHhcNMTgwODIx
5 | MDgyNTMzWhcNMjgwODE4MDgyNTMzWjBlMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
6 | Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMT3Jn
7 | Mi1zZXJ2ZXIxMRIwEAYDVQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjO
8 | PQMBBwNCAAR4B/luOWu3tM0uicVLpUk5Ewpik0SquenWoU6Y4/Eja6yo8FIHIZml
9 | /2WYOAo405JxRyKTezaRRhAzJPwIQriko2wwajAOBgNVHQ8BAf8EBAMCBaAwHQYD
10 | VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwDwYDVR0j
11 | BAgwBoAEAQIDBDAaBgNVHREEEzARgglsb2NhbGhvc3SHBH8AAAEwCgYIKoZIzj0E
12 | AwIDRwAwRAIgL3bytts7cH6LdByo1afciW98Pk5IpiiqNN87aYY3rSwCIC5H9lE6
13 | 8Wsz4/j0blPdPfL3wfjR5ddHObnUaqzwMz26
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-server1-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIIDmfSa1A3Eo6CARnAsi7VN4IAQG4/VHlv/IYjGr0B+QoAoGCCqGSM49
3 | AwEHoUQDQgAEeAf5bjlrt7TNLonFS6VJORMKYpNEqrnp1qFOmOPxI2usqPBSByGZ
4 | pf9lmDgKONOScUcik3s2kUYQMyT8CEK4pA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/certs/Org2-server2-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIJ+7RmXw+7s3675BKDhzXlqXSeUibOdW5fBafpccpu/loAoGCCqGSM49
3 | AwEHoUQDQgAEI6llfo4K71mICymm2euImZEwNWnEDDLxxNogPnfDoLqSCZeZlIPZ
4 | qktz2ZsZLVEVCBbkEwMJl08Axn5vhnCLGQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/dynamic_cert_update/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIB8TCCAZegAwIBAgIQUigdJy6IudO7sVOXsKVrtzAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMTENMAsGA1UEAxMET3JnMTAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMFgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ0wCwYDVQQKEwRPcmcx
7 | MQ0wCwYDVQQDEwRPcmcxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVOI+oAAB
8 | Pl+iRsCcGq81WbXap2L1r432T5gbzUNKYRvVsyFFYmdO8ql8uDi4UxSY64eaeRFT
9 | uxdcsTG7M5K2yaNDMEEwDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYGBFUdJQAw
10 | DwYDVR0TAQH/BAUwAwEB/zANBgNVHQ4EBgQEAQIDBDAKBggqhkjOPQQDAgNIADBF
11 | AiEA6U7IRGf+S7e9U2+jSI2eFiBsVEBIi35LgYoKqjELj5oCIAD7DfVMaMHzzjiQ
12 | XIlJQdS/9afDi32qZWZfe3kAUAs0
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/dynamic_cert_update/localhost/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIByjCCAXCgAwIBAgIQQqYFM6okF534DLOXLZ17kDAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMTENMAsGA1UEAxMET3JnMTAeFw0xODA4MjQx
5 | MjI4MzdaFw0yODA4MjExMjI4MzdaMBIxEDAOBgNVBAoTB0FjbWUgQ28wWTATBgcq
6 | hkjOPQIBBggqhkjOPQMBBwNCAAR7MhenFq9pBPcrLAFuN5bzunQxDVDvFexBdFNE
7 | bLX8N+bv9KNz7pii25DFbmdXwZGmyNK9cbG8aXmuvYuTYPGMo2IwYDAOBgNVHQ8B
8 | Af8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAPBgNV
9 | HSMECDAGgAQBAgMEMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATAKBggqhkjO
10 | PQQDAgNIADBFAiEA8YTUfdgoxmYBdXOGLFFZvetRTK6WyheR0q6H2/RynLACIEvm
11 | agXnShXJ2Eulixz1VWO650ceFFbKjPAwBTg+8k3Y
12 | -----END CERTIFICATE-----
13 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/dynamic_cert_update/localhost/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIDjlxlcvpDCTvylm8qZ+P6fS3lS0cLA3Zwrak0n0AaJBoAoGCCqGSM49
3 | AwEHoUQDQgAEezIXpxavaQT3KywBbjeW87p0MQ1Q7xXsQXRTRGy1/Dfm7/Sjc+6Y
4 | otuQxW5nV8GRpsjSvXGxvGl5rr2Lk2DxjA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/dynamic_cert_update/notlocalhost/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIBxzCCAW6gAwIBAgIRAOUuxEmakkWMgxvyGt0J5MkwCgYIKoZIzj0EAwIwWDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xDTALBgNVBAoTBE9yZzExDTALBgNVBAMTBE9yZzEwHhcNMTgwODI0
5 | MTIzMDUxWhcNMjgwODIxMTIzMDUxWjASMRAwDgYDVQQKEwdBY21lIENvMFkwEwYH
6 | KoZIzj0CAQYIKoZIzj0DAQcDQgAEishT7ve8nUzkCWBgJQ7AksWNSzJOuJ5ROmjt
7 | zeIzVpNnwrNCvoxEVvAcp4y6JiNy1WoHLG2EBIbST62GAc/emqNfMF0wDgYDVR0P
8 | AQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwDwYD
9 | VR0jBAgwBoAEAQIDBDAXBgNVHREEEDAOggxub3Rsb2NhbGhvc3QwCgYIKoZIzj0E
10 | AwIDRwAwRAIgD233Tr6lLlBLgretKA5TGr/VL4ftlwtD4a5w95FyiFACID7z9CrP
11 | q5+UgSM1KXrhRY/CSntG9Q9SVkBb7PlenQHi
12 | -----END CERTIFICATE-----
13 |
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/dynamic_cert_update/notlocalhost/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIP+PmKQn03BMTJ6MgQqKTPKKsoeiycMa2GJy/HWk4/AioAoGCCqGSM49
3 | AwEHoUQDQgAEishT7ve8nUzkCWBgJQ7AksWNSzJOuJ5ROmjtzeIzVpNnwrNCvoxE
4 | VvAcp4y6JiNy1WoHLG2EBIbST62GAc/emg==
5 | -----END EC PRIVATE KEY-----
6 |
7 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/grpc/test.proto:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | syntax = "proto3";
8 |
9 | option go_package = "github.com/hyperledger-labs/fabric-smart-client/platform/common/grpc/testpb";
10 |
11 | message Empty {}
12 |
13 | message Echo {
14 | bytes payload = 1;
15 | }
16 |
17 | service TestService {
18 | rpc EmptyCall(Empty) returns (Empty);
19 | }
20 |
21 | service EmptyService {
22 | rpc EmptyCall(Empty) returns (Empty);
23 | rpc EmptyStream(stream Empty) returns (stream Empty);
24 | }
25 |
26 | service EchoService {
27 | rpc EchoCall(Echo) returns (Echo);
28 | }
29 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/impersonation/orgA/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIB8TCCAZegAwIBAgIQUigdJy6IudO7sVOXsKVrtzAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMTENMAsGA1UEAxMET3JnMTAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMFgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ0wCwYDVQQKEwRPcmcx
7 | MQ0wCwYDVQQDEwRPcmcxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVOI+oAAB
8 | Pl+iRsCcGq81WbXap2L1r432T5gbzUNKYRvVsyFFYmdO8ql8uDi4UxSY64eaeRFT
9 | uxdcsTG7M5K2yaNDMEEwDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYGBFUdJQAw
10 | DwYDVR0TAQH/BAUwAwEB/zANBgNVHQ4EBgQEAQIDBDAKBggqhkjOPQQDAgNIADBF
11 | AiEA6U7IRGf+S7e9U2+jSI2eFiBsVEBIi35LgYoKqjELj5oCIAD7DfVMaMHzzjiQ
12 | XIlJQdS/9afDi32qZWZfe3kAUAs0
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/impersonation/orgA/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICJzCCAc6gAwIBAgIRAOG3lHMXyOfMnnwuhmFadacwCgYIKoZIzj0EAwIwWDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xDTALBgNVBAoTBE9yZzExDTALBgNVBAMTBE9yZzEwHhcNMTgwODIx
5 | MDgyNTMzWhcNMjgwODE4MDgyNTMzWjBlMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
6 | Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMT3Jn
7 | MS1zZXJ2ZXIxMRIwEAYDVQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjO
8 | PQMBBwNCAAR3TOK0+NiNmc4ykv9SnVcVv47SAuyvU57477JxknlRPepEDZTM2hRp
9 | QMDCQ5Xhlj3hzWJZ7pwBlwgsBHLKFZYNo2wwajAOBgNVHQ8BAf8EBAMCBaAwHQYD
10 | VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwDwYDVR0j
11 | BAgwBoAEAQIDBDAaBgNVHREEEzARgglsb2NhbGhvc3SHBH8AAAEwCgYIKoZIzj0E
12 | AwIDRwAwRAIgcGXiuBaP5eam8d3qR6+R8Jc2KuzqxrmI5OvkYl0O4WoCIGhTz0TK
13 | OKsG+IMU9QXw0+4aHVvI78yHC3/L+w+lAGg8
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/impersonation/orgA/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIAkkp8rbeZ7rFXOFai94Bhnnli2ziX4eJ2jDMX0urCAxoAoGCCqGSM49
3 | AwEHoUQDQgAEd0zitPjYjZnOMpL/Up1XFb+O0gLsr1Oe+O+ycZJ5UT3qRA2UzNoU
4 | aUDAwkOV4ZY94c1iWe6cAZcILARyyhWWDQ==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/impersonation/orgB/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIB8TCCAZegAwIBAgIQOfRQyuuZxrmXrrwCQB9FSjAKBggqhkjOPQQDAjBYMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzENMAsGA1UEChMET3JnMjENMAsGA1UEAxMET3JnMjAeFw0xODA4MjEw
5 | ODI1MzNaFw0yODA4MTgwODI1MzNaMFgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD
6 | YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ0wCwYDVQQKEwRPcmcy
7 | MQ0wCwYDVQQDEwRPcmcyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5pwa9E3o
8 | wGR7GHtxI7yaABwFFH45F/yK+HMlVyYKzpzsqN/Z9R+pypX8pLuZREO1UuKMe1me
9 | REfXBdx7ttFDNqNDMEEwDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYGBFUdJQAw
10 | DwYDVR0TAQH/BAUwAwEB/zANBgNVHQ4EBgQEAQIDBDAKBggqhkjOPQQDAgNIADBF
11 | AiBhktpBCl9SpEoQV202WZMW8IOT31Pe08RA4VshOf8sNgIhAMJ90WpOpeK0bJ0s
12 | xXStJQmPDTiNRy0KFystyPT5UG/a
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/impersonation/orgB/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICJzCCAc6gAwIBAgIRAIzUBumAL8609YSa11CzYycwCgYIKoZIzj0EAwIwWDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xDTALBgNVBAoTBE9yZzIxDTALBgNVBAMTBE9yZzIwHhcNMTgwODIx
5 | MDgyNTMzWhcNMjgwODE4MDgyNTMzWjBlMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
6 | Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMT3Jn
7 | Mi1zZXJ2ZXIxMRIwEAYDVQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjO
8 | PQMBBwNCAAR4B/luOWu3tM0uicVLpUk5Ewpik0SquenWoU6Y4/Eja6yo8FIHIZml
9 | /2WYOAo405JxRyKTezaRRhAzJPwIQriko2wwajAOBgNVHQ8BAf8EBAMCBaAwHQYD
10 | VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwDwYDVR0j
11 | BAgwBoAEAQIDBDAaBgNVHREEEzARgglsb2NhbGhvc3SHBH8AAAEwCgYIKoZIzj0E
12 | AwIDRwAwRAIgL3bytts7cH6LdByo1afciW98Pk5IpiiqNN87aYY3rSwCIC5H9lE6
13 | 8Wsz4/j0blPdPfL3wfjR5ddHObnUaqzwMz26
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/impersonation/orgB/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PRIVATE KEY-----
2 | MHcCAQEEIIDmfSa1A3Eo6CARnAsi7VN4IAQG4/VHlv/IYjGr0B+QoAoGCCqGSM49
3 | AwEHoUQDQgAEeAf5bjlrt7TNLonFS6VJORMKYpNEqrnp1qFOmOPxI2usqPBSByGZ
4 | pf9lmDgKONOScUcik3s2kUYQMyT8CEK4pA==
5 | -----END EC PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/testdata/prime256v1-openssl-key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN EC PARAMETERS-----
2 | BggqhkjOPQMBBw==
3 | -----END EC PARAMETERS-----
4 | -----BEGIN EC PRIVATE KEY-----
5 | MHcCAQEEIM2rUTflEQ11m5g5yEm2Cer2yI+ziccl1NbSRVh3GUR0oAoGCCqGSM49
6 | AwEHoUQDQgAEu2FEZVSr30Afey6dwcypeg5P+BuYx5JSYdG0/KJIBjWKnzYo7FEm
7 | gMir7GbNh4pqA8KFrJZkPuxMgnEJBZTv+w==
8 | -----END EC PRIVATE KEY-----
9 |
--------------------------------------------------------------------------------
/platform/view/services/grpc/tlsgen/key_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package tlsgen
8 |
9 | import (
10 | "crypto/tls"
11 | "crypto/x509"
12 | "encoding/pem"
13 | "testing"
14 |
15 | "github.com/stretchr/testify/assert"
16 | )
17 |
18 | func TestLoadCert(t *testing.T) {
19 | pair, err := newCertKeyPair(false, false, "", nil, nil)
20 | assert.NoError(t, err)
21 | assert.NotNil(t, pair)
22 | tlsCertPair, err := tls.X509KeyPair(pair.Cert, pair.Key)
23 | assert.NoError(t, err)
24 | assert.NotNil(t, tlsCertPair)
25 | block, _ := pem.Decode(pair.Cert)
26 | cert, err := x509.ParseCertificate(block.Bytes)
27 | assert.NoError(t, err)
28 | assert.NotNil(t, cert)
29 | }
30 |
--------------------------------------------------------------------------------
/platform/view/services/hash/hash.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package hash
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
11 | )
12 |
13 | func SHA256(raw []byte) ([]byte, error) {
14 | return utils.SHA256(raw)
15 | }
16 |
17 | func SHA256OrPanic(raw []byte) []byte {
18 | return utils.MustGet(utils.SHA256(raw))
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/hash/hashable.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package hash
8 |
9 | import (
10 | "encoding/base64"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
13 | )
14 |
15 | type Hashable []byte
16 |
17 | func (id Hashable) Raw() []byte {
18 | if len(id) == 0 {
19 | return nil
20 | }
21 | return utils.MustGet(utils.SHA256(id))
22 | }
23 |
24 | func (id Hashable) String() string { return base64.StdEncoding.EncodeToString(id.Raw()) }
25 |
26 | func (id Hashable) RawString() string { return string(id.Raw()) }
27 |
--------------------------------------------------------------------------------
/platform/view/services/hash/hasher.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package hash
8 |
9 | import (
10 | "hash"
11 | )
12 |
13 | type Hasher interface {
14 | GetHash() hash.Hash
15 |
16 | Hash(msg []byte) ([]byte, error)
17 | }
18 |
--------------------------------------------------------------------------------
/platform/view/services/id/ecdsa/ecdsa_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package ecdsa
8 |
9 | import (
10 | "testing"
11 |
12 | "github.com/stretchr/testify/assert"
13 | )
14 |
15 | func TestNewIdentityFromPEMCertInvalid(t *testing.T) {
16 | _, _, err := NewIdentityFromPEMCert([]byte("invalid PEM"))
17 | assert.Error(t, err)
18 | assert.Contains(t, err.Error(), "cannot pem decode")
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/kms/kms.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package kms
8 |
9 | import "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kms/driver"
10 |
11 | type KMS struct {
12 | driver.Driver
13 | }
14 |
--------------------------------------------------------------------------------
/platform/view/services/metrics/disabled/disabled_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package disabled_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 | )
15 |
16 | func TestDisabled(t *testing.T) {
17 | RegisterFailHandler(Fail)
18 | RunSpecs(t, "Disabled Suite")
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/metrics/internal/namer/namer_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package namer_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 | )
15 |
16 | func TestNamer(t *testing.T) {
17 | RegisterFailHandler(Fail)
18 | RunSpecs(t, "Namer Suite")
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/metrics/operations/fakes/handler.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package fakes
8 |
9 | import "net/http"
10 |
11 | type Handler struct {
12 | Code int
13 | Text string
14 | }
15 |
16 | func (h *Handler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
17 | resp.WriteHeader(h.Code)
18 | _, _ = resp.Write([]byte(h.Text))
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/metrics/operations/logger.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package operations
8 |
9 | import (
10 | log2 "github.com/go-kit/log"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/services/logging"
12 | )
13 |
14 | type OperationsLogger interface {
15 | Logger
16 | log2.Logger
17 | }
18 |
19 | type operationsLogger struct {
20 | Logger
21 | }
22 |
23 | func (l *operationsLogger) Log(keyvals ...interface{}) error {
24 | l.Warn(keyvals...)
25 | return nil
26 | }
27 |
28 | func NewOperationsLogger(l Logger) *operationsLogger {
29 | if l == nil {
30 | l = logging.MustGetLogger()
31 | }
32 | return &operationsLogger{Logger: l}
33 | }
34 |
--------------------------------------------------------------------------------
/platform/view/services/metrics/operations/operations_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package operations_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 | )
15 |
16 | func TestOperations(t *testing.T) {
17 | RegisterFailHandler(Fail)
18 | RunSpecs(t, "Operations Suite")
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/metrics/prometheus/prometheus_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package prometheus_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 | )
15 |
16 | func TestPrometheus(t *testing.T) {
17 | RegisterFailHandler(Fail)
18 | RunSpecs(t, "Prometheus Suite")
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/metrics/statsd/goruntime/goruntime_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package goruntime_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 | )
15 |
16 | func TestRuntime(t *testing.T) {
17 | RegisterFailHandler(Fail)
18 | RunSpecs(t, "Runtime Suite")
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/metrics/statsd/statsd_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package statsd_test
8 |
9 | import (
10 | "testing"
11 |
12 | . "github.com/onsi/ginkgo/v2"
13 | . "github.com/onsi/gomega"
14 | )
15 |
16 | func TestStatsd(t *testing.T) {
17 | RegisterFailHandler(Fail)
18 | RunSpecs(t, "Statsd Suite")
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/server/view/identity.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package view
8 |
9 | //go:generate counterfeiter -o client/mock/identity.go -fake-name Identity . Identity
10 |
11 | // Identity refers to the creator of a tx;
12 | type Identity interface {
13 | Serialize() ([]byte, error)
14 | }
15 |
16 | //go:generate counterfeiter -o client/mock/signing_identity.go -fake-name SigningIdentity . SigningIdentity
17 |
18 | // SigningIdentity defines the functions necessary to sign an
19 | // array of bytes; it is needed to sign the commands
20 | type SigningIdentity interface {
21 | Identity //extends Identity
22 |
23 | Sign(msg []byte) ([]byte, error)
24 | }
25 |
--------------------------------------------------------------------------------
/platform/view/services/server/view/policy.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package view
8 |
9 | import (
10 | protos2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/server/view/protos"
11 | )
12 |
13 | type YesPolicyChecker struct {
14 | }
15 |
16 | func (y YesPolicyChecker) Check(sc *protos2.SignedCommand, c *protos2.Command) error {
17 | return nil
18 | }
19 |
--------------------------------------------------------------------------------
/platform/view/services/server/view/protos/generate.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package protos
8 |
9 | //go:generate protoc --go_out=. --go-grpc_out=. --proto_path=. commands.proto service.proto
10 | //go:generate protoc --go_out=. --proto_path=. commands.proto
11 |
--------------------------------------------------------------------------------
/platform/view/services/server/view/protos/service.proto:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | syntax = "proto3";
8 |
9 | option go_package = "./protos";
10 | option cc_generic_services = true;
11 |
12 | package protos;
13 |
14 | import "commands.proto";
15 |
16 | // ViewService provides support to view management
17 | service ViewService {
18 | // ProcessCommand processes the passed command ensuring proper access control.
19 | // The returned response allows the client to understand if the
20 | // operation was successfully executed and if not, the response
21 | // reports the reason of the failure.
22 | rpc ProcessCommand(SignedCommand) returns (SignedCommandResponse);
23 |
24 | rpc StreamCommand(stream SignedCommand) returns (stream SignedCommandResponse){};
25 | }
26 |
--------------------------------------------------------------------------------
/platform/view/services/server/web/dummy.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package web
8 |
9 | import (
10 | "net/http"
11 | )
12 |
13 | type DummyServer struct{}
14 |
15 | func NewDummyServer() *DummyServer {
16 | return &DummyServer{}
17 | }
18 |
19 | func (d *DummyServer) RegisterHandler(s string, handler http.Handler, secure bool) {
20 | }
21 |
22 | func (d *DummyServer) Start() error {
23 | return nil
24 | }
25 |
26 | func (d *DummyServer) Stop() error {
27 | return nil
28 | }
29 |
--------------------------------------------------------------------------------
/platform/view/services/server/web/middleware/middleware_suite_test.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package middleware_test
8 |
9 | import (
10 | . "github.com/onsi/ginkgo/v2"
11 | . "github.com/onsi/gomega"
12 |
13 | "testing"
14 | )
15 |
16 | func TestMiddleware(t *testing.T) {
17 | RegisterFailHandler(Fail)
18 | RunSpecs(t, "Middleware Suite")
19 | }
20 |
--------------------------------------------------------------------------------
/platform/view/services/storage/auditinfo/store.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package auditinfo
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/common"
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/multiplexed"
13 | )
14 |
15 | func NewDefaultStore(cp driver.Config, d multiplexed.Driver) (driver.AuditInfoStore, error) {
16 | return d.NewAuditInfo(common.GetPersistenceName(cp, "fsc.auditinfo.persistence"), "default")
17 | }
18 |
--------------------------------------------------------------------------------
/platform/view/services/storage/binding/store.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package binding
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/common"
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/multiplexed"
13 | )
14 |
15 | func NewDefaultStore(cp driver.Config, d multiplexed.Driver) (driver.BindingStore, error) {
16 | return d.NewBinding(common.GetPersistenceName(cp, "fsc.binding.persistence"), "default")
17 | }
18 |
--------------------------------------------------------------------------------
/platform/view/services/storage/kvs/store.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package kvs
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/common"
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/multiplexed"
13 | )
14 |
15 | func NewStore(cp driver.Config, d multiplexed.Driver, params ...string) (driver.KeyValueStore, error) {
16 | return d.NewKVS(common.GetPersistenceName(cp, "fsc.kvs.persistence"), params...)
17 | }
18 |
--------------------------------------------------------------------------------
/platform/view/services/storage/signerinfo/store.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package signerinfo
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/common"
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/multiplexed"
13 | )
14 |
15 | func NewDefaultStore(cp driver.Config, d multiplexed.Driver) (driver.SignerInfoStore, error) {
16 | return d.NewSignerInfo(common.GetPersistenceName(cp, "fsc.signerinfo.persistence"), "default")
17 | }
18 |
--------------------------------------------------------------------------------
/platform/view/services/storage/vault/store.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package vault
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
11 | "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/multiplexed"
12 | )
13 |
14 | func NewStore(name driver.PersistenceName, d multiplexed.Driver, params ...string) (driver.VaultStore, error) {
15 | return d.NewVault(name, params...)
16 | }
17 |
--------------------------------------------------------------------------------
/platform/view/services/view/stream.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package view
8 |
9 | import (
10 | "reflect"
11 |
12 | "github.com/hyperledger-labs/fabric-smart-client/platform/view"
13 | )
14 |
15 | type Stream interface {
16 | Recv(m interface{}) error
17 | Send(m interface{}) error
18 | }
19 |
20 | func GetStream(sp view.ServiceProvider) Stream {
21 | scsBoxed, err := GetStreamIfExists(sp)
22 | if err != nil {
23 | panic(err)
24 | }
25 | return scsBoxed
26 | }
27 |
28 | func GetStreamIfExists(sp view.ServiceProvider) (Stream, error) {
29 | scsBoxed, err := sp.GetService(reflect.TypeOf((*Stream)(nil)))
30 | if err != nil {
31 | return nil, err
32 | }
33 | return scsBoxed.(Stream), nil
34 | }
35 |
--------------------------------------------------------------------------------
/platform/view/view/identity.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package view
8 |
9 | import (
10 | "github.com/hyperledger-labs/fabric-smart-client/platform/common/services/identity"
11 | )
12 |
13 | // Identity wraps the byte representation of a lower level identity.
14 | type Identity = identity.Identity
15 |
--------------------------------------------------------------------------------
/platform/view/view/view.go:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright IBM Corp. All Rights Reserved.
3 |
4 | SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package view
8 |
9 | // View wraps a callable function.
10 | type View interface {
11 | // Call invokes the View on input the passed argument.
12 | // It returns a result and error in case of failure.
13 | Call(context Context) (interface{}, error)
14 | }
15 |
--------------------------------------------------------------------------------
/staticcheck.conf:
--------------------------------------------------------------------------------
1 | # SPDX-License-Identifier: Apache-2.0
2 |
3 | # onsi/gomega is used only for testing purposes (in test files and in the integration-test logic)
4 | dot_import_whitelist=["github.com/onsi/gomega"]
5 |
--------------------------------------------------------------------------------
/tools/tools.go:
--------------------------------------------------------------------------------
1 | //go:build tools
2 |
3 | /*
4 | Copyright IBM Corp. All Rights Reserved.
5 |
6 | SPDX-License-Identifier: Apache-2.0
7 | */
8 |
9 | package tools
10 |
11 | import (
12 | _ "github.com/client9/misspell/cmd/misspell"
13 | _ "github.com/fzipp/gocyclo/cmd/gocyclo"
14 | _ "github.com/google/addlicense"
15 | _ "github.com/gordonklaus/ineffassign"
16 | _ "github.com/maxbrunsfeld/counterfeiter/v6"
17 | _ "github.com/onsi/ginkgo/v2/ginkgo"
18 | _ "golang.org/x/tools/cmd/goimports"
19 | _ "google.golang.org/protobuf/cmd/protoc-gen-go"
20 | _ "honnef.co/go/tools/cmd/staticcheck"
21 | )
22 |
--------------------------------------------------------------------------------