Especificação técnica da versão 1: https://entethalliance.org/wp-content/uploads/2020/06/EEA_Enterprise_Ethereum_Client_Specification_V5.pdf
Especificação técnica da versão 2: https://entethalliance.org/wp-content/uploads/2020/11/EEA_Enterprise_Ethereum_Client_Specification_v6.pdf
Ver mais especificações: https://entethalliance.org/technical-specifications/
Como o besu define a versão e mais informações: https://besu.hyperledger.org/en/stable/HowTo/Limit-Access/Specify-Perm-Version/
Nota: A versão 1 "pura" dos smart contracts de permissionamento da Consensys (sem as modificações da lacchain) não foi encontrada.
-
beta1: contém a implementação do frontend e backend da versão 1 dos smart contracts de permissionamento com modificações feitas pela Lacchain. Essas modificações adicionam informações sobre os nós no contrato, como: o tipo de nó (boot, validator, writer, observer...), geoHash, nome para o nó e o nome da instituição. Essa branch contém a cópia exata do repositório da lacchain na branch beta1 criada especificamente para a RBB. Os testes automatizados e os scripts de migração não acompanharam as mudanças feitas pela lacchain.
-
V1_Multisig: versão da branch beta1 com a implementação de múltiplas assinaturas nas transações dos smart contracts de permissionamento. Os testes automatizados, os scripts de migração e o frontend não acompanharam essas mudanças feitas.
-
V1-backend: contém como base a implementação do backend feito pela lacchain (beta1) com as seguintes modificações:
- Remoção do IP e porta no registro dos nós.
- Adição do endereço de quem permissionou e o block timestamp nos eventos de adição e remoção de contas.
- Adição do endereço de quem permissionou e o block timestamp nos eventos de adição e remoção de contas admin.
Os scripts de migração e os testes automatizados acompanharam essas modificações.
-
V2: contém como base a implementação do frontend e backend da versão 2 dos smart contracts de permissionamento feita pela consensys com as seguintes modificações:
- Modificação feita em
migrations/3_deploy_node_ingress_rules_contract.js
que executa a funçãosetValidateEnodeIdOnly(true)
para não considerar IP e Porta na adição e remoção de nós. - Adição do endereço de quem permissionou e o block timestamp nos eventos de adição e remoção de contas.
- Compatibilidade de instalação dos pacotes em ambiente corporativo. Foi adicionado no
package.json
a dependência"truffle-corporative": "npm:truffle@5.3.3"
que instala a versão 5.3.3 do truffle (versão máxima do truffle suportada em ambiente corporativo) e nivela as outras dependências com a versão 5.4.24 do truffle.
- Modificação feita em
-
V2_Multisig_Beta: contém como base a implementação do frontend e backend da versão 2 dos smart contracts de permissionamento feita pela consensys com a implementação - ainda em desenvolvimento/não concluída - de múltiplas assinaturas nas transações dos smart contracts de permissionamento. Os testes automatizados, os scripts de migração e o frontend não acompanharam essas mudanças feitas.
-
A documentação do Besu descreve como utilizar os contratos de permissionamento onchain com o Besu.
-
Em um ambiente corporativo com proxy, utilize a versão 5.3.3 do truffle. Versões posteriores a esta não funcionam corretamente nestes ambientes.
-
Os testes automatizados não estão presentes no arquivo
permissioningDeploy.tar.gz
contido nas releases. O arquivopermissioningDeploy.tar.gz
é destinado para ambientes em produção e, portanto, não possui suporte para testes.
- O diretório contracts contém todos os smart contracts de permissionamento.
- O diretório migrations contém os scripts de migração para o deploy dos smart contracts.
- O diretório scripts contém scripts responsáveis pela obtenção e validação das variáveis de ambiente. As variáveis de ambiente são utilizadas nos scripts de migração e no arquivo
truffle-config.js
. - O diretório test contém os testes automatizados do projeto.
- O diretório node_modules contém todos os pacotes necessários para o projeto. O diretório e os pacotes são criados somente após a instalação das dependências do projeto (ao executar
yarn install
). As dependências do projeto são encontradas no arquivopackage.json
. - o diretório src/chain/abis contém as abis dos smart contracts. As abis são criadas somente após a compilação dos smart contracts.
Nota: É recomendável não utilizar Windows no processo de desenvolvimento.
Execute yarn install
para instalar as dependências do projeto. Essa etapa só é necessária ao configurar o projeto pela primeira vez.
Execute yarn truffle compile
para compilar os smart contracts.
Execute yarn test
para realizar os testes automatizados dos smart contracts de permissionamento.
Execute yarn truffle develop
para iniciar um nó ganache e criar uma sessão de console do Truffle. Ao iniciar um nó ganache, será dado uma lista de contas e as chaves privadas correspondentes. Neste console, podem ser executados os comandos test
(para realizar testes automatizados utilizando o nó ganache) e migrate --reset
(para realizar o deploy dos smart contracts no nó ganache). Mantenha esse console aberto para manter o nó ganache em execução.
-
Execute
yarn install
para instalar as dependências do projeto. Essa etapa só é necessária ao configurar o projeto pela primeira vez. -
Crie um arquivo
.env
e defina as variáveis de ambiente neste arquivo conforme template abaixo:NODE_INGRESS_CONTRACT_ADDRESS=0x0000000000000000000000000000000000009999 ACCOUNT_INGRESS_CONTRACT_ADDRESS=0x0000000000000000000000000000000000008888 BESU_NODE_PERM_ACCOUNT=627306090abaB3A6e1400e9345bC60c78a8BEf57 BESU_NODE_PERM_KEY=c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3 BESU_NODE_PERM_ENDPOINT=http://127.0.0.1:8545 CHAIN_ID=648629 INITIAL_ADMIN_ACCOUNTS=0x38393851d6d26497de390b37b4eb0c1c20a5b0bc,0xc78622f314453aeb349615bff240b6891cefd465,0x8b708294671a61cb3af2626e45ec8ac228a03dea INITIAL_ALLOWLISTED_ACCOUNTS=0x38393851d6d26497de390b37b4eb0c1c20a5b0bc,0xc78622f314453aeb349615bff240b6891cefd465,0x8b708294671a61cb3af2626e45ec8ac228a03dea INITIAL_ALLOWLISTED_NODES=enode://7ef6...d416|0|0x000000000000|Boot|BNDES,enode://d350...70d2|1|0x000000000000|Validator|BNDES,enode://971d...5c3c|2|0x000000000000|Writer|BNDES
Em
BESU_NODE_PERM_ACCOUNT
, conforme o template, insira o endereço da conta a fazer o deploy e a ser a primeira conta de administração do permissionamento.Em
BESU_NODE_PERM_KEY
, insira a chave privada da conta mencionada acima conforme o template.⚠️ Atenção! Certifique-se de utilizar uma chave privada devidamente protegida.Em
BESU_NODE_PERM_ENDPOINT
, insira o endereçoIP_Interno:Porta
do seu validator conforme o template. Apenas nesse momento será utilizada a porta RPC do validator - e não do writer - para enviar transações.Em
CHAIN_ID
, insira a chain ID da rede conforme o template. A chain ID pode ser encontrada no arquivogenesis.json
.Em
INITIAL_ADMIN_ACCOUNTS
, conforme o template, insira os endereços de conta de administração do permissionamento.Em
INITIAL_ALLOWLISTED_ACCOUNTS
, conforme o template, insira os endereços de conta de administração do permissionamento. As listas de administração e de conta (endereços de conta permitidos de enviarem transações na rede) são diferentes e independentes. Desta forma, faz-se necessário adicionar os endereços de conta de adminstração também nesta variável de ambiente para que seja possível enviar transações na rede.Em
INITIAL_ALLOWLISTED_NODES
, conforme o template, insira as informações de todos os nós iniciais da rede. As informações de cada nó devem ser separadas por vírgula e devem ser inseridas da seguinte forma:enode://<chave-pública-SEM-0x>|<tipo-do-nó-(0: Boot, 1: Validator, 2: Writer, 3: WriterPartner, 4: ObserverBoot, 5: Other)>|<geohash-do-nó>|<nome-do-nó>|<nome-da-instituição>
-
Faça o deploy
yarn truffle migrate --reset --network besu