Scenario: esegui Chaincode as a Service

L'esempio riportato di seguito illustra l'esecuzione del codice concatenato FabCar come servizio esterno (un pod nel cluster Kubernetes) che è possibile distribuire in Oracle Blockchain Platform.

Prima di completare i passi riportati di seguito, distribuire il codice concatenato come package esterno in Oracle Blockchain Platform.

  1. Clonare la directory GitHub nel repository hyperledger/fabric-samples contenente fabcar/external. La directory contiene la versione esterna del codice concatenato FabCar in Go, fabcar.go e un file Dockerfile. Ignorare i file metadata.json e chaincode.env.example.
  2. Modificare il file Dockerfile come mostrato nell'esempio seguente:
    # Use the Go image from Docker Hub with specified versions for Go and Alpine Linux
    FROM golang:1.13.8-alpine3.10
    
    # Create a directory named "chaincode" in the image
    RUN mkdir /chaincode
    
    # Set "/chaincode" as the working directory within the image
    WORKDIR /chaincode
    
    # Copy the contents of the local directory into "/chaincode" in the image
    COPY . .
    
    # Fetch and install Go dependencies for the project
    RUN go get -d -v ./...
    
    # Install Go dependencies
    RUN go install -v ./...
    
    # Compile the Go code in the current directory, creating an executable binary named "fabcar"
    RUN go build -o fabcar .
    
    # Expose port 9999, indicating that the application within the container will listen on this port
    EXPOSE 9999
    
    # Set the default command to run the "fabcar" executable when the container starts
    CMD ["/chaincode/fabcar"]

    Questa sequenza di comandi imposta l'immagine di base per la creazione della nuova immagine sull'immagine Go con versioni specifiche per Go e Alpine Linux, crea una directory, imposta tale directory come directory di lavoro, copia il contenuto locale nell'immagine, recupera e installa le dipendenze Go, compila il codice Go, configura il contenitore per l'ascolto sulla porta 9999 e imposta il comando predefinito per eseguire l'eseguibile fabcar.

  3. Eseguire il comando seguente per creare l'immagine Docker, che crea un'immagine Docker denominata fabcar-sample, che può quindi essere sottoposta a push in un repository.
    docker build -t fabcar-sample .
  4. Creare un file YAML di distribuzione Kubernetes per eseguire l'immagine Docker contenente il codice concatenato. L'esempio seguente mostra un file deployment.yaml. Il repository da cui viene estratta l'immagine Docker è repository.example.org. Il nome segreto Kubernetes utilizzato per estrarre le immagini è ocirsecret. Il valore CHAINCODE_SERVER_ADDRESS è 0.0.0.0:9999, che indica che il server è configurato per accettare le connessioni in entrata sulla porta 9999 da qualsiasi indirizzo IP associato al computer. Ottenere il valore CHAINCODE_ID dall'ID package codice concatenato visualizzato quando si esegue la distribuzione sul nodo peer in Oracle Blockchain Platform selezionando il tipo di codice concatenato esterno e caricando un file .zip. Nell'interfaccia utente di Oracle Blockchain Platform, l'ID codice concatenato viene visualizzato come chaincode_name:package_ID. Per il codice concatenato Java, la variabile ID codice concatenato è denominata CORE_CHAINCODE_ID_NAME.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: external-fabcar-node
    namespace: chaincode
    labels:
    chaincode-type: external
    chaincode-name: external-fabcar-node
    spec:
    replicas: 1
    selector:
    matchLabels:
    chaincode-type: external
    chaincode-name: external-fabcar-node
    template:
    metadata:
    labels:
    chaincode-type: external
    chaincode-name: external-fabcar-node
    spec:
    imagePullSecrets:
    - name: ocirsecret
    containers:
    - env:
    - name: CHAINCODE_SERVER_ADDRESS
    value: "0.0.0.0:9999"
    - name: CHAINCODE_ID
    value: "ext-fabcar-node:7f953544f26124914c29467d5079f601ddefa53375fffec830ecd70c13547877"
    image: repository.example.org/blockchain/fabcar-sample:latest
    imagePullPolicy: Always
    name: assettransfer
    ports:
    - containerPort: 9999
    name: grpc
    protocol: TCP
    
    
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
    labels:
    chaincode-name: external-fabcar-node
    chaincode-type: external
    name: external-fabcar-node
    namespace: chaincode
    spec:
    ports:
    - name: grpc
    port: 9999
    protocol: TCP
    targetPort: 9999
    selector:
    chaincode-name: external-fabcar-node
    chaincode-type: external
    type: ClusterIP
  5. Eseguire il comando riportato di seguito per generare un segreto Kubernetes nello spazio di nomi chaincode. Per name_of_secret, specificare il segreto dal file deployment.yaml. In questo esempio, il nome del segreto è ocirsecret.
    kubectl create secret docker-registry name_of_secret -n chaincode --docker-server='repository.example.org/blockchain' --docker-username='your_username' --docker-password='auth_token'
  6. Eseguire il comando riportato di seguito per distribuire il pod e il servizio Kubernetes.
    kubectl apply -f deployment.yaml

Ora è possibile eseguire transazioni che utilizzano il codice concatenato esterno da Oracle Blockchain Platform.