Cenário: Executar Chaincode como um Serviço

O exemplo a seguir ilustra a execução do chaincode FabCar como um serviço externo (um pod no cluster do Kubernetes) que você pode implantar no Oracle Blockchain Platform.

Antes de concluir as etapas a seguir, implante o chaincode como um pacote externo no Oracle Blockchain Platform.

  1. Clone o diretório GitHub no repositório hyperledger/fabric-samples que contém fabcar/external. O diretório contém a versão externa do chaincode FabCar em Go, fabcar.go e um arquivo Dockerfile. Ignore os arquivos metadata.json e chaincode.env.example.
  2. Modifique o arquivo Dockerfile conforme mostrado no seguinte exemplo:
    # 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"]

    Esta sequência de comandos define a imagem base para a construção da nova imagem para a imagem Go com versões específicas para Go e Alpine Linux, cria um diretório, define esse diretório como o diretório de trabalho, copia o conteúdo local na imagem, extrai e instala dependências de Go, compila o código Go, configura o contêiner para fazer listening na porta 9999 e define o comando padrão para executar o executável fabcar.

  3. Execute o comando a seguir para criar a imagem do Docker, que cria uma imagem do Docker chamada fabcar-sample, que pode ser enviada para um repositório.
    docker build -t fabcar-sample .
  4. Crie um arquivo YAML de implantação do Kubernetes para executar a imagem do Docker que contém o chaincode. O exemplo a seguir mostra um arquivo deployment.yaml. O repositório do qual a imagem do Docker é extraída é repository.example.org. O nome do segredo do Kubernetes usado para extrair imagens é ocirsecret. O valor CHAINCODE_SERVER_ADDRESS é 0.0.0.0:9999, que indica que o servidor está configurado para aceitar conexões de entrada na porta 9999 de qualquer endereço IP associado ao computador. Obtenha o valor CHAINCODE_ID do ID do pacote de chaincode que é exibido quando você implanta no nó de mesmo nível no Oracle Blockchain Platform selecionando o tipo de chaincode externo e fazendo upload de um arquivo .zip. Na interface do usuário do Oracle Blockchain Platform, o ID do chaincode é exibido como chaincode_name:package_ID. Para o chaincode Java, a variável chaincode ID é denominada 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. Execute o comando a seguir para gerar um segredo do Kubernetes no namespace chaincode. Para name_of_secret, especifique o segredo no arquivo deployment.yaml. Neste exemplo, o nome do segredo é 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. Execute o comando a seguir para implantar o pod e o serviço do Kubernetes.
    kubectl apply -f deployment.yaml

Agora você pode executar transações que usam o chaincode externo do Oracle Blockchain Platform.