Esta documentación muestra varias formas de desplegar firefly-fabconnect:
-
Usar
fabconnect
y latest-network de Fabric
del repositorio fabric-samples.Este modo ejecuta una instancia de fabconnect usando un contenedor de docker gestionado por docker-compose.
-
Usar
fabconnect
ytest-network-nano-bash de Fabric
del repositorio fabric-samples.Este modo ejecuta una instancia de fabconnect compilada a partir del código fuente.
-
Usando
FireFly CLI
.El modo
FireFly CLI
ejecuta algunos supernodos en su máquina. El stack contiene una instancia de firefly-core, firefly-dataexchange-https, ipfs y firefly-sandbox.
👀 For English speaking visit README-EN.
- Usando fabconnect y la
test-network
de Fabric - Usando fabconnect y la
test-network-nano-bash
de Fabric - Usando firefly-cli
- Interactuando con el chaincode
asset-transfer-basic
- Documentación
- Solución de problemas
Este modo ejecuta una instancia de fabconnect usando un contenedor de docker gestionado por docker-compose.
NOTA: Este modo a sido solo probado en Ubuntu 20.04.
cd $HOME
Para obtener el script de instalación:
curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh && chmod +x install-fabric.sh
Ejecutar el script:
./install-fabric.sh -f 2.4.4 d b s
NOTA: Con esos parámetros se obtienen los contenedores
docker de Fabric 2.4.4
, se clona el repositoriofabric-samples
, y se descargan losbinarios
de Fabric.
Visitar este enlace para profundizar en las instrucciones de instalación de Fabric ...
cd fabric-samples/test-network
Ejecute el siguiente comando para iniciar la red, crear un canal con el nombre predeterminado de mychannel
y generar los artefactos criptográficos con Fabric CA:
./network.sh up createChannel -ca -c mychannel
Descarga este repositorio
git clone https://github.com/kmilodenisglez/fabconnect-testnet.git
NOTA: Este repositorio cuenta con un fichero docker-compose que inicia un contenedor de firefly-fabconnect. Esta configurado para montar el volumen de los artefactos criptograficos desde
$HOME/fabric-samples/test-network/organizations/
.
cd fabconnect
docker-compose up -d
Visita la url: http://direccion_ip:3000/api
En este modo se emplea una instancia del fabconnect que construimos a partir del código fuente.
NOTA: Este modo a sido probado en
Ubuntu
y enWindows 10 con WSL
. Se inicio la red con la configuracion minima, con dos orderer nodos (./orderer1.sh y ./orderer2.sh) y un único nodo par de Org1 (./peer1.sh).
👉🏾 Siga las instrucciones para iniciar la red e instalar el chaincode.
Una vez iniciada la red blockchain usando el repositorio test-network-nano-bash
se continúa con la descarga y compilación del fabconnect.
cd $HOME
Descargar el repositorio de fabconnect
git clone https://github.com/hyperledger/firefly-fabconnect.git
go mod vendor
go build -o fabconnect
chmod +x fabconnect && sudo cp fabconnect /usr/local/bin/
cd $HOME
Descarga este repositorio
git clone https://github.com/kmilodenisglez/fabconnect-testnet.git
Modifique en el archivo CCP fabconnect-testnet/runtime/blockchain/cpp_nanobash.yaml
el camino a los artefactos. Donde encuentres '/home/my_user/fabric-samples'
lo remplazas por el camino a la carpeta fabric-samples
.
Modifique en el archivo fabconnect-testnet/runtime/blockchain/fabconnect_nanobash.yaml
las rutas. Dondequiera que encuentre '/home/my_user/fabconnect-testnet', reemplácelo con la ruta a su
fabconnect-testnet`.
Antes de iniciar el fabconnect debemos configurar la identidad (signer) que se va emplear para establecer conexión con la red blockchain. El test-network-nano-bash
no levanta nodos de Fabric-CA, por lo que se tiene que usar la identidad admin
o user1
generada por el script generate_artifacts.sh
.
Abrimos en un explorador de fichero el camino donde se almacenan las credenciales. El camino está definido en el archivo CCP "cpp_nanobash.yaml"
, en la sección cliente.credentialStore
.
Para este ejemplo el fabric-samples/test-network-nano-bash
se encuentra en el home del usuario.
cd ~/fabric-samples/test-network-nano-bash/crypto-config/peerOrganizations/org1.example.com/users/
Copia el [email protected]
para el directorio raiz del /users
con el formato siguiente user + @ + MSPID + "-cert.pem"
:
cp [email protected]/msp/signcerts/[email protected] ./[email protected]
Copia el [email protected]
para el directorio raiz del /users
con el formato siguiente user + @ + MSPID + "-cert.pem"
:
cp [email protected]/msp/signcerts/[email protected] ./[email protected]
NOTA: Ese es el formato que usa el fabric-sdk-go para almacenar un usuario.
Copia y renombra la llave privada priv_sk
de cada usuario para el directorio /users/keystore/
:
Llave privada del admin:
mkdir -p ./keystore && cp [email protected]/msp/keystore/priv_sk ./keystore/admin_sk
Llave privada del user1:
mkdir -p ./keystore && cp [email protected]/msp/keystore/priv_sk ./keystore/user1_sk
La estructura debería quedar así:
my_user@208996:~/fabric-samples/test-network-nano-bash/crypto-config/peerOrganizations/org1.example.com/users$ ls -l
drwxr-xr-x 4 my_user my_user 4096 Jul 19 09:59 [email protected]
-rw-rw-r-- 1 my_user my_user 810 Jul 19 10:22 [email protected]
drwxrwxr-x 2 my_user my_user 4096 Jul 19 10:28 keystore
drwxr-xr-x 4 my_user my_user 4096 Jul 19 09:59 [email protected]
-rw-rw-r-- 1 my_user my_user 810 Jul 19 10:23 [email protected]
cd $HOME
Utilice el siguiente comando para iniciar el conector:
fabconnect -f "/home/my_user/fabconnect-testnet/runtime/blockchain/fabconnect_nanobash.yaml"
Si se ejecuta bien, la terminal debe mostrar la siguiente salida:
[2022-07-18T21:41:57.125-04:00] INFO Starting REST gateway
[2022-07-18T21:41:57.376-04:00] INFO HTTP server listening on 0.0.0.0:3000
Sigue los pasos del README oficial para la descarga, y instalación del cli.
El comando ff init
crea un nuevo stack y le pide algunos datos, como la cantidad de miembros (organizaciones) que desea en su stack, el nombre de la(s) organización(es) y del(os) nodo(s)-par.
ff init -b fabric --prompt-names stack-fabric
Una vez terminada la ejecución del comando debería ver una salida similar a esta:
initializing new FireFly stack...
number of members: 1
name for org 0: org1
name for node 0: peer1
Stack 'stack-fabric' created!
To start your new stack run:
ff start stack-fabric
NOTA: Para este ejemplo se creó el stack
stack-fabric
con un único miembro que nombrado"org1"
y un nodo nombrado"peer1"
.
NOTA: Los ficheros de configuración de cada stack se encuentran en
~/.firefly/stacks/
-
Si opera con la
test-network
puede instalar el chaincodeasset-transfer-basic
siguiendo los pasos: Instalar asset-transfer-basic en test-network -
Si opera con la
test-network-nano-bash
puede instalar el chaincodeasset-transfer-basic
siguiendo los pasos: Instalar asset-transfer-basic en test-network-nano-bash
NOTA: Para interactuar con los endpoint de fabconnect puede acceder en su navegador al enlace http://direccion_ip:3000/api.
Invoca el endpoint POST /transactions, con los datos siguientes:
{
"headers": {
"type": "SendTransaction",
"signer": "admin",
"channel": "mychannel",
"chaincode": "basic"
},
"func": "InitLedger",
"args": [],
"init": false
}
Como resultado el cliente debe responder con un JSON similar a este:
{
"headers": {
"id": "cee5a0b8-e207-49c9-76a2-ca0d106fa139",
"type": "TransactionSuccess",
"timeReceived": "2022-07-18T06:00:37.323214822Z",
"timeElapsed": 2.217562622,
"requestOffset": "",
"requestId": ""
},
"blockNumber": 6,
"signerMSP": "Org1MSP",
"signer": "admin",
"transactionID": "44574737473df89f0183827f10ede4b5e99563ba44df6b7d48a49763d9179228",
"status": "VALID"
}
Invoca el endpoint POST /query, con los datos siguientes:
{
"headers": {
"signer": "admin",
"channel": "mychannel",
"chaincode": "basic"
},
"func": "GetAllAssets",
"args": [],
"strongread": true
}
Como resultado el cliente debe responder con un JSON similar a este:
{
"headers": {
"channel": "mychannel",
"timeReceived": "",
"timeElapsed": 0,
"requestOffset": "",
"requestId": ""
},
"result": [
{
"AppraisedValue": 300,
"Color": "blue",
"ID": "asset1",
"Owner": "Tomoko",
"Size": 5
},
{
"AppraisedValue": 400,
"Color": "red",
"ID": "asset2",
"Owner": "Brad",
"Size": 5
},
...
]
}
Si usa firefly-cli
puede instalar e interactuar con el chaincode asset-transfer-basic
siguiendo los pasos: Trabajando el asset-transfer-basic con firefly-cli
Si el fabconnect devolvió algún error de tipo TRANSIENT_FAILURE
, una posible razón es que debe agregar al hosts los nombres de dominios "peer0.org1.example.com", "orderer.example.com", y "org1.example.com".
Ejecutar la instrucción siguiente:
echo '127.0.0.1 peer0.org1.example.com orderer.example.com org1.example.com' | sudo tee -a /etc/hosts