当前位置: 首页 > Web前端 > JavaScript

中国移动链EOSJS实际使用

时间:2023-03-27 00:44:16 JavaScript

id:BSN_2021公众号:BSNInstitute作者:中国移动信息中国移动(移动)信息技术有限公司(以下统称“IT公司”)与BSN将合作2021年10月,BSN建设BSN-DDC基础网络,IT公司区块链团队自主研发基于EOS的中移链DDC,为各行业有DDC业务需求的客户提供接入服务,使方便管理DDC运营,从而灵活升级产品模型,助力客户业务创新。一、中移链eosjs简介中移链基于EOS区块链框架改造,符合BSN开放联盟链要求,符合国内监管政策。ChinaMobileChainBlockchain是一个区块链平台,具有行业领先的交易速度和灵活的实用程序,专为企业级用例设计,并为公共和私有区块链部署而构建。
中国移动链可定制,通过基于角色的权限系统和安全的应用程序交易处理来满足跨行业广泛的业务需求。
中移链架构引入全新的区块链架构,旨在实现分布式应用的性能扩展。这是通过创建一个类似操作系统的架构来实现的,在该架构上可以构建应用程序。中移链家族成员众多,其中eosjs是家族中最重要的成员之一。
eosjs是一个Javascript库。其核心是提供一些API,可以将中移链NodeosRPCAPI与基于中移链的区块链进行集成,使js(包括nodejs、html中的js、框架中的前端js)具备直接操作区块链。
二、eosjs的使用。(1)环境准备确保安装了更新版本的Node.js。(2)通过yarnyarnaddeosjs安装eosjs通过npmnpminstalleosjs(3)eosjs核心说明eosjs核心:eosjs包主要提供JsonRpc对象和Api对象。JsonRpcJsonRpc是一种无状态的轻量级远程过程调用(RPC)传输协议。传输内容如下:
1、必选参数:可连接节点的字符串形式;2.可选参数:获取对象。
通过new一个JsonRpc对象,在构造函数中传入两个参数,第一个参数是必须的,即字符串形式的URL(节点的URL地址);第二个参数不是必须的,即fetch对象,一般在nodejs中传入,其他(例如:vue端)不需要。代码如下:constrpc=newJsonRpc('http://172.0.0.1:8888',{fetch});api在区块链上发送交易和触发操作,必须有一个Api实例,定义在其构造函数ReceiveSignatureProvider对象中。
SignatureProvider对象必须包含操作者对应的私钥和权限要求正在执行。获取api的完整代码如下:constdefaultPrivateKey="5JWuxonweDjwWFuXRwt4sqj5YriEc8ehZh6EKszYYcf3Puh6gAa";//bobconstsignatureProvider=newJsSignatureProvider([defaultPrivateKey]);constrpc=newJson80.18:{'http://172.8':f);constapi=newApi({rpc,signatureProvider,textDecoder:newTextDecoder(),textEncoder:newTextEncoder()});SignatureProvider是通过dist/eosjs-api-interfaces.SignatureProvider接口实现的。如下:const{JsSignatureProvider}=require('eosjs/dist/eosjs-jssig');该方法是开发者为签名提供者提供的一个简单选项,主要作为示例。出于安全考虑,建议只使用开发中使用的。在生产代码中,建议使用安全库(即eosjs-api-interfaces.SignatureProvider接口)来确保签署交易时的安全性。官方推荐的库:LedgerSignatureProvider**。(四)基本用法1.在nodejs中使用eosjs:通过commonjs语法导入。关键代码如下:const{Api,JsonRpc}=require('eosjs');//引入eosjs中的两个核心对象const{JsSignatureProvider}=require('eosjs/dist/eosjs-jssig');//signatureprovider,只能在开发环境中使用constfetch=require('node-fetch');//只有节点;浏览器不需要,只有nodejs需要,浏览器不需要。node-fetch版本需要使用2.6.6版本const{TextEncoder,TextDecoder}=require('util');//转码器constdefaultPrivateKey="5JWuxonweDjwWFuXRwt4sqj5YriEc8ehZh6EKszYYcf3Puh6gAa";//运行链私钥constsignatureProvider=newJsS[defaultPrivateKey]);//对私钥进行签名constrpc=newJsonRpc('http://172.0.0.1:8888',{fetch});//http://172.0.0.1:8888是链的地址constapi=newApi({rpc,signatureProvider,textDecoder:newTextDecoder(),textEncoder:newTextEncoder()});//实例化api,可以直接通过api操作链//下面的自执行函数是事务操作(async()=>{constresult=awaitapi.transact({actions:[{account:'eosio.token',name:'transfer',authorization:[{actor:'eosio',permission:'active',}],data:{from:'eosio',to:'user2',quantity:'0.0001SYS',备忘录:'测试',},}]},{blocksBehind:3,expireSeconds:30,});控制台目录(结果);})();2.在浏览器中使用eosjs,先从官方仓库拉取eosjs。仓库地址为:https://github。com/EOSIO/eosj...。
在cmd管理器中依次执行以下代码:
(1)从远程仓库拉取代码。gitclonehttps://github.com/EOSIO/eosjs.git(2)进入eosjs文件夹。cd./eosjs(3)加载依赖包。npminstall(4)运行导出的压缩eosjs。npmrunbuild-web或yarnbuild-web这将创建dist-web文件夹和网络分发模块。确保externals.min.js包含eosjs使用的外部包。
(5)使用目标html中的导入后在script标签中添加如下代码:在浏览器中点击html,会运行pre.textContent,交易后返回的结果序列化会打印在页面上
创建好dist-web文件夹和Web分发模块后,在eos文件夹下新建一个html,然后将上面两部分copy把代码放进去,用浏览器打开就可以看到运行结果了。3.在vue项目中使用eosjs:通过ES模块语法导入。
具体代码如下:
import{Api,JsonRpc}from'eosjs';import{JsSignatureProvider}from'eosjs/dist/eosjs-jssig';//可以将下面的代码封装成created中的一个方法,在periodicfunction中可以直接调用,也可以直接扔到createdperiodicfunction中。constdefaultPrivateKey="5JWuxonweDjwWFuXRwt4sqj5YriEc8ehZh6EKszYYcf3Puh6gAa";constsignatureProvider=newJsSignatureProvider([defaultPrivateKey]);constrpc=newJsonRpc('http://172.0.0.1:8888');constapi=newApi({rpc,signatureProvider});(async()=>{constresult=awaitapi.transact({actions:[{account:'eosio.token',name:'transfer',authorization:[{actor:'eosio',permission:'active',}],data:{from:'eosio',to:'user2',quantity:'0.0001SYS',memo:'test',},}]},{blocksBehind:3,expireSeconds:30,});控制台.dir(结果);})();4.在react项目中使用eosjs:通过ES模块语法导入。在react项目中使用eosjs时,代码和vue项目中是一样的。需要注意的是react-script的版本:
因为项目是通过react脚手架创建的,默认使用的react-scripts是最新版本,事务时会报buffererror,需要更改“反应脚本”到“反应脚本”的版本:“4.0.3”。