Distribuisci il codice concatenato utilizzando Visual Studio Code

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.

Distribuire il codice concatenato in una rete Hyperledger Fabric locale

Dopo aver creato il progetto con codice concatenato, è possibile testarlo in una rete di base Hyperledger Fabric locale.

Quando si installa l'estensione Blockchain App Builder per VS Code, viene creata automaticamente una rete Hyperledger Fabric con un singolo canale. Verrà visualizzato come Local Environment nel riquadro Ambienti. Impossibile eliminare o modificare questo ambiente. È possibile distribuirvi codici concatenati e ricrearlo se non funziona più correttamente.

La distribuzione del codice concatenato di Blockchain App Builder avvia la rete di base Hyperledger Fabric, altri servizi e installa e distribuisce automaticamente il codice concatenato.

  1. Nel riquadro Dettagli codice di connessione selezionare Distribuisci.
  2. Nella distribuzione guidata:
    • Assicurarsi che sia selezionato il nome del codice concatenato corretto.
    • Selezionare l'ambiente di destinazione. Per la distribuzione locale, scegliere Ambiente locale.
    • Selezionare il canale in cui eseguire la distribuzione. Un canale denominato "mychannel" viene creato per impostazione predefinita con l'installazione dell'estensione e può essere utilizzato per i test.
    • Facoltativamente, immettere i parametri iniziali che potrebbero essere obbligatori.
    • Per i progetti token, la prima volta che si distribuisce è necessario immettere una lista di amministratori token come parametro. La lista è un array di informazioni {user_id, org_id} che specifica gli amministratori di token. Per la rete Hyperledger Fabric locale, utilizzare il valore Org1MSP per il campo org_id. Per i codici concatenati NFT, le chiavi per il parametro adminList sono userId e orgId per TypeScript e UserId e OrgId per Go. Dopo la prima distribuzione, è possibile fornire 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. A tale scopo, aprire l'elenco dei parametri Init nel riquadro di distribuzione, quindi fare clic sul pulsante con il segno meno (-) accanto al parametro adminList, che selezionerà un array vuoto.
  3. Fare clic su Distribuisci.

Al termine della distribuzione del codice concatenato, la console Output verificherà che sia stato installato e distribuito correttamente sul canale specificato.

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, nella console Output potrebbe essere visualizzato un errore simile al seguente:
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
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 file $GOROOT e riprovare a eseguire la distribuzione:
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 pieno o di un peer Docker in fase di interruzione 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: ricreare il runtime selezionando l'ambiente locale nel riquadro Ambienti, facendo clic con il pulsante destro del mouse e selezionando Ricrea ambiente locale. Tentativo di distribuire di nuovo.
Ricreazione dell'ambiente richiesta
È possibile che venga visualizzato un errore simile al 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
È necessario ricostruire l'ambiente locale. Nel riquadro Ambienti di App Builder, fare clic con il pulsante destro del mouse sull'ambiente locale e selezionare Ricrea ambiente locale.

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.

Creare una configurazione di connessione a un'istanza di Oracle Blockchain Platform

Per completare questo passo, è necessario disporre di un'istanza di Blockchain Platform attiva e in esecuzione.

  1. Nel riquadro Ambienti di Visual Studio Code fare clic sull'icona Crea ambiente.
  2. Nella procedura guidata Dettagli ambienti:
    • Immettere il nome dell'ambiente remoto.
    • Immettere una descrizione.
    • In URL remoto, immettere l'URL dell'istanza remota di Oracle Blockchain Platform.
    • 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 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. Per ulteriori informazioni sugli utenti e i ruoli, vedere Impostazione di utenti e ruoli applicazione.
  3. Fare clic su Crea per salvare l'ambiente. Il nome utente e la password vengono salvati temporaneamente nella sessione locale di Visual Studio Code. Se si chiude Visual Studio Code e si avvia una nuova sessione di Visual Studio Code, è necessario immettere di nuovo il nome utente e la password.

Distribuisci il codice concatenato

  1. Selezionare il progetto con codice concatenato che si desidera distribuire nel riquadro Codici di catena.
  2. Nel riquadro Dettagli codice di connessione selezionare Distribuisci.
  3. Nella distribuzione guidata, il nome del progetto con codice concatenato deve essere precompilato.
    • Selezionare l'ambiente di destinazione. Per la distribuzione remota, scegliere l'ambiente Oracle Blockchain Platform impostato in precedenza.
    • Immettere il nome del canale in cui si desidera eseguire la distribuzione.
    • È possibile impostare i parametri iniziali obbligatori.
  4. Fare clic su Distribuisci.
Dopo la distribuzione del codice concatenato nella Oracle Blockchain Platform remota, il log della console 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 modifiche al codice concatenato, rieseguire la distribuzione, che aggiornerà automaticamente il progetto. Quando si esegue il processo di aggiornamento, è possibile passare un array vuoto per il parametro adminList o 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. Per passare un array vuoto per il parametro adminList, aprire l'elenco dei parametri Init nel riquadro di distribuzione, quindi fare clic sul pulsante con il segno meno (-) accanto al parametro adminList, che selezionerà un array vuoto.

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.

La funzione Pacchetto 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.

  1. Selezionare il progetto con codice concatenato nel riquadro Codici di catena.
  2. Fare clic con il pulsante destro del mouse e selezionare Pacchetto.
  3. Selezionare una posizione in cui salvare il pacchetto, quindi fare clic su Seleziona cartella di output.

A causa delle modifiche ai prerequisiti software, quando si esegue la funzione 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.

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