Distribuire il codice concatenato utilizzando l'interfaccia CLI

Dopo aver creato un progetto con codice concatenato, è possibile distribuirlo localmente nella rete Hyperledger Fabric generata automaticamente o in remoto in Oracle Blockchain Platform Cloud o Enterprise Edition. È inoltre possibile raggruppare il progetto del codice concatenato per la distribuzione manuale in Oracle Blockchain Platform.

Distribuire il codice concatenato in una rete Hyperledger Fabric locale

Dopo aver creato il progetto con codice concatenato, è possibile distribuirlo in una rete Hyperledger Fabric locale. Questa rete di test a canale singolo viene creata automaticamente quando si installa Blockchain App Builder.

Il comando Blockchain App Builder ochain run avvia la rete Hyperledger Fabric e altri servizi e installa e distribuisce il codice concatenato automaticamente.

ochain run -h
Usage: run [options] [...args]
Run chaincode project locally in debug mode.

Arguments :
[...args] (optional) Chaincode instantiate arguments. Arguments should be space separated.

Options:
-h, --help        output command usage information 
-D, --debug       enable debug logging
-P, --debug-port  (optional) specify debug process port
-b, --build       (optional) rebuild runtime if already exists
-p, --project     (optional) Path to Chaincode project to run. If not specified, it defaults to current directory.  

Examples :
$> ochain run   

La rete di test creata quando si installa Blockchain App Builder esegue Hyperledger Fabric v2.5.7 e Hyperledger Fabric CA v1.5.9.

Progetti token

Per i progetti di codice concatenato di token, è necessario specificare un elenco di amministratori di token con il comando ochain run:
ochain run <adminList array>
L'array adminList è un array di informazioni che specifica gli amministratori dei token. L'array adminList è un parametro obbligatorio quando si distribuisce un progetto codice concatenato token per la prima volta. Se si distribuisce di nuovo il progetto, è possibile passare un array vuoto per il parametro adminList oppure utilizzare il parametro adminList per aggiungere amministratori di token. Gli altri implementatori che non sono il primo implementatore devono fornire un array vuoto per il parametro adminList. Le informazioni sui parametri sono diverse per i token fungibili e i token non fungibili:
  • Per i token fungibili che utilizzano lo standard Token Taxonomy Framework, i parametri sono org_id e user_id.
  • Per tutti i token che utilizzano lo standard ERC-1155, i parametri sono orgId e userId.
  • Per i token non fungibili che utilizzano lo standard ERC-721 e un progetto TypeScript, i parametri sono orgId e userId.
  • Per i token non fungibili che utilizzano lo standard ERC-721 e un progetto Go, i parametri sono OrgId e UserId.

Gli esempi seguenti sono per i token non fungibili.

Esempio di array adminList per TypeScript in macOS e Linux:
'[{"userId":"userid", "orgId":"OrgMSPId"}]'
Esempio di array adminList per Go su macOS e Linux:
'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
Esempio di array adminList per TypeScript in Microsoft Windows:
"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
Esempio di array adminList per Vai su Microsoft Windows:
"[{\"UserId\":\"userid\", \"OrgId\":\"OrgMSPId\"}]"

Per la rete locale Hyperledger Fabric, il campo OrgMSPId è impostato sul valore Org1MSP.

Per visualizzare i log di debug, passare l'opzione --debug al comando. In Windows, utilizzare il prompt dei comandi anziché PowerShell se si specifica l'opzione --debug. È possibile eseguire la rete di base e distribuire il codice concatenato su una porta diversa da quella predefinita passando l'opzione --port al comando.

Verifica

I log seguenti indicano che il codice concatenato è stato installato e distribuito correttamente.

my-mac:TSProject myname$ ochain run
Recreating orderer.example.com ... done
Recreating ca.example.com ... done
Recreating peer0.org1.example.com ... done
[2020-09-23T18: 04:09.132] [INFO] default -
============ Started Install Chaincode ============
[2020-09-23T18:04:09.193] [INFO] default Chaincode TSProject:l not installed.
[2020-09-23T18:04:09.317] [INFO] default - Successfully sent install Proposal and received ProposalResponse
[2020-09-23T18:04:09.317] [INFO] default - Successfully installed chaincode TSProject
[2020-09-23T18:04:09.317] [INFO] default -
============ Finished Install Chaincode ============
[2020-09-23T18:04:09.317] [INFO] default - Successfully installed chaincode TSProject
[2020-09-23T18:04:09.318] [INFO] default -
============ started instantiate Chaincode ============
[2020-09-23T18:04:09.366] [INFO] default - Successfully sent Proposal and received ProposalResponse
[2020-09-23T18:04:11.434] [INFO] default - The chaincode instantiate transaction has been committed on peer localhost:7051
[2020-09-23T18:04:11.434] [INFO] default - The chaincode instantiate transaction was valid.
[2020-09-23T18:04:11.435] [INFO] default - Successfully sent transaction to the orderer.
[2020-09-23T18:04:11.435] [INFO] default - Successfully instantiated chaincode TSProject on channel mychannel
[2020-09-23T18:04:11.435] [INFO] default - 
============ Finished instantiate Chaincode ============
[2020-09-23T18:04:11.4351 INFO] default - Successfully instantiated chaincode TSProject on channel mychannel 
INFO (Runtime): Chaincode TSProject installed and ready:
INFO (RunCommand): Chaincode TSProject deployed

