控制台

控制台是WeCross重要的交互式客户端工具,它通过WeCross-Java-SDK与WeCross 跨链代理建立连接,实现对跨链资源的读写访问请求。控制台拥有丰富的命令,包括获取跨链资源列表,查询资源状态,以及所有的JSON-RPC接口命令。

控制台命令

控制台命令可分为两类,普通命令和交互式命令。

普通命令

普通命令由两部分组成,即指令和指令相关的参数:

  • 指令: 指令是执行的操作命令,包括获取跨链资源列表,查询资源状态指令等,其中部分指令调用JSON-RPC接口,因此与JSON-RPC接口同名。 使用提示: 指令可以使用tab键补全,并且支持按上下键显示历史输入指令。
  • 指令相关的参数: 指令调用接口需要的参数,指令与参数以及参数与参数之间均用空格分隔。与JSON-RPC接口同名命令的输入参数和获取信息字段的详细解释参考JSON-RPC API

交互式命令

WeCross控制台为了方便用户使用,还提供了交互式的使用方式,比如将跨链资源标识赋值给变量,初始化一个类,并用.command的方式访问方法。 详见:交互式命令

常用命令链接

普通命令

交互式命令

快捷键

  • Ctrl+A:光标移动到行首
  • Ctrl+E:光标移动到行尾
  • Ctrl+R:搜索输入的历史命令
  • ↑: 向前浏览历史命令
  • ↓: 向后浏览历史命令
  • tab: 自动补全,支持命令、变量名、资源名以及其它固定参数的补全

控制台响应

当发起一个控制台命令时,控制台会获取命令执行的结果,并且在终端展示执行结果,执行结果分为2类:

  • 正确结果: 命令返回正确的执行结果,以字符串或是json的形式返回。
  • 错误结果: 命令返回错误的执行结果,以字符串或是json的形式返回。
  • 状态码: 控制台的命令调用JSON-RPC接口时,状态码参考这里

控制台配置与运行

重要

前置条件:部署WeCross请参考 快速部署

获取控制台

