Git Product home page Git Product logo

cloud-blockchain-fabric-gateway-example's Introduction

Important Notice

This public repository is read-only and no longer maintained. For the latest sample code repositories, visit the SAP Samples organization.

REUSE status

Cloud Blockchain Fabric Gateway Example

Description

The Hyperledger Fabric gateway example application for SAP Cloud Platform provides a convenient REST-API to interact with Hyperledger Fabric chaincode. Therefore, it uses the Hyperledger Fabric client component of the SAP Cloud SDK.

Alternatives

Instead of using a REST-gateway we highly recommend using the official Hyperledger Fabric SDKs directly to invoke or query chaincode. This avoids the need of a runtime component and thus increases performance and failure safety. See Hyperledger Fabric Gateway SDK for Java and Hyperledger Fabric Gateway SDK for Node.js. To easily instantiate those SDKs via a user-provided service on Cloud Foundry use the Hyperledger Fabric client component in the SAP Cloud SDK. This SAP Cloud SDK component and the official Hyperledger Fabric Gateway SDK for Java are also used in this example application to reduce the code to a minimum.

Requirements

In order to use this example application, a Hyperledger Fabric network or service instance is required. Additionally, the application should be run in a Cloud Foundry environment on SAP Cloud Platform, or the Cloud Foundry environment variable VCAP_SERVICES must be set manually.

Download and Installation

This example application is intended to be used on a per-channel basis, not per chaincode. In order for the application to successfully connect to the Hyperledger Fabric network and the specific channel, it requires certain credentials. These credentials consist of a username (can be freely chosen), the user's organization (mspid) and the public and private key of the user. For most purposes this should be a technical user that has the permissions to execute chaincode on the channel (read and write). Moreover, the credentials contain a common connection profile that provides all necessary information for the application to connect to the Hyperledger Fabric network. The connection profile, the user certificate and the private key are Base64 encoded so they can be stored in a JSON object. Last but not least, it also includes the name of the channel that has the instantiated chaincodes.