Risoluzione dei problemi

Durante l'esecuzione del progetto con codice concatenato in una rete locale, potrebbero verificarsi i seguenti problemi.

Autorizzazioni Go mancanti
Durante l'installazione del progetto Go chaincode nella rete locale, è possibile che venga visualizzato un errore simile al testo seguente:
Starting ca.example.com    ... done
Starting orderer.example.com ... done
Starting peer0.orgl.example.com ... done
INFO (Runtime): 2020/06/22 22:57:09 build started

INFO (Runtime): Building ....

INFO (Runtime): go build runtime/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtine/ 
cgo.a: permission denied

ERROR (Runtime): go build runtine/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtime/
cgo.a: permission denied

INFO (Runtime): An error occurred while building: exit status 1

Stopping peer0.orgl.exmple.com ... done 
Stopping ca.example.com	... done
Stopping orderer.example.con ... done
Ciò è dovuto alla mancanza di autorizzazioni per Go. Questo errore è stato visualizzato solo in Mac OS. Si tratta di un problema noto.
Soluzione: utilizzare il comando seguente per modificare le autorizzazioni della directory $GOROOT, quindi riprovare a eseguire il comando ochain run:
sudo chmod -R 777 /usr/local/go
Errore di distribuzione
A causa di un errore di distribuzione, di una distribuzione danneggiata, di un contenitore peer Docker completo o di un peer Docker arrestato nella rete locale, potrebbe verificarsi un errore simile al testo seguente:
============ Started instantiate Chaincode ============
[2028-19-01T19:25:lO.372] [ERROR] default - Error instantiating Chaincode GollGl on channel mychannel, detailed 
error: Error: error starting container: error starting container: Failed to generate platform-specific docker 
build: Failed to pull hyperledger/fabric-ccenv:latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:latest not found: manifest unknown: manifest unknown [2020-19-01T19:25:10.372] (INFO) default -
============ Finished instantiate Chaincode ============
[2020-19-01119:25:10.372] [ERROR] default - Error: Error instantiating Chaincode Goll01 on channel mychannel, 
detailed error: Error: error starting container: error starting container: Failed to generate platfom-specific 
docker build: Failed to pull hyperledger/fabric-ccenv: latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:lalest not found: manifest unknown: manifest unknown exited: signal: terminated 
INFO: exited: signal: terminated

ERROR: Error in Chaincode deployment
Ciò è dovuto a un contenitore peer che non è in grado di riavviarsi correttamente.
Soluzione: provare nuovamente il comando ochain run, ma con l'opzione -b. Questa opzione consente di ricreare automaticamente il runtime.
ochain run -b
Ricreazione dell'ambiente obbligatoria
Ricreare l'ambiente se viene visualizzato un errore di canale non trovato o un errore simile al testo seguente:
Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: 
error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com ... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Error in Chaincode deployment
Per ricreare l'ambiente locale, eseguire il comando seguente:
ochain run -b

Distribuire il codice concatenato in una rete Oracle Blockchain Platform remota

Dopo aver distribuito e testato il tuo progetto di codice concatenato su una rete locale per garantire che funzioni come progettato, puoi distribuirlo su Oracle Blockchain Platform.

Distribuisci il tuo Chaincode

Uso: ochain deploy [options] [...args]

Con il comando ochain deploy è possibile utilizzare i seguenti argomenti e opzioni:

ochain deploy -h 
Usage: deploy [options] [...args]
Deploy chaincode project to Oracle Blockchain Platform

Arguments:
     [...args]    (optional) Chaincode instantiate arguments. Arguments should be space separated.
 
Options :
    -h, --help                      output command usage information
    -D, --debug                     enable debug logging
    -P, --project <project>         (optional) Path to Chaincode project to deploy. If not specified, it defaults to current directory.
    -c, --channel <channel>         (optional) Blockchain Channel to deploy chaincode to. If not specified, it defaults to the 'default' channel.
    -u, --username <username>       (required) A user name that has install chaincode privileges. Contact your administrator for more details.
    -v, --userversion <userversion> (optional) A user-specified chaincode version.
                             If a version isn't specified, for a new chaincode it will start at v1 and then increment to v2, v3, and so on.
                             For an existing chaincode, v1.a will increment to v1.a1, v1 will increment to v2, and v1.0 will increment to v1.1.
    -s --sign <password>            (required) Password to authenticate user.
    -r, --url <url>                 (required) Restproxy Url of the remote OBP instance.
    For example,
    OBP Cloud Services: https://test-xyz-abc.blockchain.ocp.oraclecloud.com:7443/restproxy
    OBP Enterprise Edition: https://restproxy.test-xyz-abc.blockchain.platform.com:443/restproxy

