Skip to content

yangshu502/nodejs-sdk

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status GitHub license GitHub issues

Node.js SDK为FISCO BCOS提供Node.js API,使用FISCO BCOS Node.js SDK可以简单快捷地基于FISCO-BCOS进行区块链应用开发。此版本只支持FISCO BCOS v2.0.0及以上。

关键特性

  • 提供调用FISCO BCOS JSON-RPC的Node.js API
  • 提供部署及调用Solidity合约(支持Solidity 0.4.x 及Solidity 0.5.x)的Node.js API
  • 提供调用预编译(Precompiled)合约的Node.js API
  • 使用Channel协议与FISCO BCOS节点通信,双向认证更安全
  • 提供CLI(Command-Line Interface)工具供用户在命令行中方便快捷地调用管理区块链的Node.js API
  • 支持Windows、Linux及MacOS操作系统

部署Node.js SDK

环境要求

  • Node.js开发环境

    • Node.js >= 8.10.0
    • npm >= 5.6.0

    如果您没有部署过Node.js环境,可以参考下列部署方式:

    • 如果您使用Linux或MacOS:

      推荐使用nvm快速部署,使用nvm同时也能够避免潜在的导致Node.js SDK部署失败的权限问题。以部署Node.js 8为例,部署步骤如下:

      # 安装nvm
      curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
      # 加载nvm配置
      source ~/.$(basename $SHELL)rc
      # 安装Node.js 8
      nvm install 8
      # 使用Node.js 8
      nvm use 8
    • 如果您使用Windows:

      请前往Node.js官网下载Windows下的安装包进行安装。

  • 基本开发组件

    • Python 2(Windows、Linux及MacOS需要)
    • g++(Linux及MacOS需要)
    • make(Linux及MacOS需要)
    • Git(Windows、Linux及MacOS需要)
    • Git bash(仅Windows需要)
    • MSBuild构建环境(仅Windows需要)

    如果您使用Windows且没有部署过MSBuild构建环境,推荐在Windows PowerShell(管理员)中执行以下命令部署:

    npm install --global --production windows-build-tools

    该命令可能会下载约1GB的依赖项,整个过程可能会持续数十分钟,请耐心等待。

    请注意,如果您使用Windows,则如无特殊说明,本文之后所提到的命令均需要在Git bash中执行

  • FISCO BCOS节点:请参考FISCO BCOS安装搭建

拉取源代码

git clone https://github.com/FISCO-BCOS/nodejs-sdk.git

部署

如果您的网络中使用了代理,请先为npm配置代理。如果没有使用代理,请忽略。

npm config set proxy <your proxy>
npm config set https-proxy <your proxy>

如果您所使用的网络不能顺利访问npm官方镜像,请使用其他镜像代替,如淘宝:

npm config set registry https://registry.npm.taobao.org
# 部署过程中请确保能够访问外网以能够安装第三方依赖包
cd nodejs-sdk
npm install
npm run repoclean
npm run bootstrap

使用CLI工具

Node.js SDK自带一个CLI工具供用户在命令行中方便快捷地调用管理区块链的Node.js API,同时CLI工具也能够方便地被应用到脚本中。CLI工具在Node.js SDK提供的API的基础上开发而成,是一个展示如何使用Node.js API进行二次开发的范例。

快速建链(可选)

若您的系统中已经搭建了FISCO BCOS链,请跳过本节。

# 获取建链脚本
curl -LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/`curl -s https://api.github.com/repos/FISCO-BCOS/FISCO-BCOS/releases | grep "\"v2\.[0-9]\.[0-9]\"" | sort -u | tail -n 1 | cut -d \" -f 4`/build_chain.sh && chmod u+x build_chain.sh
# 在本地建一个4节点的FISCO BCOS链
bash build_chain.sh -l "127.0.0.1:4" -p 30300,20200,8545 -i
# 启动FISCO BCOS链
bash nodes/127.0.0.1/start_all.sh