# Edit and insert your own credentials!
{
    "type": "hyperledger-fabric",
    "mspid": "Org1MSP",
    "username": "admin",
    "channelname": "mychannel",
    "connectionprofile": "LS0tCm5hbWU6IGZhYnJpYy1uZXR3b3JrLW9yZzEKdmVyc2lvbjogMS4wLjAKY2xpZW50OgogIG9yZ2FuaXphdGlvbjogT3JnMQpvcmdhbml6YXRpb25zOgogIE9yZzE6CiAgICBtc3BpZDogT3JnMU1TUAogICAgY3J5cHRvUGF0aDogLgogICAgcGVlcnM6CiAgICAtIHBlZXIwLm9yZzEuZXhhbXBsZS5jb206NzA1MQogICAgLSBwZWVyMS5vcmcxLmV4YW1wbGUuY29tOjgwNTEKY2hhbm5lbHM6CiAgbXljaGFubmVsOgogICAgb3JkZXJlcnM6CiAgICAgICAgLSBvcmRlcmVyLmV4YW1wbGUuY29tCiAgICBwZWVyczoKICAgICAgcGVlcjAub3JnMS5leGFtcGxlLmNvbTo3MDUxOgogICAgICAgIGVuZG9yc2luZ1BlZXI6IHRydWUKICAgICAgICBjaGFpbmNvZGVRdWVyeTogdHJ1ZQogICAgICAgIGxlZGdlclF1ZXJ5OiB0cnVlCiAgICAgICAgZXZlbnRTb3VyY2U6IHRydWUKICAgICAgICBkaXNjb3ZlcjogZmFsc2UKICAgICAgcGVlcjEub3JnMS5leGFtcGxlLmNvbTo4MDUxOgogICAgICAgIGVuZG9yc2luZ1BlZXI6IHRydWUKICAgICAgICBjaGFpbmNvZGVRdWVyeTogdHJ1ZQogICAgICAgIGxlZGdlclF1ZXJ5OiB0cnVlCiAgICAgICAgZXZlbnRTb3VyY2U6IHRydWUKICAgICAgICBkaXNjb3ZlcjogZmFsc2UKcGVlcnM6CiAgcGVlcjAub3JnMS5leGFtcGxlLmNvbTo3MDUxOgogICAgdXJsOiBncnBjczovL2xvY2FsaG9zdDo3MDUxCiAgICB0bHNDQUNlcnRzOgogICAgICBwZW06IHwKICAgICAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgICAgICBNSUlDVnpDQ0FmNmdBd0lCQWdJUkFLa3FWb0Q4UXhOWk5TcXBLSWw2VGM0d0NnWUlLb1pJemowRUF3SXdkakVMCiAgICAgICAgTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwogICAgICAgIGNtRnVZMmx6WTI4eEdUQVhCZ05WQkFvVEVHOXlaekV1WlhoaGJYQnNaUzVqYjIweEh6QWRCZ05WQkFNVEZuUnMKICAgICAgICBjMk5oTG05eVp6RXVaWGhoYlhCc1pTNWpiMjB3SGhjTk1qQXdOREF5TURneU1qQXdXaGNOTXpBd016TXhNRGd5CiAgICAgICAgTWpBd1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQogICAgICAgIEJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFZk1CMEcKICAgICAgICBBMVVFQXhNV2RHeHpZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5CiAgICAgICAgQXdFSEEwSUFCRXc2SDM4V2ZvY3FXN0xCalFKdjA0TCtVS2owdjRhbGdDV2RLNmsvYXRJQjhTNmJ5UE5GS2NIawogICAgICAgIC9rMWFXY1dhVTRmTkhTanYwSVI5d2k4YnpoekVEd2VqYlRCck1BNEdBMVVkRHdFQi93UUVBd0lCcGpBZEJnTlYKICAgICAgICBIU1VFRmpBVUJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3RXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WCiAgICAgICAgSFE0RUlnUWdXTm9mM2lWYmlMTEJRazRjbW1FdWRIUFhhbExXeFhvZUZZNU12K1JmVGxzd0NnWUlLb1pJemowRQogICAgICAgIEF3SURSd0F3UkFJZ1ZSeXVnTFNUQjlGZ0xZRlJ4TnlDMlh6a2IvV0wybUJNU3RJZDNsN3lJNndDSUQwR0xyQmoKICAgICAgICBhSkU4anF3cmJtNnpmQWRyZk14Uk5Rc0hXVVh6bExocm5KU24KICAgICAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgCiAgICBncnBjT3B0aW9uczoKICAgICAgc3NsLXRhcmdldC1uYW1lLW92ZXJyaWRlOiBwZWVyMC5vcmcxLmV4YW1wbGUuY29tCiAgICAgIGhvc3RuYW1lT3ZlcnJpZGU6IHBlZXIwLm9yZzEuZXhhbXBsZS5jb20KICBwZWVyMS5vcmcxLmV4YW1wbGUuY29tOjgwNTE6CiAgICB1cmw6IGdycGNzOi8vbG9jYWxob3N0OjgwNTEKICAgIHRsc0NBQ2VydHM6CiAgICAgIHBlbTogfAogICAgICAgIC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQogICAgICAgIE1JSUNWekNDQWY2Z0F3SUJBZ0lSQUtrcVZvRDhReE5aTlNxcEtJbDZUYzR3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKICAgICAgICBNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHCiAgICAgICAgY21GdVkybHpZMjh4R1RBWEJnTlZCQW9URUc5eVp6RXVaWGhoYlhCc1pTNWpiMjB4SHpBZEJnTlZCQU1URm5ScwogICAgICAgIGMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTWpBd05EQXlNRGd5TWpBd1doY05NekF3TXpNeE1EZ3kKICAgICAgICBNakF3V2pCMk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFCiAgICAgICAgQnhNTlUyRnVJRVp5WVc1amFYTmpiekVaTUJjR0ExVUVDaE1RYjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEVmTUIwRwogICAgICAgIEExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKICAgICAgICBBd0VIQTBJQUJFdzZIMzhXZm9jcVc3TEJqUUp2MDRMK1VLajB2NGFsZ0NXZEs2ay9hdElCOFM2YnlQTkZLY0hrCiAgICAgICAgL2sxYVdjV2FVNGZOSFNqdjBJUjl3aThiemh6RUR3ZWpiVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVgogICAgICAgIEhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdFd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBcEJnTlYKICAgICAgICBIUTRFSWdRZ1dOb2YzaVZiaUxMQlFrNGNtbUV1ZEhQWGFsTFd4WG9lRlk1TXYrUmZUbHN3Q2dZSUtvWkl6ajBFCiAgICAgICAgQXdJRFJ3QXdSQUlnVlJ5dWdMU1RCOUZnTFlGUnhOeUMyWHprYi9XTDJtQk1TdElkM2w3eUk2d0NJRDBHTHJCagogICAgICAgIGFKRThqcXdyYm02emZBZHJmTXhSTlFzSFdVWHpsTGhybkpTbgogICAgICAgIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KICAgICAgICAKICAgIGdycGNPcHRpb25zOgogICAgICBzc2wtdGFyZ2V0LW5hbWUtb3ZlcnJpZGU6IHBlZXIxLm9yZzEuZXhhbXBsZS5jb20KICAgICAgaG9zdG5hbWVPdmVycmlkZTogcGVlcjEub3JnMS5leGFtcGxlLmNvbQpvcmRlcmVyczoKICBvcmRlcmVyLmV4YW1wbGUuY29tOgogICAgdXJsOiBncnBjczovL2xvY2FsaG9zdDo3MDUwCiAgICB0bHNDQUNlcnRzOgogICAgICBwZW06IHwKICAgICAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgICAgICBNSUlDUWpDQ0FlbWdBd0lCQWdJUWFHS1k5djkrdXZKZmszYXg5eG1jK3pBS0JnZ3Foa2pPUFFRREFqQnNNUXN3CiAgICAgICAgQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQogICAgICAgIFlXNWphWE5qYnpFVU1CSUdBMVVFQ2hNTFpYaGhiWEJzWlM1amIyMHhHakFZQmdOVkJBTVRFWFJzYzJOaExtVjQKICAgICAgICBZVzF3YkdVdVkyOXRNQjRYRFRJd01EUXdNakE0TWpJd01Gb1hEVE13TURNek1UQTRNakl3TUZvd2JERUxNQWtHCiAgICAgICAgQTFVRUJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdQogICAgICAgIFkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1Sb3dHQVlEVlFRREV4RjBiSE5qWVM1bGVHRnQKICAgICAgICBjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJOaEJyWW9DdEN3aDhPakZrMnFICiAgICAgICAgQUxQVjNhVjZWVGJDZWxjV1RqYVpnTkZMdkpab05xc3VxTlFXd0FFdzdIZVZJVnAwODdpcDk0Q3RQcmtYbG5oaAogICAgICAgIHZ3cWpiVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUIKICAgICAgICBCUVVIQXdFd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBcEJnTlZIUTRFSWdRZ3BjYkJ1WUpwOGtyb0lyeC96NURzCiAgICAgICAgQnljNDVRYi9ML2M3bmpSdEVGcktzZGN3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnS1pZVUpmMTRXdkhHSUhWbgogICAgICAgIGVzaU5xT0s4bXRlRjJVdUJKZEU1YVJsazVGb0NJQk1tQ2xXUWtpR21pUmxWTkFuV1U2NGZvS1dUT3ovZ2pJV2YKICAgICAgICB6aGdqd3gxawogICAgICAgIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KICAgICAgICAKICAgIGdycGNPcHRpb25zOgogICAgICBzc2wtdGFyZ2V0LW5hbWUtb3ZlcnJpZGU6IG9yZGVyZXIuZXhhbXBsZS5jb20KICAgICAgaG9zdG5hbWVPdmVycmlkZTogb3JkZXJlci5leGFtcGxlLmNvbQo=",
    "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLVENDQWMrZ0F3SUJBZ0lRYmc0RnRmQmhLSGZkVklNWWVLRGx5REFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNREEwTURJd09ESXlNREJhRncwek1EQXpNekV3T0RJeU1EQmEKTUdzeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE0d0RBWURWUVFMRXdWaFpHMXBiakVmTUIwR0ExVUVBd3dXUVdSdGFXNUFiM0puCk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCSklXbkNhUStTR3IKQ2dHNENyTE1qekZveW5zSy9JNDVtaWZPVk5EcjNpM1k2WDN0OUlCYTVMNWtNTlNRczYxUGg4dHJjL2twOExFcgpZVVJTejB1S0wyeWpUVEJMTUE0R0ExVWREd0VCL3dRRUF3SUhnREFNQmdOVkhSTUJBZjhFQWpBQU1Dc0dBMVVkCkl3UWtNQ0tBSUZnQS95cEpjaG8rWUUrZmhiWjJMQ3VWcWNrTTBjc1Z0dEZyTlRweHlyTkVNQW9HQ0NxR1NNNDkKQkFNQ0EwZ0FNRVVDSVFDeVBjbXNnS0RaZVU0d3pGK1dxbWF1eHFVek8wM2JzNWxjckVoWFd4OThTZ0lnU2pHNgplSmU1RGVLc0xPR0ttbGYrNTVVc1M1V2FVcnRlblBFeVVGSE9lUTA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
    "privatekey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1FrZXpsaVhjb0lNa0htOVgKcStFcWhZcG1FTzdsQXpDZE1xc0NUL0J4NW1TaFJBTkNBQVNTRnB3bWtQa2hxd29CdUFxeXpJOHhhTXA3Q3Z5TwpPWm9uemxUUTY5NHQyT2w5N2ZTQVd1UytaRERVa0xPdFQ0ZkxhM1A1S2ZDeEsyRkVVczlMaWk5cwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg=="
}

