Escrever um Chaincode

Um chaincode é escrito em Go, Node.js ou Java e depois empacotado em um arquivo .zip que é instalado na rede do Oracle Blockchain Platform.

Os códigos de cadeia definem o esquema de dados no razão, inicializam-no, completam atualizações quando acionadas por aplicativos e respondem a consultas. Chaincodes também podem postar eventos que permitem que os aplicativos sejam notificados e concluam operações downstream. Por exemplo, após ordens de compra, faturas e registros de entrega terem sido correspondidos por um chaincode, ele pode lançar um evento para que um aplicativo assinante possa processar pagamentos relacionados e atualizar um sistema ERP interno.

Recursos para Desenvolvimento de Chaincode

O Oracle Blockchain Platform usa o Hyperledger Fabric como sua base. Use a documentação do Hyperledger Fabric para ajudá-lo a escrever códigos de cadeia válidos.

  • Bem-vindo ao Hyperledger Fabric. Leia as seções Conceitos-Chave e Tutoriais antes de escrever seu próprio chaincode.

  • Ir para Linguagem de Programação. Os compiladores, ferramentas e bibliotecas Go fornecem uma variedade de recursos que simplificam a escrita de códigos de cadeia.

  • Shim do pacote. O pacote shim fornece APIs para o chaincode acessar suas variáveis de estado, obter contexto de transação e chamar outros chaincodes. A documentação do pacote shim descreve a sintaxe real necessária para o seu chaincode.

O Oracle Blockchain Platform fornece amostras para download que ajudam você a entender como gravar chaincodes e aplicativos. Consulte O que são amostras de Chaincode?

Você pode adicionar sintaxe de rich-query aos seus chaincodes para consultar o banco de dados de estado. Consulte Sintaxe de Consulta Rich SQL e Sintaxe de Consulta Rich CouchDB.

Empacotar um Código de Cadeia Go

Depois de escrever seu chaincode, compacte-o em um arquivo no formato .zip. Você não precisa criar um pacote para o código da cadeia Go ou assiná-lo — o processo de instalação e implantação do Oracle Blockchain Platform faz isso para você, conforme descrito em Workflow Típico para Implantar Códigos da Cadeia.

Se seu chaincode tiver dependências externas, você poderá colocá-las no diretório do fornecedor do arquivo .zip.

Fornecedor do Shim for Go Chaincodes

A dependência do shim do chaincode Go não está mais incluída no Hyperledger Fabric. O shim agora deve ser vendido (importado) para códigos de cadeia Go antes de serem instalados em um par.

Você pode usar módulos Go ou uma ferramenta de terceiros, como o govendor para fornecer o shim chaincode e atualizá-lo para a versão que funciona com o Hyperledger Fabric.

Para obter mais informações, consulte Alterações de shim de código de cadeia (somente código de cadeia Go) e Fazer Upgrade de Chaincodes com shim vendido na documentação do Hyperledger Fabric. Para obter mais informações sobre os módulos Go, consulte Referência dos Módulos Go.

Empacotar um Node.js Chaincode

Se você estiver gravando um chaincode Node.js, deverá criar um arquivo package.json com duas seções:
  • A seção scripts declara como iniciar o chaincode.

  • A seção dependencies especifica as dependências.

Veja a seguir um exemplo de package.json para um código de cadeia Node.js:

{
	"name": "chaincode_example02",
	"version": "1.0.0",
	"description": "chaincode_example02 chaincode implemented in Node.js",
	"engines": {
		"node": ">=8.4.0",
		"npm": ">=5.3.0"
	},
	"scripts": { "start" : "node chaincode_example02.js" },
	"engine-strict": true,
	"license": "Apache-2.0",
	"dependencies": {
		"fabric-shim": "~1.3.0"
	}
}
As regras de empacotamento a seguir se aplicam aos chaincodes Node.js.
  • O arquivo package.json deve estar no diretório raiz.
  • O arquivo de entrada JavaScript pode estar localizado em qualquer parte do pacote.
  • Se "start" : "node <start>.js" não for especificado no arquivo package.json, o arquivo server.js deverá estar no diretório raiz.

Compactar o chaincode e o arquivo de pacote no formato .zip para instalá-lo no Oracle Blockchain Platform.

Empacotar um Java Chaincode

Se você estiver escrevendo um chaincode Java, poderá escolher Gradle ou Maven para criar o chaincode.

Se você estiver usando o Gradle, compacte o chaincode, build.gradle e settings.gradle em um arquivo no formato .zip para instalá-lo no Oracle Blockchain Platform. A lista a seguir mostra arquivos de amostra em um pacote chaincode:
Archive:  example_gradle.zip 
 Length      Date    Time    Name
---------  ---------- -----   ---- 
      610  02-14-2019 01:36   build.gradle
       54  02-14-2019 01:28   settings.gradle
        0  02-14-2019 01:28   src/
        0  02-14-2019 01:28   src/main/
        0  02-14-2019 01:28   src/main/java/
        0  02-14-2019 01:28   src/main/java/org/
        0  02-14-2019 01:28   src/main/java/org/hyperledger/
        0  02-14-2019 01:28   src/main/java/org/hyperledger/fabric/
        0  02-14-2019 01:28   src/main/java/org/hyperledger/fabric/example/
     5357  02-14-2019 01:28   src/main/java/org/hyperledger/fabric/example/SimpleChaincode.java
---------                     -------
     6021                     10 files
Se você estiver usando o Maven, comprima o chaincode e pom.xml em um arquivo no formato .zip para instalá-lo no Oracle Blockchain Platform. A lista a seguir mostra arquivos de amostra em um pacote chaincode:
Archive:  example_maven.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     3313  02-14-2019 01:52   pom.xml
        0  02-14-2019 01:28   src/
        0  02-14-2019 01:28   src/chaincode/
        0  02-14-2019 01:28   src/chaincode/example/
     4281  02-14-2019 01:28   src/chaincode/example/SimpleChaincode.java
---------                     -------
     7594                     5 files

Testando um Chaincode

Teste seu chaincode depois de escrevê-lo. Consulte os tópicos a seguir:

Instalando e Implantando um Chaincode

Depois de testar seu chaincode, você pode implantá-lo seguindo as informações contidas em Workflow Típico para Implantar Chaincodes.

Atualizando um Chaincode

Faça upgrade de um chaincode implantado seguindo as etapas em Fazer Upgrade de um Chaincode.