Solución de implementación de WeCross

Solución de implementación de WeCross

Requisitos medioambientales

hardware

WeCross se encarga de administrar múltiples Stubs y comunicarse con múltiples cadenas. Al mismo tiempo, sirve como Web Server para brindar servicios de llamadas RPC. Para garantizar la estabilidad del servicio, intente utilizar la configuración recomendada.

configuración configuración mínima Configuración recomendada
UPC 1,5 GHz 2,4 GHz
Memoria 4 GB 8GB
centro 4 nucleares 8 núcleos
banda ancha 2Mb 10 MB

plataformas compatibles

  • Ubuntu 16.04 y superior
  • CentOS 7.2 y superior
  • macOS 10.14 y superior

dependencia de software

Como proyecto Java, WeCross necesita instalar el entorno Java, que incluye:

  • JDK1.8.0_251 o superior

Versiones de JDK probadas actualmente: OracleJDK 1.8.0_251, OracleJDK 1.8.0_271, OracleJDK 14, OracleJDK 15, OpenJDK 1.8.0_282, OpenJDK 14, OpenJDK 15

  • Gradle 5.0 y superior
  • MySQL 5.6 y superior

WeCross proporciona una variedad de scripts para ayudar a los usuarios a experimentar rápidamente, estos scripts dependen de openssl, curl, expect, use las siguientes instrucciones para instalar.

# Ubuntu
sudo apt-get install -y openssl curl expect tree fontconfig

# CentOS
sudo yum install -y openssl curl expect tree

# macOS
brew install openssl curl expect tree md5sha1sum

proceso de despliegue

El tutorial manual de redes ~/wecross-networks/toma el directorio como ejemplo:

# 创建手动组网的操作目录
mkdir -p ~/wecross-networks && cd ~/wecross-networks

Implementación de componentes básicos

—Implemente los componentes básicos de WeCross, incluido el enrutamiento entre cadenas, los servicios de cuentas, las consolas y las consolas de administración web

Introduzca el directorio de operaciones:

cd ~/wecross-networks

Descargar WeCross

Descargue WeCross, use las herramientas de WeCross para generar una ruta de cadena cruzada e inicie la ruta de cadena cruzada.

WeCross incluye una herramienta para generar rutas de enlaces cruzados. Ejecute el siguiente comando para descargar (se proporcionan tres métodos de descarga y puede elegir el método apropiado para descargar de acuerdo con el entorno de red), y el programa se descarga a ~/wecross-networks/WeCross/.

方式1:命令下载

GitHub下载方式:

bash <(curl -sL https://github.com/WeBankBlockchain/WeCross/releases/download/resources/download_wecross.sh)
Gitee下载方式:

bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_wecross.sh)

Implementar enrutadores de cadena cruzada

Este ejemplo construirá dos rutas de cadena cruzada. Primero cree un archivo de configuración, separe ipfilela información de enrutamiento de dos cadenas cruzadas ( ) que deben construirse por líneas y guárdelas en el archivo.ip:rpc_port:p2p_port

Nota : asegúrese 8250de que 25500el puerto de la máquina no esté ocupado.

cd ~/wecross-networks
vim ipfile

# 在文件中键入以下内容
127.0.0.1:8250:25500

Después de generar el archivo ipfile, use el script build_wecross.sh para generar dos rutas de enlace cruzado.

bash ./WeCross/build_wecross.sh -n payment -o routers-payment -f ipfile
.. note::
    - -n 指定跨链分区标识符(zone id),跨链分区通过zone id进行区分,可以理解为业务名称。(调用链码时需要,建议双方提前沟通)
    - -o 指定输出的目录,并在该目录下生成一个跨链路由。
    - -f 指定需要生成的WeCross跨链路由的列表,包括ip地址,rpc端口,p2p端口,生成后的router已完成互联配置。
    
# 成功输出如下信息
[INFO] Create routers-payment/127.0.0.1-8250-25500 successfully
[INFO] All completed. WeCross routers are generated in: routers-payment/

Se generan dos rutas de cadena cruzada en el directorio de pago de enrutadores.

