├── .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 | Creative Commons License
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 | --------------------------------------------------------------------------------