配置证书、节点IP及Channel端口

  • 配置证书

    CLI工具需要使用证书来与FISCO BCOS节点通讯,证书文件默认放置于packages/cli/conf/目录。如果您使用了快速建链,则命令如下:

    cp nodes/127.0.0.1/sdk/* packages/cli/conf/
  • 配置节点IP及Channel端口

    节点IP及端口配置位于packages/cli/conf/config.json文件的nodes配置项中。您需要根据您要连接FISCO BCOS节点的实际配置修改该配置项的ipport配置,其中ip为所连节点的IP地址,port为节点目录下的 config.ini 文件中的channel_listen_port配置项的值。如果您使用了快速搭链,可以跳过此步。

配置完成后,即可开始使用CLI工具,CLI工具位于packages/cli/cli.js,所有操作均需要在packages/cli/目录下执行,您需要先切换至该目录:

cd packages/cli

开启自动补全(仅针对bash及zsh用户,可选)

为方便用户使用CLI工具,CLI工具支持在bash或zsh中进行自动补全,此功能需要手动启用,执行命令:

rcfile=~/.$(basename $SHELL)rc && ./cli.js completion >> $rcfile && source $rcfile

便可启用自动补全。使用CLI工具时,按下Tab键(依据系统配置的不同,可能需要按两下)便可弹出候选命令或参数的列表并自动补全。

使用示例

以下给出几个使用示例:

查看CLI工具的帮助

./cli.js --help

查看CLI工具能够调用的命令及对应的功能

./cli.js list

以下示例中的输入、输出及参数仅供举例

查看所连的FISCO BCOS节点版本

./cli.js getClientVersion

输出如下:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "Build Time": "20190705 21:19:13",
    "Build Type": "Linux/g++/RelWithDebInfo",
    "Chain Id": "1",
    "FISCO-BCOS Version": "2.0.0",
    "Git Branch": "master",
    "Git Commit Hash": "d8605a73e30148cfb9b63807fb85fa211d365014",
    "Supported Version": "2.0.0"
  }
}

显示外部账户

./cli.js showAccount

输出如下:

{
  "account": "0x144d5ca47de35194b019b6f11a56028b964585c9"
}

获取当前的块高

./cli.js getBlockNumber

输出如下:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0xfa"
}

部署SDK自带的HelloWorld合约

./cli.js deploy HelloWorld

输出如下:

{
  "contractAddress": "0x940b13378a8908ddd4d10a565c1feb22036c4c9e",
  "status": "0x0"
}

调用HelloWorld合约的set接口,请将合约地址改为实际地址

./cli.js call HelloWorld 0x940b13378a8908ddd4d10a565c1feb22036c4c9e set vita

输出如下:

{
  "transactionHash": "0x1e535cda124ef4c1fd3f92cae275b9adf7eaa5aff3fdf265d2fe397a6c920057",
  "status": "0x0"
}

调用HelloWorld合约的get接口,请将合约地址改为实际地址

./cli.js call HelloWorld 0x940b13378a8908ddd4d10a565c1feb22036c4c9e get

输出如下:

{
  "status": "0x0",
  "output": {
    "0": "vita"
  }
}

通过CRUD接口创建表

# 创建一个名为test的表,每条记录的主键名为fruit,另外还包括两个分别名为num和purpose的字段
./cli.js create test fruit num,purpose

输出如下:

# 返回状态码,0表示创建成功
0

通过CRUD接口插入记录

# 向名为test的表中插入一条记录,该记录的主键的值为pineapple,num字段的值为4,purpose字段的值为pie
./cli.js insert test pineapple 4,pie

输出如下:

# 返回成功插入的记录数
1

通过CRUD接口查询记录

# 从名为test的表中选出主键的值为pineapple、purpose字段的值为pie的记录
./cli.js select test pineapple purpose=pie
# 返回记录列表
[ { fruit: 'pineapple', num: '4', purpose: 'pie' } ]

通过CRUD接口更新记录

# 更新在名为test的表中、主键的值为pineapple、purpose字段的值为pie的记录,将num和purpose字段的值分别更新为4和hot pie
./cli.js update test pineapple "4,hot pie" purpose=pie

输出如下:

# 返回成功更新的记录数
1

通过CRUD接口删除记录

# 删除在名为test的表中、主键的值为pineapple、num字段的值为4的记录
./cli.js remove test pineapple num=4

输出如下:

# 返回成功删除的记录数
1

CLI帮助

如果您想知道某一个命令该如何使用,可以使用如下的命令:

./cli.js <command> ?

其中command为一个命令名,使用?作为参数便可获取该命令的使用提示,如:

./cli.js call ?

会得到如下的输出:

cli.js call <contractName> <contractAddress> <function> [parameters...]

Call a contract by a function and parameters

位置:
  contractName     The name of a contract                        [字符串] [必需]
  contractAddress  20 Bytes - The address of a contract          [字符串] [必需]
  function         The function of a contract                    [字符串] [必需]
  parameters       The parameters(splited by a space) of a function
                                                             [数组] [默认值: []]

选项:
  --help     显示帮助信息                                                 [布尔]
  --version  显示版本号                                                   [布尔]

CLI工具配置项说明

CLI工具的配置文件位于nodejs-sdk/packages/cli/conf/config.json,配置文件中各字段的说明如下:

  • privateKey: object,必需。外部账户的私钥,可以为一个256 bits的随机整数,也可以是一个pem或p12格式的私钥文件,后两者需要结合get_account.sh生成的私钥文件使用。privateKey包含两个必需字段,一个可选字段:
    • type: string,必需。用于指示私钥类型。type的值必需为下列三个值之一:
      • ecrandom:随机整数
      • pem:pem格式的文件
      • p12:p12格式的文件
    • valuestring,必需。用于指示私钥具体的值:
      • 如果typeecrandom,则value为一个长度为256 bits 的随机整数,其值介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间。
      • 如果typepem,则value为pem文件的路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
      • 如果typep12,则value为p12文件的路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
    • passwordstring,可选。如果typep12,则需要此字段以解密私钥,否则会忽略该字段。
  • nodes: list,必需。FISCO BCOS节点列表,CLI工具在使用时会从该列表中随机挑选一个节点进行通信,要求节点数目必须 >= 1。每个节点包含两个字段:
    • ip: string,必需。FISCO BCOS节点的IP地址
    • port: string,必需,FISCO BCOS节点的Channel端口
  • authenticationobject。必需,包含建立Channel通信时所需的认证信息,一般在建链过程中自动生成。authentication包含三个必需字段:
    • key: string,必需。私钥文件路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
    • cert: string,必需。证书文件路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
    • ca: string,必需。CA根证书文件路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
  • groupID: number。CLI所操作的链的群组ID
  • timeout: number。CLI工具所连节点可能会陷入停止响应的状态。为避免陷入无限等待,CLI工具的每一项操作在timeout之后若仍没有得到结果,则强制退出。timeout的单位为毫秒。
  • solc: string,可选。Node.js SDK已经自带0.4.26及0.5.10版本的Solidity编译器,如果您有特殊的编译器需求,可以设置本配置项为您的编译器的执行路径或全局命令。

贡献代码

加入我们的社区

FISCO BCOS开源社区是国内活跃的开源社区,社区长期为机构和个人开发者提供各类支持与帮助。已有来自各行业的数千名技术爱好者在研究和使用FISCO BCOS。如您对FISCO BCOS开源技术及应用感兴趣,欢迎加入社区获得更多支持与帮助。

License

license

Node.js SDK的开源协议为APACHE LICENSE, VERSION 2.0,详情参考LICENSE

About

nodejs sdk for FISCO BCOS

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 99.0%
  • Shell 1.0%