Hyperledger Fabric - Contrato de instalación de Maven

Antes de implementar el código de cadena Java, asegúrese de que el entorno Java y Maven se hayan instalado en la máquina

Tutorial de referencia: https://www.bilibili.com/video/BV1bu41117Lx

1 paquete de contrato inteligente

1.1 Descargue el código fuente del contrato hyperledger-fabric-contract-java-demo en la máquina local

cd ~fabric-samples/chaincode/
git clone https://gitee.com/kernelHP/hyperledger-fabric-contract-java-demo.git

1.2 Volver al directorio donde se encuentra test-network

Regrese al directorio donde se encuentra la red de prueba para que el código de cadena se pueda empaquetar con otros componentes de la red.

cd ../../test-network

1.3 Agregue los archivos binarios en el directorio bin a la ruta CLI

Los paquetes Chaincode en el formato deseado se pueden crear usando la CLI del mismo nivel, agregue estos archivos binarios a su ruta CLI usando los siguientes comandos.

export PATH=${PWD}/../bin:$PATH

1.4 Configure FABRIC_CFG_PATH para que apunte al archivo core.yaml en fabric-samples

export FABRIC_CFG_PATH=$PWD/../config/

1.5 Crear paquete de código de cadena

peer lifecycle chaincode package hyperledger-fabric-contract-java-demo.tar.gz --path ../chaincode/hyperledger-fabric-contract-java-demo/ --lang java --label hyperledger-fabric-contract-java-demo_1

Explicación del comando: este comando creará un paquete llamado hyperledger-fabric-contract-java-demo.tar.gz en el directorio actual. La etiqueta –lang se usa para especificar el idioma del código de cadena, la etiqueta –path proporciona la ubicación del código de contrato inteligente, la ruta debe ser una ruta estándar o una ruta relativa al directorio de trabajo actual, la etiqueta –label se usa para especificar una etiqueta de código de cadena, que estará en Identificar el código de cadena después de instalarlo. Se recomienda que sus etiquetas contengan el nombre y la versión del código de cadena.

Ahora que hemos creado el paquete chaincode, podemos instalar el chaincode en los nodos pares de la red de prueba.

2 Instale el paquete de código de cadena

Después de empaquetar el contrato inteligente hyperledger-fabric-contract-java-demo, podemos instalar el código de cadena en el nodo par. Chaincode debe instalarse en cada par que apruebe transacciones. Debido a que estableceremos la política de respaldo para requerir respaldos tanto de Org1 como de Org2, debemos instalar el código de cadena en los nodos pares de ambas organizaciones: peer0.org1.example.com y peer0.org2.example.com

2.1 Código de cadena de instalación de nodo par de Org1

Configure las siguientes variables de entorno para operar la CLI del mismo nivel como administrador de Org1.

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

Utilice el comando de instalación del código de cadena del ciclo de vida del par para instalar el código de cadena en el nodo del mismo nivel.
Es decir, el contrato de instalación.

peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz

