# bcos3_lite_js **Repository Path**: coderkent/bcos3_lite_js ## Basic Information - **Project Name**: bcos3_lite_js - **Description**: fisco bcos3.x js 轻量级实现 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-04-25 - **Last Updated**: 2024-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # bcos3_lite_js #### 介绍 fisco bcos3.x js 客户端 轻量级实现 * 支持智能合约的ABI编解码 * 实现面向FISCO BCOS 3.x交易的编解码 * 实现js侧的ECDSA签名,即私钥可以存在前端侧,由前端侧签名 #### 基本原理 当前版本主要是趟过编解码,hash,签名的坑,把数据结构和签名与节点打通。 **当前版本未实现直接通过网络去连接节点,后续迭代参见TodoList里的网络方案1,2** 已经实现的包括: * 不依赖bcos3的c-sdk,根据transaction的tars JCE定义,生成交易数据结构编解码的js文件 * 使用ethers.js库操作智能合约abi编解码 * 在[utils/tx_utils.js](utils/tx_utils.js)里实现交易数据的hash生成,签名,打包成rawTransaction * 经过编码签名的rawTransaction,则可以通过bcos-c-sdk (或java、python、go封装的sdk)里的[bcos_rpc_send_transaction](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/sdk/c_sdk/api.html#bcos-rpc-get-transaction)接口, 发给节点,由代理调用链上合约。 * call接口[bcos_rpc_call](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/sdk/c_sdk/api.html#bcos-rpc-call)无需签名,有ABI编码的方法调用input即可。 #### 目录结构 nodejs开发主要看[tests/test_raw_transaction.js](tests/test_raw_transaction.js)脚本,包含交易编解码和签名全流程。 web端开发参考[tests/hello_tx.html](tests/hello_tx.html)这个网页文件演示了HelloWorld合约的set/get接口的编码和调用方式。 要运行这个网页文件,需要将此项目放到一个web服务上用浏览器访问。本项目有个flaskserver的实现,可供参考 #### util目录说明 utils目录是最核心的几个方法库的实现。 web开发主要引用bcosutils.js: 这个文件是一个经过预打包的文件。采用browserify组件,从utils/devutils目录和npm库里打包生成浏览器可执行的js。 devutils/utils_exports.js是用于打包的入口文件,操作步骤。 ``` npm install -g browserify cd utils browserify utils_exports.js -o bcosutils.js --s bcosutils ``` 之所以需要用browserify工具打包,主要是因为交易结构编解码的@tars/stream库里使用了Node.js内置的Buffer,这是React Native的虚拟机所不支持的, 采用browserify打包可自动转换成浏览器通用的buffer实现。 采用browserify组件,从npm库里打包生成浏览器可执行的js。 当然的,io,网络等浏览器不支持的特性,都要先剔除 ethers.js和browserify并不很兼容,其“#”定义的私有域变量和方法无法输出 其他几个xxx_utils.js文件都很简单,顾名思义一看就懂 #### 环境依赖 * 依赖nodejs环境 ``` node -v v14.17.3 ``` #### TodoList * 把核心功能库适配成浏览器、React Native等环境可运行的版本 * 调整项目工程结构,支持打包发布 * 实现一个简单的cli控制台,支持交互命令 * 实现有页面交互的前端APP体验,包括且不限于html,h5,ReactNative,uni-app等 * 网络方案1: 通过json-rpc/restful方式,将rawtransaction串发给代理服务,由代理服务上链 * 网络方案2: 参照[https://github.com/FISCO-BCOS/bcos-boostssl](https://github.com/FISCO-BCOS/bcos-boostssl),实现websocket连接节点 ![概要网络结构](./imgs/network.png)