【三胖聊区块链-EOS】(十一)EOS入门系列-开发DAPP之EOS.JS的使用

1,579 阅读2分钟

github源码:我在这呢

上一篇:【三胖聊区块链-EOS】(十)EOS入门系列-智能合约之VS Code工具开发配置

引言:
eosjs是访问EOS区块链的JavaScript开发包,它通过RPC API访问EOS节点, 同时包含了密钥签名、交易序列化等本地操作 本篇教程只适合本地开发使用

1.npm安装eosjs

 npm install eosjs

2.引入EOS包

import { Api, JsonRpc, RpcError } from 'eosjs'

//目前eosjs中包含的JsSignatureProvider在内存中管理私钥,
//在浏览器里使用 这个签名提供器是不安全的,仅限开发环境使用
import { JsSignatureProvider } from 'eosjs/dist/eosjs-jssig' //签名提供器


例子:
//账号的私钥

const defaultPrivateKey = "5JtUScZK2XEp3g9gh7F8bwtPTRAkASmNrrftmx4AxDKD5K4zDnr"; 
const signatureProvider = new JsSignatureProvider([defaultPrivateKey]);

3.JSON-RPC调用

//JsonRpc类封装了EOS JSON-RPC调用,在Nodejs中使用时,记得设置fetch API:

const rpc = new JsonRpc('http://127.0.0.1:8888', { fetch });

4.连接示例:

import { Api, JsonRpc, RpcError } from 'eosjs'
import { JsSignatureProvider } from 'eosjs/dist/eosjs-jssig'

let config = {
//需要调用的节点地址
rpc: new JsonRpc('http://api.kylin.alohaeos.com', { fetch }), 
//自带签名器,会根据私钥获得对应公钥,连接本地节点时有用,
//若是连接公网节点,则不可使用,因为公钥与公网的公钥不一致,
//会导致在需要签名的操作前调用失效,
//返回TypeError: Cannot read property 'getAvailableKeys' of undefined
authorityProvider: new JsSignatureProvider(['5HvNc2K7HhmVTHUt5pL56hHxveX4EXGJn7UhNi6SSp1g7iwTAUD' ]),
//通过getInfo查看区块链节点信息获得
chainId: '5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191',
textDecoder: null,
textEncoder: null
}
const eos = new Api(config)
export default e信息获取

5.调用api

eos.rpc.get_info().then(result => { console.log(result) })

eos.rpc.get_account('eosxusanpang').then(result => { console.log(result) })

eos.rpc.get_currency_balance('eosio.token', 'eosxusanpang', 'EOS').then(result => { console.log(result) })

6.调用智能合约,发起一个transaction交易

 eos.transact({
   actions: [{
       account: 'xwjselftoken', //合约账户
       name: 'upsert', //合约内的action
       authorization: [{
         actor: 'xwjselftoken', //调用合约的账户
         permission: 'active', //权限
       }],
       data: {
         user: 'xwjselftoken',
         first_name: 'xwj',
         last_name: 'xwj',
         age: 10,
         street: 'xwj',
         city: 'xwj',
         state: 'xwj'
       },
   }]
 },
 {
   blocksBehind: 3, //判断交易是否超时
   expireSeconds: 30, //判断交易是否超时
 }).then(result => { console.log(result) }).catch(err => console.log(err))
}

更多

想了解更多,请关注公众号哦!