可通过脚本download_console.sh获取控制台。

  1. cd ~ && mkdir -p wecross && cd wecross
  2. # 获取控制台
  3. bash <(curl -sL https://github.com/WeBankFinTech/WeCross-Console/releases/download/resources/download_console.sh)

执行成功后,会生成WeCross-Console目录,结构如下:

  1. ├── apps
  2.    └── wecross-console.jar # 控制台jar包
  3. ├── conf
  4.    ├── application-sample.toml # 配置示例文件
  5.    └── log4j2.xml # 日志配置文件
  6. ├── download_console.sh # 获取控制台脚本
  7. ├── lib # 相关依赖的jar包目录
  8. ├── logs # 日志文件
  9. └── start.sh # 启动脚本

配置控制台

控制台配置文件为 conf/application-toml,启动控制台前需配置

  1. cd ~/wecross/WeCross-Console
  2. # 拷贝配置sample
  3. cp conf/application-sample.toml conf/application.toml
  4.  
  5. # 拷贝连接router所需的TLS证书,从生成的routers-payment/cert/sdk目录下拷贝
  6. cp ~/wecross/routers-payment/cert/sdk/* conf/ # 包含:ca.crt、node.nodeid、ssl.crt、ssl.key
  7.  
  8. # 配置
  9. vim conf/application.toml

配置与控制台r与某个router的连接

  1. [connection]
  2. server = '127.0.0.1:8250' # 对应router的ip和rpc端口
  3. sslKey = 'classpath:ssl.key'
  4. sslCert = 'classpath:ssl.crt'
  5. caCert = 'classpath:ca.crt'

启动控制台

在WeCross已经开启的情况下,启动控制台

  1. cd ~/wecross/WeCross-Console
  2. bash start.sh
  3. # 输出下述信息表明启动成功
  4. =============================================================================================
  5. Welcome to WeCross console(1.0.0-rc2)!
  6. Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
  7.  
  8. =============================================================================================

普通命令

以下所有跨链资源相关命令的执行结果以实际配置为准,此处只是示例。

help

输入help或者h,查看控制台所有的命令。

  1. [WeCross]> help

quit Quit console. supportedStubs List supported stubs of WeCross router. listAccounts List all accounts stored in WeCross router. listLocalResources List local resources configured by WeCross server. listResources List all resources including remote resources. status Check if the resource exists. detail Get resource information. call Call constant method of smart contract. sendTransaction Call non-constant method of smart contract. genTimelock Generate two valid timelocks. genSecretAndHash Generate a secret and its hash. newHTLCTransferProposal Create a htlc transfer agreement. checkTransferStatus Check htlc transfer status by hash. WeCross.getResource Init resource by path and account name, and assign it to a custom variable. [resource].[command] Equal to: command [path] [account name].


注:

  • help显示每条命令的含义是:命令 命令功能描述
  • 查看具体命令的使用介绍说明,输入命令 -h或—help查看。例如:

  1. [WeCross]> detail -h

Get the resource information

Usage: detail [path]

supportedStubs

显示router当前支持的插件列表。

  1. [WeCross]> supportedStubs
  2. [BCOS2.0, GM_BCOS2.0, Fabric1.4]

listAccounts

显示所有已配置的账户列表。

  1. name: fabric_user1, type: Fabric1.4
  2. name: fabric_default_account, type: Fabric1.4
  3. name: bcos_user1, type: BCOS2.0
  4. name: bcos_sender, type: BCOS2.0
  5. name: bcos_default_account, type: BCOS2.0
  6. total: 5

listLocalResources

显示router配置的跨链资源。

  1. [WeCross]> listLocalResources
  2. path: payment.bcos.htlc, type: BCOS2.0, distance: 0
  3. path: payment.bcos.HelloWeCross, type: BCOS2.0, distance: 0
  4. total: 2

listResources

查看WeCross跨链代理本地配置的跨链资源和所有的远程资源。

  1. [WeCross]> listResources
  2. path: payment.bcos.htlc, type: BCOS2.0, distance: 0
  3. path: payment.bcos.HelloWeCross, type: BCOS2.0, distance: 0
  4. path: payment.fabric.htlc, type: Fabric1.4, distance: 1
  5. path: payment.fabric.abac, type: Fabric1.4, distance: 1
  6. total: 4

status

查看跨链资源的状态,即是否存在于连接的router中。

参数:

  • path:跨链资源标识。
  1. [WeCross]> status payment.bcos.HelloWeCross
  2. exists

detail

查看跨链资源的详细信息。

参数:

  • path:跨链资源标识。
  1. [WeCross]> detail payment.bcos.HelloWeCross
  2. ResourceDetail{
  3. path='payment.bcos.HelloWeCross',
  4. distance=0',
  5. stubType='BCOS2.0',
  6. properties={
  7. BCOS_PROPERTY_CHAIN_ID=1,
  8. BCOS_PROPERTY_GROUP_ID=1,
  9. HelloWeCross=0x708133d132372727ce3848a16d47ab4daf77698c
  10. },
  11. checksum='0xb452f3d12c91b6cd93e083a518d2ea2cffbcf3d8b971221a5224f07a3be5e41a'
  12. }
  13.  
  14. [WeCross]> detail payment.fabric.abac
  15. ResourceDetail{
  16. path='payment.fabric.abac',
  17. distance=1',
  18. stubType='Fabric1.4',
  19. properties={
  20. PROPOSAL_WAIT_TIME=120000,
  21. CHAINCODE_TYPE=GO_LANG,
  22. CHANNEL_NAME=mychannel,
  23. CHAINCODE_NAME=mycc
  24. },
  25. checksum='c77f0ac3ead48d106d357ffe0725b9761bd55d3e27edd8ce669ad8b470a27bc8'
  26. }

call

调用智能合约的方法,不涉及状态的更改,不发交易。

参数:

  • path:跨链资源标识。
  • accountName:交易签名账户,router上配置的账户名(listAccounts命令可查询)。
  • method:合约方法名。
  • args:参数列表。
  1. [WeCross]> call payment.bcos.HelloWeCross bcos_user1 get
  2. Result: [Talk is cheap, Show me the code]

sendTransaction

调用智能合约的方法,会更改链上状态,需要发交易。

参数:

  • path:跨链资源标识。
  • accountName:交易签名账户,router上配置的账户名。
  • method:合约方法名。
  • args:参数列表。
  1. [WeCross]> sendTransaction payment.bcos.HelloWeCross bcos_user1 set hello wecross
  2. Txhash : 0x66f94d387df2b16bea26e6bcf037c23f0f13db28dc4734588de2d57a97051c54
  3. BlockNum: 2219
  4. Result : [hello, wecross]

genTimelock

跨链转账辅助命令,根据时间差生成两个合法的时间戳。

参数:

  • interval:时间间隔
  1. [WeCross]> genTimelock 300
  2. timelock0: 1586917289
  3. timelock1: 1586916989

genSecretAndHash

跨链转账辅助命令,生成一个秘密和它的哈希。

  1. [WeCross]> genSecretAndHash
  2. secret: afd1c0f9c2f8acc2c1ed839ef506e8e0d0b4636644a889f5aa8e65360420d2a9
  3. hash : 66ebd11ec6cc289aebe8c0e24555b1e58a5191410043519960d26027f749c54f

newHTLCTransferProposal

新建一个基于哈希时间锁合约的跨链转账提案,该命令由两条链的资金转出方分别执行。

参数:

  • path:跨链转账资源标识。
  • accountName:资产转出者在router上配置的账户名。
  • args:提案信息,包括两条链的转账信息。
    • hash: 唯一标识,提案号,
    • secret: 提案号的哈希原像
    • role: 身份,发起方-true,参与方-false。发起方需要传入secret,参与方secret传null。
    • sender0:发起方的资金转出者在对应链上的地址
    • receiver0:发起方的资金接收者在对应链上的地址
    • amount0:发起方的转出金额
    • timelock0:发起方的超时时间
    • sender1:参与方的资金转出者在对应链上的地址
    • receiver1:参与方的资金接收者在对应链上的地址
    • amount1:参与方的转出金额
    • timelock1:参与方的超时时间,小于发起方的超时时间
  1. [WeCross]> newHTLCTransferProposal payment.bcos.htlc bcos_sender 88b6cea9b5ece573c6c35cb3f1a2237bf380dfbbf9155b82d5816344cdac0185 null false [email protected] [email protected] 200 2000010000 0x55f934bcbe1e9aef8337f5551142a442fdde781c 0x2b5ad5c4795c026514f8317c7a215e218dccd6cf 100 2000000000
  2.  
  3. Txhash: 0x244d302382d03985eebcc1f7d95d0d4eef7ff2b3d528fdf7c93effa94175e921
  4. BlockNum: 2222
  5. Result: [create a htlc transfer proposal successfully]

checkTransferStatus

根据提案号(Hash)查询htlc转账状态。

参数:

  • path:跨链资源标识。
  • accountName:交易签名账户,router上配置的账户名。
  • method:合约方法名。
  • hash:转账提案号。
  1. [WeCross]> checkTransferStatus payment.bcos.htlc bcos_sender dcbdf73ee6fdbe6672142c7776c2d21ff7acc6f0d61975e83c3b396a364bee93
  2. status: succeeded!

交互式命令

WeCross.getResource

WeCross控制台提供了一个资源类,通过方法getResource来初始化一个跨链资源实例,并且赋值给一个变量。 这样调用同一个跨链资源的不同UBI接口时,不再需要每次都输入跨链资源标识。

  1. # myResource 是自定义的变量名
  2. [WeCross]> myResource = WeCross.getResource payment.bcos.HelloWeCross bcos_user1
  3.  
  4. # 还可以将跨链资源标识赋值给变量,通过变量名来初始化一个跨链资源实例
  5. [WeCross]> path = payment.bcos.HelloWeCross
  6.  
  7. [WeCross]> myResource = WeCross.getResource path bcos_user1

[resource].[command]

当初始化一个跨链资源实例后,就可以通过.command的方式,调用跨链资源的UBI接口。

  1. # 输入变量名,通过tab键可以看到能够访问的所有命令
  2. [WeCross]> myResource.
  3. myResource.call myResource.status
  4. myResource.detail myResource.sendTransaction

status

  1. [WeCross]> myResource.status
  2. exists

detail

  1. [WeCross]> myResource.detail
  2. ResourceDetail{
  3. path='payment.bcos.HelloWeCross',
  4. distance=0',
  5. stubType='BCOS2.0',
  6. properties={
  7. BCOS_PROPERTY_CHAIN_ID=1,
  8. BCOS_PROPERTY_GROUP_ID=1,
  9. HelloWeCross=0x9bb68f32a63e70a4951d109f9566170f26d4bd46
  10. },
  11. checksum='0x888d067b77cbb04e299e675ee4b925fdfd60405241ec241e845b7e41692d53b1'
  12. }

call

  1. [WeCross]> myResource.call get
  2. Result: [hello, wecross]

sendTransaction

  1. [WeCross]> myResource.sendTransaction set hello world
  2. Txhash : 0x616a55a7817f843d81f8c7b65449963fc2b7a07398b853829bf85b2e1261516f
  3. BlockNum: 2224
  4. Result : [hello, world]