Distribuisci il tuo codice concatenato utilizzando l'interfaccia CLI

Una volta creato il progetto con codice concatenato, puoi distribuirlo localmente sulla rete Hyperledger Fabric generata automaticamente o in remoto su Oracle Blockchain Platform Cloud o Enterprise Edition. È inoltre possibile creare package del progetto con codice concatenato per la distribuzione manuale in Oracle Blockchain Platform.

Distribuisci il tuo codice concatenato su una rete Hyperledger Fabric locale

Dopo aver creato il progetto chaincode, è 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 ochain run di Blockchain App Builder avvia la rete Hyperledger Fabric, altri servizi e installa e distribuisce automaticamente il codice concatenato.

my-mac:GOProject myname$ 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   

Progetti token

Per i progetti con codice concatenato di token, è necessario specificare una lista di amministratori con il comando ochain run:
ochain run <adminList array>
L'array adminList è un array di informazioni che specifica gli amministratori di token. L'array adminList è un parametro obbligatorio quando si distribuisce per la prima volta un progetto codice concatenato di token. 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 programmi di distribuzione che non sono il primo programma di distribuzione 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 si riferiscono ai token non fungibili.

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

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

Per visualizzare i log di debug, è possibile passare l'opzione --debug al comando. In Windows, utilizzare 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 riportati di seguito mostrano 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

È possibile che si verifichino i seguenti problemi durante l'esecuzione del progetto con codice concatenato su una rete locale.

Autorizzazioni Go mancanti
Durante l'installazione del progetto Go chaincode nella rete locale, potrebbe essere visualizzato un errore simile al seguente:
My-Mac:GoProj myname$ ochain run
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 delle autorizzazioni per Go. Questo errore è stato visto solo in Mac OS. Si tratta di un problema noto:
Soluzione: modificare le autorizzazioni del proprio $GOROOT e riprovare ochain run:
sudo chmod -R 777 /usr/local/go
Errore di distribuzione
A causa di un errore di distribuzione, una distribuzione danneggiata, un contenitore peer Docker pieno o il peer Docker è stato interrotto nella rete locale, potrebbe verificarsi un errore simile al 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 non in grado di riavviarsi correttamente.
Soluzione: provare di nuovo il comando ochain run, ma con l'opzione -b. Questa opzione ricostruisce automaticamente il runtime.
ochain run -b
Ricreazione dell'ambiente richiesta
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

Distribuisci il tuo codice concatenato su una rete Oracle Blockchain Platform remota

Dopo aver distribuito e testato il progetto con codice concatenato su una rete locale per assicurarsi che funzioni secondo la progettazione, è possibile distribuirlo in Oracle Blockchain Platform.

Distribuisci il codice concatenato

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

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

my-mac:TSProject myname$ 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) URL of the remote OBP instance. Example: https://<blockchain-instance-url>:7443/

Examples:
$> ochain deploy -u <username> -s <password> -r <url of the remote OBP 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 sugli utenti e i ruoli, vedere Impostazione di utenti e ruoli applicazione.

Per richiamare il codice concatenato, è necessario solo il ruolo REST_CLIENT. Per distribuire o aggiornare il codice concatenato, all'utente IDCS deve essere assegnato anche il ruolo ADMIN.

Dopo la distribuzione del codice concatenato nella Oracle Blockchain Platform remota, il log mostrerà che si sono verificati i seguenti eventi:
  • Recupero dei dettagli di Oracle Blockchain Platform riuscito.
  • Recupero della lista di pari livello riuscito.
  • Installazione del progetto codice concatenato riuscita.
  • Approvazione e commit del progetto con codice concatenato riusciti.
  • Distribuzione del codice concatenato su ogni peer e canale riuscita.

In un ambiente con più organizzazioni, per ridistribuire 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 le modifiche al codice concatenato, richiamare nuovamente 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, nel log verranno visualizzati i seguenti eventi:
  • Recupero dei dettagli di Oracle Blockchain Platform riuscito.
  • Recupero della lista di pari livello riuscito.
  • È stato effettuato un controllo per determinare se il progetto codice concatenato è già installato e, in caso affermativo, la versione è stata recuperata.
  • La versione del codice concatenato è stata aggiornata (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.

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

È possibile creare package per i progetti con codice concatenato per la distribuzione manuale in Oracle Blockchain Platform Cloud o Enterprise Edition.

Sintassi: ochain package

Il comando package crea un file di archivio che contiene solo i file di build e di 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 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 di base. Blockchain App Builder esegue il package dell'infrastruttura del codice concatenato in base alla selezione effettuata.

my-mac:~ myname$ 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>

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

Questo comando accetta due argomenti facoltativi:
  • --project

    Questa opzione definisce la posizione del progetto codice concatenato di Blockchain App Builder da creare nel package. Se non viene 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 questa operazione non viene specificata, verrà usata automaticamente 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"