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
ochain run
: ochain run <adminList 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
euser_id
. - Per tutti i token che utilizzano lo standard ERC-1155, i parametri sono
orgId
euserId
. - Per i token non fungibili che utilizzano lo standard ERC-721 e un progetto TypeScript, i parametri sono
orgId
euserId
. - Per i token non fungibili che utilizzano lo standard ERC-721 e un progetto Go, i parametri sono
OrgId
eUserId
.
Gli esempi seguenti sono per i token non fungibili.
adminList
per TypeScript in macOS e Linux:'[{"userId":"userid", "orgId":"OrgMSPId"}]'
adminList
per Go su macOS e Linux:'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
adminList
per TypeScript in Microsoft Windows:"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
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
- 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
- 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
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
.
- 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
.
- 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.
--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.
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"