前端调scatter--区块链

/*

 * @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

    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值