tree routers-payment/ -L 1
routers-payment/
├── 127.0.0.1-8250-25500
└── cert

El contenido del directorio de enrutamiento de enlaces cruzados generado es el siguiente, tomando como 127.0.0.1-8250-25500ejemplo.

# 已屏蔽lib和pages目录,该目录存放所有依赖的jar包
tree routers-payment/127.0.0.1-8250-25500/
routers-payment/127.0.0.1-8250-25500/
├── add_chain.sh      # 区块链配置文件创建脚本
├── apps
│   └── WeCross.jar   # WeCross路由jar包
├── build_wecross.sh
├── conf              # 配置文件目录
│   ├── accounts      # 账户配置目录
│   ├── application.properties 
│   ├── chains        # 区块链配置目录,要接入不同的链,在此目录下进行配置
│   ├── log4j2.xml    
│   ├── ca.crt        # 根证书
│   ├── ssl.crt       # 跨链路由证书
│   ├── ssl.key       # 跨链路由私钥
│   ├── node.nodeid   # 跨链路由nodeid
│   └── wecross.toml  # WeCross Router主配置文件
├── create_cert.sh    # 证书生成脚本
├── download_wecross.sh
├── pages             # 网页管理平台页面文件
├── plugin            # 插件目录,接入相应类型链的插件
│   ├── bcos-stub-gm.jar
│   ├── bcos-stub.jar
│   └── fabric-stub.jar
├── start.sh          # 启动脚本
└── stop.sh           # 停止脚本

Implementar servicio de cuenta

  • descargar

~~ Durante el proceso de ejecución, se debe ingresar la configuración de la base de datos correspondiente

这一步填写的数据库配置需要与现存account_manager方沟通!!!!!!!!~

cd ~/wecross-networks
bash <(curl -sL https://github.com/WeBankBlockchain/WeCross/releases/download/resources/download_account_manager.sh)

# 若出现长时间下载WeCross-Account-Manager包失败,请尝试以下命令重新下载:
bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_account_manager.sh)
  • copia del certificado