The above credentials must be provided via a Cloud Foundry user-provided service. To deploy this user-provided service to your Cloud Foundry space log in to Cloud Foundry via the Cloud Foundry CLI:

cf login

After selecting your organization and space run:

# Edit and insert your own credentials!
cf cups gateway-example-credentials -p '{
    "type": "hyperledger-fabric",
    "mspid": "Org1MSP",
    "username": "admin",
    "channelname": "mychannel",
    "connectionprofile": "LS0tCm5hbWU6IGZhYnJpYy1uZXR3b3JrLW9yZzEKdmVyc2lvbjogMS4wLjAKY2xpZW50OgogIG9yZ2FuaXphdGlvbjogT3JnMQpvcmdhbml6YXRpb25zOgogIE9yZzE6CiAgICBtc3BpZDogT3JnMU1TUAogICAgY3J5cHRvUGF0aDogLgogICAgcGVlcnM6CiAgICAtIHBlZXIwLm9yZzEuZXhhbXBsZS5jb206NzA1MQogICAgLSBwZWVyMS5vcmcxLmV4YW1wbGUuY29tOjgwNTEKY2hhbm5lbHM6CiAgbXljaGFubmVsOgogICAgb3JkZXJlcnM6CiAgICAgICAgLSBvcmRlcmVyLmV4YW1wbGUuY29tCiAgICBwZWVyczoKICAgICAgcGVlcjAub3JnMS5leGFtcGxlLmNvbTo3MDUxOgogICAgICAgIGVuZG9yc2luZ1BlZXI6IHRydWUKICAgICAgICBjaGFpbmNvZGVRdWVyeTogdHJ1ZQogICAgICAgIGxlZGdlclF1ZXJ5OiB0cnVlCiAgICAgICAgZXZlbnRTb3VyY2U6IHRydWUKICAgICAgICBkaXNjb3ZlcjogZmFsc2UKICAgICAgcGVlcjEub3JnMS5leGFtcGxlLmNvbTo4MDUxOgogICAgICAgIGVuZG9yc2luZ1BlZXI6IHRydWUKICAgICAgICBjaGFpbmNvZGVRdWVyeTogdHJ1ZQogICAgICAgIGxlZGdlclF1ZXJ5OiB0cnVlCiAgICAgICAgZXZlbnRTb3VyY2U6IHRydWUKICAgICAgICBkaXNjb3ZlcjogZmFsc2UKcGVlcnM6CiAgcGVlcjAub3JnMS5leGFtcGxlLmNvbTo3MDUxOgogICAgdXJsOiBncnBjczovL2xvY2FsaG9zdDo3MDUxCiAgICB0bHNDQUNlcnRzOgogICAgICBwZW06IHwKICAgICAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgICAgICBNSUlDVnpDQ0FmNmdBd0lCQWdJUkFLa3FWb0Q4UXhOWk5TcXBLSWw2VGM0d0NnWUlLb1pJemowRUF3SXdkakVMCiAgICAgICAgTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwogICAgICAgIGNtRnVZMmx6WTI4eEdUQVhCZ05WQkFvVEVHOXlaekV1WlhoaGJYQnNaUzVqYjIweEh6QWRCZ05WQkFNVEZuUnMKICAgICAgICBjMk5oTG05eVp6RXVaWGhoYlhCc1pTNWpiMjB3SGhjTk1qQXdOREF5TURneU1qQXdXaGNOTXpBd016TXhNRGd5CiAgICAgICAgTWpBd1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQogICAgICAgIEJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFZk1CMEcKICAgICAgICBBMVVFQXhNV2RHeHpZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5CiAgICAgICAgQXdFSEEwSUFCRXc2SDM4V2ZvY3FXN0xCalFKdjA0TCtVS2owdjRhbGdDV2RLNmsvYXRJQjhTNmJ5UE5GS2NIawogICAgICAgIC9rMWFXY1dhVTRmTkhTanYwSVI5d2k4YnpoekVEd2VqYlRCck1BNEdBMVVkRHdFQi93UUVBd0lCcGpBZEJnTlYKICAgICAgICBIU1VFRmpBVUJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3RXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WCiAgICAgICAgSFE0RUlnUWdXTm9mM2lWYmlMTEJRazRjbW1FdWRIUFhhbExXeFhvZUZZNU12K1JmVGxzd0NnWUlLb1pJemowRQogICAgICAgIEF3SURSd0F3UkFJZ1ZSeXVnTFNUQjlGZ0xZRlJ4TnlDMlh6a2IvV0wybUJNU3RJZDNsN3lJNndDSUQwR0xyQmoKICAgICAgICBhSkU4anF3cmJtNnpmQWRyZk14Uk5Rc0hXVVh6bExocm5KU24KICAgICAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgCiAgICBncnBjT3B0aW9uczoKICAgICAgc3NsLXRhcmdldC1uYW1lLW92ZXJyaWRlOiBwZWVyMC5vcmcxLmV4YW1wbGUuY29tCiAgICAgIGhvc3RuYW1lT3ZlcnJpZGU6IHBlZXIwLm9yZzEuZXhhbXBsZS5jb20KICBwZWVyMS5vcmcxLmV4YW1wbGUuY29tOjgwNTE6CiAgICB1cmw6IGdycGNzOi8vbG9jYWxob3N0OjgwNTEKICAgIHRsc0NBQ2VydHM6CiAgICAgIHBlbTogfAogICAgICAgIC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQogICAgICAgIE1JSUNWekNDQWY2Z0F3SUJBZ0lSQUtrcVZvRDhReE5aTlNxcEtJbDZUYzR3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKICAgICAgICBNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHCiAgICAgICAgY21GdVkybHpZMjh4R1RBWEJnTlZCQW9URUc5eVp6RXVaWGhoYlhCc1pTNWpiMjB4SHpBZEJnTlZCQU1URm5ScwogICAgICAgIGMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTWpBd05EQXlNRGd5TWpBd1doY05NekF3TXpNeE1EZ3kKICAgICAgICBNakF3V2pCMk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFCiAgICAgICAgQnhNTlUyRnVJRVp5WVc1amFYTmpiekVaTUJjR0ExVUVDaE1RYjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEVmTUIwRwogICAgICAgIEExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKICAgICAgICBBd0VIQTBJQUJFdzZIMzhXZm9jcVc3TEJqUUp2MDRMK1VLajB2NGFsZ0NXZEs2ay9hdElCOFM2YnlQTkZLY0hrCiAgICAgICAgL2sxYVdjV2FVNGZOSFNqdjBJUjl3aThiemh6RUR3ZWpiVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVgogICAgICAgIEhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdFd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBcEJnTlYKICAgICAgICBIUTRFSWdRZ1dOb2YzaVZiaUxMQlFrNGNtbUV1ZEhQWGFsTFd4WG9lRlk1TXYrUmZUbHN3Q2dZSUtvWkl6ajBFCiAgICAgICAgQXdJRFJ3QXdSQUlnVlJ5dWdMU1RCOUZnTFlGUnhOeUMyWHprYi9XTDJtQk1TdElkM2w3eUk2d0NJRDBHTHJCagogICAgICAgIGFKRThqcXdyYm02emZBZHJmTXhSTlFzSFdVWHpsTGhybkpTbgogICAgICAgIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KICAgICAgICAKICAgIGdycGNPcHRpb25zOgogICAgICBzc2wtdGFyZ2V0LW5hbWUtb3ZlcnJpZGU6IHBlZXIxLm9yZzEuZXhhbXBsZS5jb20KICAgICAgaG9zdG5hbWVPdmVycmlkZTogcGVlcjEub3JnMS5leGFtcGxlLmNvbQpvcmRlcmVyczoKICBvcmRlcmVyLmV4YW1wbGUuY29tOgogICAgdXJsOiBncnBjczovL2xvY2FsaG9zdDo3MDUwCiAgICB0bHNDQUNlcnRzOgogICAgICBwZW06IHwKICAgICAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgICAgICBNSUlDUWpDQ0FlbWdBd0lCQWdJUWFHS1k5djkrdXZKZmszYXg5eG1jK3pBS0JnZ3Foa2pPUFFRREFqQnNNUXN3CiAgICAgICAgQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQogICAgICAgIFlXNWphWE5qYnpFVU1CSUdBMVVFQ2hNTFpYaGhiWEJzWlM1amIyMHhHakFZQmdOVkJBTVRFWFJzYzJOaExtVjQKICAgICAgICBZVzF3YkdVdVkyOXRNQjRYRFRJd01EUXdNakE0TWpJd01Gb1hEVE13TURNek1UQTRNakl3TUZvd2JERUxNQWtHCiAgICAgICAgQTFVRUJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdQogICAgICAgIFkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1Sb3dHQVlEVlFRREV4RjBiSE5qWVM1bGVHRnQKICAgICAgICBjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJOaEJyWW9DdEN3aDhPakZrMnFICiAgICAgICAgQUxQVjNhVjZWVGJDZWxjV1RqYVpnTkZMdkpab05xc3VxTlFXd0FFdzdIZVZJVnAwODdpcDk0Q3RQcmtYbG5oaAogICAgICAgIHZ3cWpiVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUIKICAgICAgICBCUVVIQXdFd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBcEJnTlZIUTRFSWdRZ3BjYkJ1WUpwOGtyb0lyeC96NURzCiAgICAgICAgQnljNDVRYi9ML2M3bmpSdEVGcktzZGN3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnS1pZVUpmMTRXdkhHSUhWbgogICAgICAgIGVzaU5xT0s4bXRlRjJVdUJKZEU1YVJsazVGb0NJQk1tQ2xXUWtpR21pUmxWTkFuV1U2NGZvS1dUT3ovZ2pJV2YKICAgICAgICB6aGdqd3gxawogICAgICAgIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KICAgICAgICAKICAgIGdycGNPcHRpb25zOgogICAgICBzc2wtdGFyZ2V0LW5hbWUtb3ZlcnJpZGU6IG9yZGVyZXIuZXhhbXBsZS5jb20KICAgICAgaG9zdG5hbWVPdmVycmlkZTogb3JkZXJlci5leGFtcGxlLmNvbQo=",
    "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLVENDQWMrZ0F3SUJBZ0lRYmc0RnRmQmhLSGZkVklNWWVLRGx5REFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNREEwTURJd09ESXlNREJhRncwek1EQXpNekV3T0RJeU1EQmEKTUdzeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE0d0RBWURWUVFMRXdWaFpHMXBiakVmTUIwR0ExVUVBd3dXUVdSdGFXNUFiM0puCk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCSklXbkNhUStTR3IKQ2dHNENyTE1qekZveW5zSy9JNDVtaWZPVk5EcjNpM1k2WDN0OUlCYTVMNWtNTlNRczYxUGg4dHJjL2twOExFcgpZVVJTejB1S0wyeWpUVEJMTUE0R0ExVWREd0VCL3dRRUF3SUhnREFNQmdOVkhSTUJBZjhFQWpBQU1Dc0dBMVVkCkl3UWtNQ0tBSUZnQS95cEpjaG8rWUUrZmhiWjJMQ3VWcWNrTTBjc1Z0dEZyTlRweHlyTkVNQW9HQ0NxR1NNNDkKQkFNQ0EwZ0FNRVVDSVFDeVBjbXNnS0RaZVU0d3pGK1dxbWF1eHFVek8wM2JzNWxjckVoWFd4OThTZ0lnU2pHNgplSmU1RGVLc0xPR0ttbGYrNTVVc1M1V2FVcnRlblBFeVVGSE9lUTA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
    "privatekey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1FrZXpsaVhjb0lNa0htOVgKcStFcWhZcG1FTzdsQXpDZE1xc0NUL0J4NW1TaFJBTkNBQVNTRnB3bWtQa2hxd29CdUFxeXpJOHhhTXA3Q3Z5TwpPWm9uemxUUTY5NHQyT2w5N2ZTQVd1UytaRERVa0xPdFQ0ZkxhM1A1S2ZDeEsyRkVVczlMaWk5cwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg=="
}'

