/*
* @Description: scatter.js
* @Author: wy
* @Date: 2019-07-06 14:45:59
* @LastEditTime: 2019-09-17 16:05:43
*/
1、scatter.js
import Scatscatter.jsterJs from 'scatterjs-core'
import EosPlugin from 'scatterjs-plugin-eosjs2'
import {
JsonRpc,
Api
} from 'eosjs'
ScatterJs.plugins(new EosPlugin())
const debug = process.env.NODE_ENV !== 'production'
// let devNetWork = ScatterJS.Network.fromJson({
// blockchain: 'eos',
// protocol: 'https',
// host: 'api-kylin.eosasia.one',
// port: 443,
// chainId: '5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191'
// })
let devNetWork = ScatterJS.Network.fromJson({
blockchain: 'eos',
protocol: 'https',
host: 'eos.newdex.one',
port: 443,
chainId: 'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906'
}) //线上
let proNetWork = ScatterJS.Network.fromJson({
blockchain: 'eos',
protocol: 'https',
host: 'api-mainnet.starteos.io',
port: 443,
chainId: 'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906'
}) //线下
// let network = debug ? devNetWork : proNetWork
let network = devNetWork
// const network = {
// blockchain: 'eos',
// protocol: 'http',
// host: 'jungle2.cryptolions.io',
// port: 80,
// chainId: 'e70aaab8997e1dfce58fbfac80cbbb8fecec7b99cf982a9444273cbc64c41473'
// } // jungle2
let rpc = new JsonRpc(network.fullhost())
let scatterConnected = false
let loginAccount = null
export default {
//判断当前钱包是否为starteos钱包
async isSterteos () {
let agent = navigator.userAgent;
let _indexOf = agent.indexOf("Starteos")
if (_indexOf != -1) {
// import dappSDK from 'dappsdk'
dappSDK = require('dappsdk')
try {
let res = await dappSDK.eos.getCurrentWalletAccount()
if (res.account) {
return true
}
return false
} catch (error) {
return false
}
} else {
return true
}
},
async s_connect () {
let dappS = await this.isSterteos()
if (!dappS) {
return {
result: false,
error: 'please Make sure your wallet exists'
}
}
if (scatterConnected === false) {
try {
let _connect = await ScatterJs.connect('USDE', {
network
})
if (!_connect) {
return {
result: false,
error: 'please Make sure your wallet exists'
}
}
} catch (error) {
return {
result: false,
error: 'please Make sure your wallet exists'
}
}
try {
console.log(0)
let identity = await ScatterJs.getIdentity()
console.log('identity: ', identity);
loginAccount = identity.accounts.find(a => a.blockchain === 'eos')
if (loginAccount === null) {
return {
result: false,
error: 'occur erros while getting scatter identity'
}
}
scatterConnected = true
} catch (error) {
console.log('error: ', error);
return {
result: false,
error: 'please Make sure your wallet exists'
}
}
}
return {
result: true,
error: '',
loginAccount: loginAccount
}
},
async s_logout () {
if (loginAccount) {
await ScatterJs.forgetIdentity()
}
},
s_getAccountName () {
if (loginAccount !== null) {
return loginAccount.name
} else {
return ''
}
},
async s_getUSDEamount () {
if (scatterConnected === false || loginAccount === null) {
return {
result: false,
error: 'need to login before getting amount data'
}
}
let rows = null
try {
// let token = debug ? 'eosiofortoke' : 'usdetotokens' // touken认证
let token = "usdetotokens" // touken认证
rows = await rpc.get_currency_balance(token, loginAccount.name, 'USDE')
} catch (e) {
return {
result: false,
error: e
}
}
return {
result: true,
rows: rows
}
}, // 获取USDE数量
async s_buy (options, sign = true) {
if (scatterConnected === false || loginAccount === null) {
return {
result: false,
error: 'need to login before getting table data'
}
}
console.log(loginAccount)
const eos = ScatterJs.eos(network, Api, {
rpc,
beta3: true
})
let txJson = null
let action = {
actions: [{
// account: 'eosiofortoke', // 测试
account: 'usdetotokens', //线上
// account: debug ? 'eosiofortoke' : 'usdetotokens',
name: 'transfer',
authorization: [{
actor: loginAccount.name,
permission: loginAccount.authority
}],
data: {
from: loginAccount.name,
to: `shop.eos`,
quantity: `${Number(options.money).toFixed(4)} USDE`,
memo: 'eosmall商品购买',
}
// packed_trx
// `wish:${options.count} EOS|${options.content}`
}]
}
try {
if (sign) {
txJson = await eos.transact(action, {
broadcast: false,
forceActionDataHex: true,
sign: true,
blocksBehind: 3,
expireSeconds: 60
})
} else {
txJson = await eos.transact(action, {
blocksBehind: 3,
expireSeconds: 60
})
}
} catch (e) {
return {
result: false,
error: e
}
}
return {
result: true,
json: txJson
}
}
}
2、使用
import scatter from '@/utils/scatter'
//获取usde余额
async getBalance (price) {
let res = await scatter.s_getUSDEamount()
this.balance = parseFloat(res.rows[0])
return this.balance >= price
},