Examples:
$> ochain deploy -u <username> -s <password> -r <REST proxy URL of the remote instance> -c <name of the channel>

Immettere il nome utente e la password di Oracle Identity Cloud Service per un utente di Oracle Blockchain Platform con i ruoli ADMIN o REST_CLIENT. Per ulteriori informazioni su utenti e ruoli, vedere Impostazione di utenti e ruoli applicazione in Amministrazione di Oracle Blockchain Platform.

Per chiamare il codice concatenato, è necessario solo il ruolo REST_CLIENT. Per distribuire o aggiornare il codice concatenato, all'utente di Identity Cloud Service deve essere assegnato anche il ruolo ADMIN.

Una volta completata la distribuzione del codice concatenato in Oracle Blockchain Platform remoto, nel log verrà indicato che si sono verificati gli eventi riportati di seguito.
  • Recupero dei dettagli di Oracle Blockchain Platform riuscito.
  • Recupero della lista di peer riuscito.
  • Il progetto chaincode è stato installato correttamente.
  • Approvazione e commit del progetto codice concatenato riusciti.
  • Distribuzione del codice concatenato su ciascun peer e canale riuscita.

In un ambiente con più organizzazioni, per distribuire nuovamente il codice concatenato sullo stesso canale tramite un'istanza partecipante, utilizzare la console per distribuire il codice concatenato.

Aggiornamento del progetto Chaincode

L'aggiornamento del codice concatenato viene gestito automaticamente da Blockchain App Builder. Dopo aver apportato modifiche al codice concatenato, chiamare di nuovo il comando ochain deploy, che aggiornerà automaticamente il progetto. Quando si esegue di nuovo il comando ochain deploy, specificare un array vuoto per il parametro adminList oppure utilizzare il parametro adminList per aggiungere amministratori di token. Se non si è il primo programma di distribuzione, è necessario fornire un array vuoto per il parametro adminList.

Se l'aggiornamento riesce, il log mostrerà che si sono verificati i seguenti eventi:
  • Recupero dei dettagli di Oracle Blockchain Platform riuscito.
  • Recupero della lista di peer riuscito.
  • È stato effettuato un controllo per determinare se il progetto con codice concatenato è già installato e, in tal caso, la versione è stata recuperata.
  • Aggiornamento della versione del codice concatenato riuscito (ad esempio, dalla versione 1.0 alla 2.0).

In un ambiente con più organizzazioni, per aggiornare il codice concatenato, utilizzare la console e approvare manualmente il codice concatenato dai partecipanti.

Inserisci in package il tuo progetto Chaincode per la distribuzione manuale in Oracle Blockchain Platform

Puoi raggruppare i tuoi progetti di codice concatenato per la distribuzione manuale in Oracle Blockchain Platform Cloud o Enterprise Edition.

Uso: ochain package

Il comando package crea un file di archivio che contiene solo i file di build e distribuzione. Le cartelle binary, libs, node_modules e test del progetto codice concatenato non sono incluse. Questo file di archivio può essere caricato manualmente in Oracle Blockchain Platform per la distribuzione.

A causa delle modifiche apportate ai prerequisiti software, quando si esegue il comando ochain package per il codice concatenato TypeScript, viene richiesta la data di provisioning dell'istanza di Oracle Blockchain Platform per la quale si desidera creare il package. Il codice concatenato TypeScript creato in Blockchain App Builder non è compatibile con le versioni precedenti di Oracle Blockchain Platform senza modifiche all'infrastruttura sottostante. Blockchain App Builder distribuisce l'infrastruttura del codice concatenato in base alla selezione effettuata.

ochain package -h 
Usage: package [options]
Package and archive an Ochain chaincode project 
Options :
    -h, --help             output command usage information
    -D, --debug            enable debug logging
    -p, --project <path>   Path to the Ochain chaincode project to be packaged. If not specified, it defaults to current directory.
    -o, --out <path>       Path to the generated chaincode archive file. If not specified, it defaults to current directory.
About:
This CLI command packages and archives an existing chaincode project 
Examples:
$> ochain package --project <Path to the Ochain chaicode project> —out <Path to the generated chaincode archive file>

Una volta completato correttamente il comando, viene restituita la posizione del pacchetto.

Questo comando utilizza due argomenti facoltativi:
  • --project

    Questa opzione definisce la posizione del progetto del codice concatenato di Blockchain App Builder da raggruppare. Se non specificato, per impostazione predefinita viene utilizzata la directory corrente.

  • --out

    Questa opzione può essere utilizzata per fornire il percorso di output del file di archivio generato. Se non viene specificata, le impostazioni predefinite saranno la directory corrente.

Esempio:
ochain package -p /Blockchain/DevTools/bp1/CC -o /Blockchain/DevTools/bp1/output

"Your chaincode project has been packaged at /Blockchain/DevTools/bp1/output/CC.zip"