Or edit and use the cups.sh file:

./cups.sh

After deploying the user-provided service you are ready to deploy the application itself. Therefore, build the application using maven by running the following command in the application folder:

mvn clean package

To deploy the application make sure you have selected the same organization and space via the Cloud Foundry CLI and the run:

cf push

Usage

The REST-API provides the endpoints /{chaincode_name}/query and /{chaincode_name}/invoke. Both endpoints expect the same request body. Example request:

curl -X POST \
  https://com-sap-icn-gateway-example.cfapps.sap.hana.ondemand.com/crud/invoke \
  -H 'Content-Type: application/json' \
  -d '{
    "function": "write",
    "arguments": ["data"]
}'

function specifies the name of the function in the chaincode (string) and arguments can be an array of string arguments for the chaincode function.

Scaling

Since the application is stateless and completely relies only on the data of the user-provided service, the application can be scaled easily. If the application is under high load or traffic it should be scaled horizontally by adding more instances to the Cloud Foundry application. This can be done via the command:

cf scale com-sap-icn-gateway-example -i 5

After applying these changes, all incoming traffic is automatically load-balanced between all instances of the Cloud Foundry application.

Limitations

This gateway example application does not support private data.

Known Issues

There are no known issues at this time.

How to obtain support

This project is provided "as-is" without support.

License

Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the LICENSE file.

cloud-blockchain-fabric-gateway-example's People

Contributors

btbernard avatar schalex1998 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

greg2git

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.