cd ~/wecross-networks/WeCross-Account-Manager/
cp ~/wecross-networks/routers-payment/cert/sdk/* conf/
  • generar clave privada
bash create_rsa_keypair.sh -d conf/
  • configuración
cp conf/application-sample.toml conf/application.toml
vim conf/application.toml

El contenido a configurar incluye:

admin: Configure la cuenta de administrador, que puede ser predeterminada aquí. La cuenta de administrador en el enrutador debe corresponder a esto, y se usa para iniciar sesión en el servicio de cuenta

db: Configure su propia contraseña de cuenta de base de datos

[service]
    address = '0.0.0.0'
    port = 8340
    sslKey = 'classpath:ssl.key'
    sslCert = 'classpath:ssl.crt'
    caCert = 'classpath:ca.crt'
    sslOn = true

[admin] 
    # admin账户配置,第一次启动时写入db,之后作为启动校验字段
    name = 'org1-admin' # admin账户名
    password = '123456' # 密码

[auth]
    # for issuring token
    name = 'org1'
    expires = 18000 # 5 h
    noActiveExpires = 600 # 10 min

[db]
    # for connect database
    url = 'jdbc:mysql://localhost:3306/wecross_account_manager'
    username = 'root' # 配置数据库账户
    password = '123456' # 配置数据库密码,不支接受空密码
[ext]
    # for image auth code, allow image auth token empty
    allowImageAuthCodeEmpty = true
  • puesta en marcha
bash start.sh

Inicie el enrutador de cadena cruzada

Modificar configuración Modificar configuración de cadena cruzada wecross.toml

# 修改跨链配置
vi  /root/wecross-networks/routers-payment/127.0.0.1-8250-25500/conf/wecross.toml

El contenido a configurar incluye

peers:IP de la lista de enrutadores WeCross que deben conectarse entre sí:Puerto

[common]
    zone = 'payment'    #字符串;跨链分区标识符;通常一种跨链业务/应用为一个跨链分区
    visible = true
    enableAccessControl = false

[chains]
    path = 'classpath:chains'

[rpc] # rpc ip & port
    address = '127.0.0.1'
    port = 8250
    caCert = 'classpath:ca.crt'
    sslCert = 'classpath:ssl.crt'
    sslKey = 'classpath:ssl.key'
    sslSwitch = 2  # disable ssl:2, SSL without client auth:1 , SSL with client and server auth: 0
    webRoot = 'classpath:pages'
    mimeTypesFile = 'classpath:conf/mime.types' # set the content-types of a file

[p2p]
    listenIP = '0.0.0.0'
    listenPort = 25500 
    caCert = 'classpath:ca.crt'
    sslCert = 'classpath:ssl.crt'
    sslKey = 'classpath:ssl.key'
    peers = ['127.0.0.1:25500']   #  peer列表;需要互相连接的WeCross Router列表

[account-manager]
    server =  '127.0.0.1:8340'      #
    admin = 'org1-admin'
    password = '123456'
    sslKey = 'classpath:ssl.key'
    sslCert = 'classpath:ssl.crt'
    caCert = 'classpath:ca.crt'

#[[htlc]]
#    selfPath = 'payment.bcos.htlc'
#    account1 = 'bcos_default_account'
#    counterpartyPath = 'payment.fabric.htlc'
#    account2 = 'fabric_default_account'

comenzar a enrutar

# 启动 router-8250
cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500/
bash start.sh

El inicio es exitoso y el resultado es el siguiente:

WeCross booting up .........
WeCross start successfully

Si falla el inicio, verifique 8250, 25500si el puerto está ocupado.

netstat -napl | grep 8250
netstat -napl | grep 25500

consola de implementación

WeCross proporciona una consola para facilitar el desarrollo y la depuración entre cadenas para los usuarios. La consola se puede construir a través de scripts build_console.sh.

  • descargar

Ejecute el siguiente comando para descargar (se proporcionan tres métodos de descarga, puede elegir el método apropiado para descargar de acuerdo con el entorno de red) y, una vez completada la descarga, se generará un directorio en el directorio actual WeCross-Console.

下载WeCross控制台
同样提供三种方式,根据网络环境选择合适的方式进行下载。

方式1:命令下载

GitHub下载方式:

bash <(curl -sL https://github.com/WeBankBlockchain/WeCross/releases/download/resources/download_console.sh)
Gitee下载方式:

bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_console.sh)
  • configuración
cd ~/wecross-networks/WeCross-Console

# 拷贝连接router所需的TLS证书,从生成的routers-payment/cert/sdk目录下拷贝
cp ~/wecross-networks/routers-payment/cert/sdk/* conf/ 

# 拷贝配置文件,并配置跨链路由RPC服务地址以及端口。此处采用默认配置,默认连接至本地8250端口。
cp conf/application-sample.toml conf/application.toml
.. important::
    - 若搭建WeCross的IP和端口未使用默认配置,需自行更改WeCross-Console/conf/application.toml
  • puesta en marcha
bash start.sh

Si el inicio es exitoso, se generará la siguiente información, a través de la cual helppuede ver la ayuda de la consola.

=================================================================================
Welcome to WeCross console(v1.1.0)!
Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
=================================================================================
  • función de prueba
# 正常进入,可先退出控制台,等待后续配置
[WeCross]> quit

Entrada de blockchain y configuración de cuenta

---- Después de completar la implementación de los componentes básicos de WeCross, el siguiente paso es acceder a la cadena de bloques, configurar cuentas de cadena cruzada y construir una red de cadena cruzada real.

Acceso a la cadena de bloques

Acceso a Hyperledger Fabric : acceso al enrutador de cadena cruzadarouter-8250

Configurar cuentas integradas

La cuenta integrada que se usa para interactuar con la cadena Fabric debe configurarse en el enrutamiento entre cadenas. Es necesario configurar varias cuentas integradas:

  • cuenta de administrador: requerida, se usa una cuenta de administrador para acceder a esta cadena de Fabric
  • Cuenta de administrador institucional: opcional, cada organización de Fabric configura una cuenta de administrador para implementar contratos de sistema en cada organización

Generar marco de configuración de cuenta

# 切换至对应跨链路由的主目录
cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500/

# 用脚本生成Fabric账户配置:账户类型(Fabric1.4),账户名(fabric_admin)
# 接入Fabric链,需要配置一个admin账户
bash add_account.sh -t Fabric1.4 -n fabric_admin 

# 为Fabric链的每个Org都配置一个admin账户,此处有两个org(Org1和Org2),分别配两个账户

# 配Org1的admin
bash add_account.sh -t Fabric1.4 -n fabric_admin_org1

# 配Org2的admin
bash add_account.sh -t Fabric1.4 -n fabric_admin_org2

configuración completa

Modificar la configuración de la cuenta

La configuración de la cuenta generada mspides Org1MSP de manera predeterminada y la cuenta Org2 debe configurarse mspidcomo Org2MSP. Aquí solo necesitas modificar la configuración de la cuenta fabric_admin_org2.

vim conf/accounts/fabric_admin_org2/account.toml

# 修改mspid,将 'Org1MSP' 更改为 'Org2MSP'
copiar archivo de certificado

El certificado de la cadena Fabric se encuentra en crypto-configel directorio. Consulte el siguiente comando y complete la copia del certificado correspondiente de acuerdo con la situación real .

cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500

# 配置fabric_admin 
# 拷贝私钥     
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/*_sk   conf/accounts/fabric_admin/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]   conf/accounts/fabric_admin/account.crt

# 配置fabric_admin_org1 
# 拷贝私钥
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/*_sk   conf/accounts/fabric_admin_org1/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]   conf/accounts/fabric_admin_org1/account.crt

# 配置fabric_admin_org2 
# 拷贝私钥
cp xxxxxx/crypto-config/peerOrganizations/org2.example.com/users/[email protected]/msp/keystore/*_sk   conf/accounts/fabric_admin_org2/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org2.example.com/users/[email protected]/msp/signcerts/[email protected]   conf/accounts/fabric_admin_org2/account.crt

Después de copiar el certificado, la estructura del directorio de la cuenta es la siguiente:

tree conf/accounts/
conf/accounts/
├── fabric_admin
│   ├── account.crt
│   ├── account.key
│   └── account.toml
├── fabric_admin_org1
│   ├── account.crt
│   ├── account.key
│   └── account.toml
└── fabric_admin_org2
    ├── account.crt
    ├── account.key
    └── account.toml

configurar complemento

Generar esqueleto de configuración de complemento

Ingrese al directorio principal del enrutador de cadena cruzada y use add_chain.shel script confpara generar el marco de configuración de la cadena Fabric en el directorio.

cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500

 # -t 链类型,-n 指定链名字,可根据-h查看使用说明
bash add_chain.sh -t Fabric1.4 -n fabric

La ejecución es exitosa y el resultado es el siguiente. Si hay un error en la ejecución, verifique el aviso de impresión de pantalla.

SUCCESS: Chain "fabric" config framework has been generated to "conf/chains/fabric"

La estructura de directorios generada es la siguiente:

tree conf/chains/fabric/
conf/chains/fabric/
├── chaincode
│   ├── WeCrossHub
│   │   └── hub.go    # 桥接合约
│   └── WeCrossProxy
│       └── proxy.go  # 代理合约
└── stub.toml         # 插件配置文件

configuración completa

copia del certificado

Los certificados relevantes también se encuentran en crypto-configel directorio. Consulte los siguientes comandos y complete la copia de los certificados relevantes de acuerdo con la situación real .

# 假设当前位于跨链路由的主目录
# 拷贝orderer证书
cp xxxxxx/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem   conf/chains/fabric/orderer-tlsca.crt

# 拷贝org1证书
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt   conf/chains/fabric/org1-tlsca.crt

# 拷贝org2证书
cp xxxxxx/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt   conf/chains/fabric/org2-tlsca.crt

editar archivo de configuración

Los elementos de configuración del archivo de configuración del complemento conf/chains/fabric/stub.tomlincluyen:

  • Configurar información de recursos
  • Configurar la información de conexión del SDK para interactuar con la cadena

[fabricServices]Edite [orgs]cada elemento de configuración de acuerdo con la situación real .

[common]
    name = 'fabric'				# 指定的连接的链的名字,与该配置文件所在的目录名一致,对应path中的{zone}/{chain}/{resource}的chain
    type = 'Fabric1.4'			# 插件的类型

[fabricServices]
    channelName = 'mychannel'
    orgUserName = 'fabric_admin' # 指定一个机构的admin账户,用于与orderer通信
    ordererTlsCaFile = 'orderer-tlsca.crt' # orderer证书名字,指向与此配置文件相同目录下的证书
    ordererAddress = 'grpcs://localhost:7050' # orderer的url

[orgs] # 机构节点列表
    [orgs.Org1] # 机构1:Org1
         tlsCaFile = 'org1-tlsca.crt' # Org1的证书
         adminName = 'fabric_admin_org1' # Org1的admin账户,在下一步骤中配置
         endorsers = ['grpcs://localhost:7051'] # endorser的ip:port列表,可配置多个

    [orgs.Org2] # 机构2:Org2
         tlsCaFile = 'org2-tlsca.crt' # Org2的证书
         adminName = 'fabric_admin_org2' # Org2的admin账户,在下一步骤中配置
         endorsers = ['grpcs://localhost:9051'] # endorser的ip:port列表,可配置多个

Contrato de sistema de despliegue

Cada Stub necesita implementar dos contratos de sistema, a saber, el contrato de proxy y el contrato de puente.El contrato de proxy es responsable de administrar transacciones e invocar contratos comerciales, y el contrato de puente se usa para registrar solicitudes de contratos entre cadenas. Ejecute el siguiente comando en el directorio principal del enrutador de enlace cruzado:

# 部署代理合约
bash deploy_system_contract.sh -t Fabric1.4 -c chains/fabric -P

# 部署桥接合约
bash deploy_system_contract.sh -t Fabric1.4 -c chains/fabric -H

# 若后续有更新系统合约的需求,首先更新conf/chains/fabric下的系统合约代码,在上述命令添加-u参数,执行并重启跨链路由

Si la implementación es exitosa, el resultado es el siguiente. Si falla, puede verificar la información del aviso y el registro de errores.

SUCCESS: WeCrossProxy has been deployed to chains/fabric
SUCCESS: WeCrossHub has been deployed to chains/fabric

Después de completar la entrada de la cadena de bloques, reinicie el enrutador de cadena cruzada para cargar los recursos de cadena cruzada configurados.

# 重启 router-8250
cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500/
bash stop.sh && bash start.sh 

Verifique el registro, puede ver que los recursos de cadena cruzada cargados se deslizan y ctrl + csalen.

tail -f logs/info.log |grep "active resources"

2020-12-05 21:07:30.925 [Thread-3] INFO  WeCrossHost() - Current active resources: payment.bcos.WeCrossProxy(local), payment.bcos.WeCrossHub(local)
2020-12-05 21:07:40.940 [Thread-3] INFO  WeCrossHost() - Current active resources: payment.bcos.WeCrossProxy(local), payment.bcos.WeCrossHub(local)
2020-12-05 21:07:50.956 [Thread-3] INFO  WeCrossHost() - Current active resources: payment.bcos.WeCrossProxy(local), payment.bcos.WeCrossHub(local)

Configurar cuentas entre cadenas

Después de ingresar la cadena de bloques, se debe configurar la cuenta correspondiente para completar la llamada de recursos.

WeCross agrega varios tipos de cuentas en cadena y las administra de manera uniforme con cuentas entre cadenas. En WeCross, los usuarios inician sesión como cuentas de cadena cruzada y luego operan varios recursos. Para enviar una transacción a un tipo específico de cadena, solo necesita agregar el tipo de cuenta de cadena correspondiente en la cuenta de cadena cruzada.

Agregar cuenta de la cadena Fabric

Nota: Antes de agregar una cuenta de cadena Fabric, asegúrese de que se haya configurado la cadena Fabric.

  • Copiar claves públicas y privadas

Copie las claves públicas y privadas de la cadena de tejido en el directorio de la consola para prepararse para agregar cuentas de cadena.

cp -r ~/wecross-networks/routers-payment/127.0.0.1-8250-25500/conf/accounts/* ~/wecross-networks/WeCross-Console/conf/accounts/
  • Inicie la consola
cd ~/wecross-networks/WeCross-Console/
bash start.sh
  • Acceso

Inicie sesión con la cuenta de cadena cruzada predeterminada: org1-admin, contraseña: 123456 (la cuenta predeterminada está configurada en WeCross-Account-Manager/conf/application.toml).

[WeCross]> login org1-admin 123456
Result: success
=============================================================================================
Universal Account:
username: org1-admin
pubKey  : 3059301306...
uaID    : 3059301306...
  • Agregar cuenta en cadena

Agregue una cuenta de cadena para enviar transacciones a la cuenta de cadena cruzada actualmente registrada.

# 参数: addChainAccount Fabric1.4 私钥位置 公钥位置 MSPID 是否设置为发交易的默认链账户

# 添加 fabric_admin_org1
[WeCross.org1-admin]> addChainAccount Fabric1.4 conf/accounts/fabric_admin_org1/account.crt conf/accounts/fabric_admin_org1/account.key Org1MSP true 

# 添加 fabric_admin_org2
[WeCross.org1-admin]> addChainAccount Fabric1.4 conf/accounts/fabric_admin_org2/account.crt conf/accounts/fabric_admin_org2/account.key Org2MSP true

Ver cuenta de cadena

Vea todas las cuentas de la cadena en la cuenta de cadena cruzada actualmente iniciada, isDefaultque es truela cuenta predeterminada para enviar transacciones.

[WeCross.org1-admin]> listAccount
Universal Account:
username: org1-admin
pubKey  : 3059301306...
uaID    : 3059301306...
chainAccounts: [
        BCOS2.0 Account:
        keyID    : 0
        type     : BCOS2.0
        address  : 0x4e89af80184147fcddc391c64ad673512236af67
        isDefault: true
        ----------
        Fabric1.4 Account:
        keyID    : 2
        type     : Fabric1.4
        MembershipID : Org2MSP
        isDefault: true
        ----------
        Fabric1.4 Account:
        keyID    : 1
        type     : Fabric1.4
        MembershipID : Org1MSP
        isDefault: false
        ----------
]

La operación es exitosa, salga de la consola.

[WeCross.org1-admin]> quit

Operaciones de despliegue e inicialización de recursos

Implemente recursos de cadenas cruzadas de Hyperledger Fabric

WeCross admite la implementación de código de cadena en la cadena Fabric a través de la consola, y los pasos de implementación son los siguientes:

  • Prepare el código de código de cadena (tome sacc como ejemplo)

El directorio de almacenamiento de código de cadena de la consola: conf/contracts/chaincode/, donde el código sacc se coloca en el directorio: conf/contracts/chaincode/sacc(el nombre de directorio sacc es el nombre del código de cadena), y el código de código de cadena se coloca en el directorio sacc: sacc.go (el nombre de código es arbitrario).

tree conf/contracts/chaincode/sacc
conf/contracts/chaincode/sacc
├── policy.yaml
└── sacc.go
  • implementar código de cadena

Instale el mismo código de cadena para diferentes organizaciones.

# 登录
[WeCross]> login org1-admin 123456
# 在登录态下,查看默认链账户,可看到Fabric1.4的默认账户是Org2MSP的
[WeCross.org1-admin]> listAccount
Universal Account:
username: org1-admin
pubKey  : 3059301306...
uaID    : 3059301306...
chainAccounts: [
        BCOS2.0 Account:
        keyID    : 0
        type     : BCOS2.0
        address  : 0x4e89af80184147fcddc391c64ad673512236af67
        isDefault: true
        ----------
        Fabric1.4 Account:
        keyID    : 2
        type     : Fabric1.4
        MembershipID : Org2MSP
        isDefault: true
        ----------
        Fabric1.4 Account:
        keyID    : 1
        type     : Fabric1.4
        MembershipID : Org1MSP
        isDefault: false
        ----------
]

# 在向Org1进行install前,设置Fabric1.4的默认账户为Org1MSP,参数:setDefaultAccount Fabric1.4 keyID
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 1

# 给Org1安装sacc,参数:path Org 链码位置 版本号 链码语言
[WeCross.org1-admin]> fabricInstall payment.fabric.sacc Org1 contracts/chaincode/sacc 1.0 GO_LANG
path: classpath:contracts/chaincode/sacc
Result: Success

# 在向Org2进行install前,设置Fabric1.4的默认账户为Org2MSP,参数:setDefaultAccount Fabric1.4 keyID
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 2

# 给Org2安装sacc,参数:path Org 链码位置 版本号 链码语言
[WeCross.org1-admin]> fabricInstall payment.fabric.sacc Org2 contracts/chaincode/sacc 1.0 GO_LANG
path: classpath:contracts/chaincode/sacc
Result: Success

Crea una instancia del código de cadena especificado.

Parámetros: ipath, varias organizaciones correspondientes, directorio del proyecto de código de código de cadena, versión especificada, lenguaje de código de cadena, política de aprobación (predeterminada aquí), parámetros de inicialización

# fabricInstantiate 时默认Org1MSP或Org2MSP的链账户都可,此处用的Org2MSP
[WeCross.org1-admin]> fabricInstantiate payment.fabric.sacc ["Org1","Org2"] contracts/chaincode/sacc 1.0 GO_LANG default ["a","10"]

Result: Instantiating... Please wait and use 'listResources' to check. See router's log for more information.

Después de la solicitud de creación de instancias, espere aproximadamente 1 minuto. Úselo listResourcespara ver si tuvo éxito. Si la creación de instancias tiene éxito, se puede consultar el recurso payment.fabric.sacc.

[WeCross.org1-admin]> listResources
path: payment.bcos.HelloWorld, type: BCOS2.0, distance: 0
path: payment.fabric.WeCrossHub, type: Fabric1.4, distance: 1
path: payment.bcos.WeCrossHub, type: BCOS2.0, distance: 0
path: payment.fabric.sacc, type: Fabric1.4, distance: 1
total: 4

[WeCross.org1-admin]> quit # 退出控制台

Operar recursos entre cadenas

Ver recursos entre cadenas

  • Acceso

Inicie sesión con la cuenta de cadena cruzada predeterminada: org1-admin, contraseña: 123456. (La cuenta predeterminada está configurada en WeCross-Account-Manager/conf/application.toml)

[WeCross]> login org1-admin 123456
Result: success
=============================================================================================
Universal Account:
username: org1-admin
pubKey  : 3059301306...
uaID    : 3059301306...
  • Obtener lista de recursos

Use listResourcescomandos para ver todos los recursos en la red de cadenas cruzadas de WeCross. Puedes ver que hay múltiples recursos:

payment.bcos.HelloWorld: Corresponde al contrato HelloWorld.sol en la cadena FISCO BCOS.

payment.fabric.sacc: Corresponde al contrato sacc.go en la cadena Fabric.

payment.xxxx.WeCrossHub: El contrato Hub instalado de forma predeterminada en cada cadena se utiliza para recibir llamadas entre cadenas iniciadas por contratos en la cadena.

[WeCross.org1-admin]> listResources
path: payment.bcos.HelloWorld, type: BCOS2.0, distance: 0
path: payment.fabric.WeCrossHub, type: Fabric1.4, distance: 1
path: payment.bcos.WeCrossHub, type: BCOS2.0, distance: 0
path: payment.fabric.sacc, type: Fabric1.4, distance: 1
total: 4

Operación pago.tejido.sacc

Los recursos entre cadenas son la unificación y abstracción de recursos en diferentes cadenas, por lo que los comandos de operación son consistentes.

  • leer recursos
# 调用mycc合约中的query接口
[WeCross.org1-admin]> call payment.fabric.sacc get a
Result: [10] // 初次get,a的值为10
  • escribir recursos
# 调用sacc合约中的set接口
[WeCross.org1-admin]> sendTransaction payment.fabric.sacc set a 666
Txhash  : aa3a7cd62d4b4c56b486f11fae2d903b7f07c2a3fa315ee2b44d5f5c43f5a8dc
BlockNum: 8
Result  : [666]

[WeCross.org1-admin]> call payment.fabric.sacc get a
Result: [666] // 再次get,a的值变成666

# 退出WeCross控制台
[WeCross.org1-admin]> quit # 若想再次启动控制台,cd至WeCross-Console,执行start.sh即可

Prueba de llamada entre cadenas: contrato de llamada entre cadenas (Interchain)

Ejemplo de operación

La consola de WeCross proporciona contratos de muestra para llamadas entre cadenas en dos versiones de idioma. Las interfaces de los contratos de muestra incluyen:

init(): 传入本链的桥接合约地址进行初始化

interchain(): 跨链调用的发起接口,其内部调用了桥接合约的interchainInvoke接口

get(): 获取data

set(): 更新data

callback(): 使用跨链调用的结果更新data

El proceso de vinculación de dos contratos de muestra : el contrato de muestra de la cadena A inicia una llamada entre cadenas, llama a la interfaz establecida del contrato de muestra de la cadena B, actualiza los datos de la cadena B, luego activa una devolución de llamada, llama a la interfaz de devolución de llamada de cadena A y actualiza los datos de la cadena A.

A través del método anterior, una llamada de consola puede completar la actualización de los datos de las dos cadenas.

Implemente un contrato de muestra para llamadas entre cadenas

Después de configurar el entorno, ejecute los siguientes comandos en la consola de WeCross:

# 登录
[WeCross]> login org1-admin 123456

# 切换Fabric默认账户
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 2

# 安装链码
[WeCross.org1-admin]> fabricInstall payment.fabric.interchain Org2 contracts/chaincode/interchain 1.0 GO_LANG

path: classpath:contracts/chaincode/interchain
Result: Success

# 切换Fabric默认账户
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 1

# 安装链码
[WeCross.org1-admin]> fabricInstall payment.fabric.interchain Org1 contracts/chaincode/interchain 1.0 GO_LANG

path: classpath:contracts/chaincode/interchain
Result: Success

# 实例化链码
[WeCross.org1-admin]> fabricInstantiate payment.fabric.interchain ["Org1","Org2"] contracts/chaincode/interchain 1.0 GO_LANG default []

# 等待实例化完成

Inicializar el contrato de ejemplo

Ejecute el siguiente comando en la consola de WeCross:

# 登录
[WeCross]> login org1-admin 123456

# 初始化Fabric示例合约,其中mychannel是channel名
[WeCross.org1-admin]> sendTransaction payment.fabric.interchain init mychannel WeCrossHub

Iniciar una llamada entre cadenas

Ejecute el siguiente comando en la consola de WeCross:

# 登录
[WeCross]> login org1-admin 123456

# 查看示例合约原始状态
[WeCross.org1-admin]> call payment.fabric.interchain get

Result: [["Talk is cheap, show me the code."]]

[WeCross.org1-admin]> call payment.bcos.interchain get

Result: [["Talk is cheap, show me the code."]]

# Fabric发起跨链调用   (提前沟通好需调用的bcos链的资源名称及参数)
[WeCross.org1-admin]> sendTransaction payment.fabric.interchain interchain payment.bcos.interchain set "Hello WeCross" payment.fabric.interchain callback

Txhash  : cf7eda25f1c0515b68d702ed495fdbbefed6bdcfd4a3bc68aaab315631d3d102
BlockNum: 2386
Result  : [1]

# 查询示例合约
[WeCross.org1-admin]> call payment.bcos.interchain get

Result: [[ "Hello WeCross" ]]

[WeCross.org1-admin]> call payment.fabric.interchain get

Result: [[ "Hello WeCross" ]]

# 查询调用回调的结果
[WeCross.org1-admin]> call payment.fabric.WeCrossHub selectCallbackResult 1

Result: [["0","0","0","Success","[ \"Hello WeCross\" ]"]]

Supongo que te gusta

Origin blog.csdn.net/qq_42750537/article/details/120747386
Recomendado
Clasificación