Ver la siguiente información indica que el código de cadena se instaló correctamente
[La transferencia de imagen de cadena externa falló, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-pj5QCX1Y-1652845797158)(https ://doc.3hea.com/uploads/fabric/images/m_b49ae7c94703495123e7f9eedeec9036_r.png)]

2.2 Código de cadena de instalación de nodos pares de Org2

Configure las siguientes variables de entorno para operar la CLI del mismo nivel como administrador de Org2.

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051

Utilice el comando de instalación del código de cadena del ciclo de vida del par para instalar el código de cadena en el nodo del mismo nivel.

peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz
Nota: Al instalar el código de cadena, el código de cadena es construido por el nodo par. Si hay un problema con el código del contrato inteligente, el comando de instalación devolverá todos los errores de compilación del código de cadena. Debido a que la instalación de java chaincode debe pasar por el proceso de creación y descarga de paquetes dependientes de Maven, este proceso puede ser lento, por lo que el comando de instalación puede devolver un error de tiempo de espera:. Pero, de hecho, la tarea de compilación aún se está ejecutando en el contenedor acoplable del código de cadena en este momento y no se ha completado. Cuando la compilación sea exitosa, el paquete chaincode se instalará correctamente.

[Error en la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-Xk66SKsU-1652845797159) (https://doc.3hea.com/uploads/) tejido/images/m_8c4f69f70f0226c334b86555c861d965_r.png)]

3 Definido por código de cadena

Después de instalar el paquete de código de cadena, debe pasar la definición de código de cadena de la organización. Esta definición incluye parámetros importantes para la gestión del código de cadena, como el nombre, la versión y la política de aprobación del código de cadena.

Si la organización tiene un código de cadena instalado en sus nodos homólogos, debe incluir el ID del paquete en la definición de código de cadena aprobada por su organización. El ID del paquete se usa para asociar el código de cadena instalado en el par con la definición de código de cadena pasada y permite que las organizaciones usen el código de cadena para respaldar transacciones.

3.1 Después de instalar los nodos Org1 y Org1, use el siguiente comando para consultar el ID del paquete

peer lifecycle chaincode queryinstalled

El ID del paquete es una combinación de la etiqueta de código de cadena y el hash del binario de código de cadena. Cada nodo par generará el mismo ID de paquete. Debería ver un resultado similar al siguiente:

Installed chaincodes on peer:
Package ID: hyperledger-fabric-contract-java-demo_1:762e0fe3dbeee0f7b08fb6200adeb4a3a20f649a00f168c0b3c2257e53b6e506, Label: hyperledger-fabric-contract-java-demo_1

inserte la descripción de la imagen aquí

Usaremos el ID del paquete cuando revisemos el código de cadena, por lo tanto, guarde el ID del paquete como una variable de entorno. Pegue el ID del paquete devuelto en el siguiente comando.


NOTA: Los ID de paquete son diferentes para todos los usuarios, por lo que este paso debe realizarse con el ID de paquete devuelto desde la ventana de comandos en el paso anterior. ¡En lugar de copiar el comando directamente! ! !
Copie y pegue el contenido en el cuadro rojo de la imagen de arriba en el comando a continuación
exportar CC_PACKAGE_ID=El contenido acaba de copiar

export CC_PACKAGE_ID=hyperledger-fabric-contract-java-demo_1:f61f9e5b97d2034aa864bccd148dac36d0583c13176dfd267af1c8f34e7c03ae

3.2 Org2 definido por código de cadena

Debido a que la variable de entorno se configuró en la CLI del mismo nivel para operar como un administrador de Orig2, podemos pasar la definición de código de cadena de hyperledger-fabric-contract-java-demo al nivel de organización de Org2. Utilice el comando de cadena de ciclo de vida de pares applyformyorg para pasar la definición de código de cadena:

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

inserte la descripción de la imagen aquí

3.2 Org1 definido por código de cadena

Configure las siguientes variables de entorno para que se ejecuten como administrador de Org1:

export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051

A través de la definición de código de cadena con el comando de ciclo de vida del par chaincode applyformyorg

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

4 Confirme la definición del código de cadena en el canal

Utilice el comando checkcommitreadiness del código de cadena del ciclo de vida del par para verificar que los miembros del canal hayan aprobado la misma definición de código de cadena:

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

Este comando generará un mapa JSON que muestra si los miembros del canal aprobaron los parámetros especificados en el comando checkcommitreadiness:

{
	"approvals": {
		"Org1MSP": true,
		"Org2MSP": true
	}
}

inserte la descripción de la imagen aquí

Dado que ambas organizaciones que son miembros del canal acordaron los mismos parámetros, la definición del código de cadena está lista para ser comprometida con el canal. Puede confirmar una definición de código de cadena en un canal mediante el comando de confirmación de código de cadena del ciclo de vida del par. El comando de confirmación también debe ser confirmado por un administrador de la organización.
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

El comando querycommitted del código de cadena del ciclo de vida del par se puede usar para confirmar que la definición del código de cadena se ha confirmado en el canal.

peer lifecycle chaincode querycommitted --channelID mychannel --name hyperledger-fabric-contract-java-demo --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

Si el código de cadena se envió con éxito al canal, el comando querycommitted devolverá el orden y la versión de la definición de código de cadena:

Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true]

inserte la descripción de la imagen aquí

5 código de cadena de llamada

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java-demo --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"createCat","Args":["cat-0" , "tom" ,  "3" , "蓝色" , "大懒猫"]}'

peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java-demo --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"updateCat","Args":["cat-0" , "tom" ,  "3" , "白色" , "超级大懒猫"]}'

peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java-demo --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"deleteCat","Args":["cat-0"]}'

peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'

Vea el mensaje de invocación de código de cadena exitosa.resultado: estado: 200 para probar que la invocación de código de cadena es exitosa:

[Error en la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-kzvuevTP-1652845797159) (https://doc.3hea.com/uploads/) tela/imágenes/m_431af27faa97dfa181e7c2c359a0b5bc_r.png)]

6. Errores comunes

No se puede ejecutar peer porque no se puede iniciar crypto, la ruta especificada "/root/fabric-samples/chaincode/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp" no existe o no se puede acceder a ella: stat /root/fabric-samples/chaincode/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp: no existe tal archivo o directorio

Nota: primero debe ingresar al directorio fabric-samples/test-network
antes de configurar las variables de entorno e instalar el código de cadena
; de lo contrario, se informará el siguiente error al instalar el código de cadena
inserte la descripción de la imagen aquí

no se pudo leer el paquete de código de cadena en 'hyperledger-fabric-contract-java-demo.tar.gz': abra hyperledger-fabric-contract-java-demo.tar.gz: no existe tal archivo o directorio

También se debe a que no ingresó al directorio /test-network al empaquetar el paquete de compresión del contrato.

La instalación de chaincode falló con el estado: 500 - error en la simulación: no se pudo ejecutar la transacción

Cuando se completa el comando de cadena de ciclo de vida del par instalar hyperledger-fabric-contract-java-demo.tar.gz, es posible que se informe este error y se agote el tiempo de espera, pero no se preocupe, porque necesita compilar el proyecto maven y descargar el requerido paquete dependiente,

Abra una nueva ventana e ingrese docker ps para ver todos los contenedores

docker ps

inserte la descripción de la imagen aquí
Ver los últimos registros de contenedores

docker logs -f 09a644e8470d

inserte la descripción de la imagen aquí
El proyecto ha sido construido.
inserte la descripción de la imagen aquí
Ejecute el comando install chaincode nuevamente

peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz

Aparece el código de cadena ya instalado correctamente
, lo que indica que el código de cadena se ha instalado correctamente
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_44154912/article/details/124839427
Recomendado
Clasificación