blockchain_hyperledger - rafaelglima/smarthealth GitHub Wiki

Criando a Blockchain

Criar uma Private Blockchain (HyperLedger Fabric) via Console Web

Criar uma VM no EC2 através do Cloudformation:

  1. (Arquivo: shdm-item16-ec2-bc)

Instalar os recursos na VM: Go, Nodejs, Npm e Docker

wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz
sudo tar -xvf go1.21.6.linux-amd64.tar.gz 
sudo chown -R ubuntu.ubuntu go
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
sudo apt -y install nodejs
sudo apt -y install npm
node -v
npm -v
sudo usermod -aG docker $USER
sudo reboot

Instalação do cliente Blockchain:

fabric-ca-client enroll \
-u 'https://admin:senha@ca.m-yumwzw4djngv5k2mj6ppuunb7y.n-5ldyibq45vhapchemzvkilage4.managedblockchain.us-east-1.amazonaws.com:30002' \
--tls.certfiles /home/ec2-user/managedblockchain-tls-chain.pem -M /home/ec2-user/admin-msp

Criar o chaincode smarthealth na pasta:

 ˜/fabric-samples/chaincode/smarthealth/go

Código em Go do chaincode (smarthealth.go):

  1. (Arquivo: smarthealth.go)

Dentro da pasta do chaincode executar:

GO111MODULE=on go mod vendor

Criando a função lambda (api em nodejs) referente ao recebimento de informações da Camada em Névoa e para invocação do Chaincode

Observações:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
  • Instalar e usar via NVM o node 18.2.20
nvm ls-remote
nvm install 18.20.3
nvm use 18.20.3
node --version

Criando a função lambda

mkdir lambda-cloud-bc
cd lambda-cloud-bc
npm -g install serverless@3
serverless create --template aws-nodejs --path .
serverless deploy -v

Criando as Layers para adicionar à Função Lambda

Observações:

  • Devido ao tamanho das bibliotecas foi necessário dividir em duas layers as bibliotecas.
  • Ao compactar a pasta node_modules precisar estar dentro de uma pasta chamada nodejs
  • As bibliotecas necessárias instaladas via npm install são: express, body-parser, @grpc/grpc-js, serverless, serverless-http, fs, path, fabric-network, fabric-ca-client
  • Foi preciso habilitar na VpcSH da camada em nuvem "Enable DNS resolution" e "Enable DNS hostnames"
[separe as bibliotecas da pasta nodejs em duas pastas nodejs]
zip -r l1-cloud-bc.zip nodejs
zip -r l2-cloud-bc.zip nodejs
aws lambda publish-layer-version --layer-name l1-cloud-bc --zip-file fileb://l1-cloud-bc.zip --compatible-runtimes nodejs18.x --region us-east-1
aws lambda publish-layer-version --layer-name l2-cloud-bc --zip-file fileb://l2-cloud-bc.zip --compatible-runtimes nodejs18.x --region us-east-1

Adicionar na role da lambda criada uma Policy para permitir a mudança de VPC da função lambda e também criar a Role que permite a Lambda realizar ações na Blockchain

  • Lembrar de aumentar o timeout da Função Lambda em suas configurações
  • Após implantar a função deve-se alterar a VPC dela para a VPC que criamos na Camada em Nuvem (10.20.0.16/0)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeNetworkInterfaces",
        "ec2:CreateNetworkInterface",
        "ec2:DeleteNetworkInterface",
        "ec2:DescribeInstances",
        "ec2:AttachNetworkInterface"
      ],
      "Resource": "*"
    }
  ]
}

Referências

[Passo a Passo Blockchain no Amazon] (https://docs.aws.amazon.com/ja_jp/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-get-started-tutorial.html)

[Role IAM para Cliente Hyperledger] (https://docs.aws.amazon.com/ja_jp/managed-blockchain/latest/hyperledger-fabric-dev/security_iam_hyperledger_ec2_client.html)

[Exemplo de aplicação JS para Blockchain] (https://github.com/hyperledger/fabric-samples/blob/release-2.2/asset-transfer-basic/application-javascript/app.js)

[Exemplo de template do Connection Profile] (https://github.com/aws-samples/amb-hf-workshop-supplychain-app/blob/main/lib/lambda/connection-profile-template.json)

[Usando a rede test_network (Caso não utilize a Amazon Managed Blockchain)] (https://hyperledger-fabric.readthedocs.io/en/latest/test_network.html)

[Lambda Limits (Cinco Layers/Tamanho Lambda)] (https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)