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:
- (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:
- Link de Referência: https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/get-started-create-client.html
- Enroll Member Admin -- Quando registrar o usuário admin utilizar o comando sem variáveis
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):
- (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:
- Instalar antes o nvm (https://github.com/nvm-sh/nvm)
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)