Distribuire il codice concatenato utilizzando Visual Studio Code

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 eseguirne il test in una rete di base Hyperledger Fabric locale.

Quando si installa l'estensione Blockchain App Builder per Visual Studio Code, viene creata automaticamente una rete Hyperledger Fabric con un singolo canale. Viene elencato come Local Environment nel riquadro Ambienti. Non è possibile eliminare o modificare questo ambiente; è sufficiente distribuire i codici concatenati e ricrearli se non funziona correttamente.

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

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

  1. Nel riquadro Dettagli codice cat. selezionare Distribuisci.
  2. Nella procedura guidata di distribuzione:
    • 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 si desidera distribuire. Un canale denominato "mychannel" viene creato per impostazione predefinita quando l'estensione è installata e può essere utilizzato per il test.
    • Facoltativamente, immettere i parametri iniziali obbligatori.
    • Per i progetti token, la prima volta che si esegue la distribuzione è necessario immettere un elenco di amministratori di token come parametro. L'elenco è un array di informazioni {user_id, org_id} che specifica gli amministratori dei token. Per la rete locale Hyperledger Fabric 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 implementatori che non sono il primo implementatore 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 mostrerà che il codice concatenato è stato installato e distribuito correttamente sul canale specificato.

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 nella console Output:
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 di autorizzazioni per Go. Questo errore è stato visualizzato solo in Mac OS. Si tratta di un problema noto.
Soluzione: eseguire il comando seguente per modificare le autorizzazioni di $GOROOT, quindi provare a eseguire di nuovo 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 arrestato nella rete locale, è possibile che venga visualizzato 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: 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 obbligatoria
È possibile che venga visualizzato 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
È necessario ricreare 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.

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.

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

Per completare questo passo, è necessario disporre di un'istanza di Oracle 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 proxy REST immettere l'URL proxy REST 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 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. Per ulteriori informazioni su utenti e ruoli, vedere Impostazione di utenti e ruoli applicazione in Amministrazione di Oracle Blockchain Platform.
  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 tuo Chaincode

  1. Selezionare il progetto codice concatenato che si desidera distribuire nel riquadro Codici concatenati.
  2. Nel riquadro Dettagli codice cat. selezionare Distribuisci.
  3. Nella procedura guidata di distribuzione, il nome del progetto codice concatenato è già specificato.
    • 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 distribuire.
    • Facoltativamente, impostare eventuali parametri iniziali obbligatori.
  4. Fare clic su Distribuisci.
Dopo la distribuzione del codice concatenato nell'istanza remota di Oracle Blockchain Platform, nel log della console 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, quando si esegue di nuovo la distribuzione il progetto viene aggiornato automaticamente. Quando si esegue il processo di aggiornamento, è possibile passare 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. Per passare un array vuoto per il parametro adminList, aprire l'elenco dei parametri Init nel riquadro di distribuzione, quindi fare clic sul pulsante del segno meno (–) accanto al parametro adminList, che selezionerà un array vuoto.

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.

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

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

A causa delle modifiche apportate 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 sottostante. Blockchain App Builder distribuisce l'infrastruttura del codice concatenato in base alla selezione effettuata.

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