All files / src orestandardtoken.js

76.47% Statements 39/51
55.17% Branches 16/29
81.82% Functions 9/11
76.47% Lines 39/51

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 1289x   9x 9x       6x 6x 4x 4x   2x 2x 2x                       1x 1x 1x   1x                           3x 3x 3x   3x           2x             2x         2x 2x 2x 2x 2x   2x   2x         5x 5x 5x             1x 1x 1x   1x           4x 4x 4x   4x                         9x                        
const { ChainAction, composeAction } = require('./compose');
 
const TABLE_NAME = 'accounts';
const ALLOWANCE_TABLE = 'allowances';
 
/* Public */
function getAmount(tokenAmount, tokenSymbol) {
  try {
    if (typeof tokenAmount === 'number') {
      const amount = parseFloat(tokenAmount).toFixed(4);
      return `${amount.toString()} ${tokenSymbol}`;
    }
    Eif (typeof tokenAmount === 'string') {
      Eif (tokenAmount.split(' ')[1] === tokenSymbol) {
        return tokenAmount;
      }
 
      return `${parseFloat(tokenAmount).toFixed(4).toString()} ${tokenSymbol}`;
    }
    throw new Error('not a valid token amount');
  } catch (e) {
    return e;
  }
}
 
function createToken(toAccountName, ownerAccountName, tokenAmount, contractName, permission = 'active', broadcast = true) {
  const args = { contractName, ownerAccountName, toAccountName, tokenAmount, permission };
  const action = composeAction(ChainAction.Token_Create, args);
  const actions = [action];
 
  return this.transact(actions, broadcast);
}
 
function issueToken(toAccountName, tokenAmount, ownerAccountName, contractName, memo = '', permission = 'active', broadcast = true) {
  const args = { contractName, ownerAccountName, toAccountName, tokenAmount, memo, permission };
  const action = composeAction(ChainAction.Token_Issue, args);
  const actions = [action];
 
  return this.transact(actions, broadcast);
}
 
// cleos push action cpu.ore approve '[""]
function approveTransfer(fromAccountName, toAccountName, tokenAmount, contractName, memo = '', permission = 'active', broadcast = true) {
  // Appprove some account to spend on behalf of approving account
  const args = { contractName, memo, fromAccountName, toAccountName, tokenAmount, permission };
  const action = composeAction(ChainAction.Token_Approve, args);
  const actions = [action];
 
  return this.transact(actions, broadcast);
}
 
// cleos get table token.ore test1.acnt allowances
async function getApprovedAccount(accountName, contractName) {
  // Returns all the accounts approved by the approving account
  const approvedAccounts = await this.eos.rpc.get_table_rows({
    code: contractName,
    json: true,
    scope: accountName,
    table: ALLOWANCE_TABLE,
    limit: -1
  });
  return approvedAccounts.rows;
}
 
async function getApprovedAmount(fromAccount, toAccount, tokenSymbol, contractName) {
  // Returns the amount approved by the fromAccount for toAccount
  let approvedAmount = 0;
  const approvedAccounts = await this.getApprovedAccount.bind(this)(fromAccount, contractName);
  approvedAccounts.filter((obj) => {
    Eif (obj.to === toAccount) {
      approvedAmount = obj.quantity;
    }
    return approvedAmount;
  });
  return this.getAmount(approvedAmount, tokenSymbol);
}
 
// cleos get currency balance cpu.ore test1.acnt CPU
async function getBalance(accountName, tokenSymbol, contractName) {
  const balance = await this.eos.rpc.get_currency_balance(contractName, accountName, tokenSymbol);
  Eif (balance && balance[0]) {
    return parseFloat(balance[0].split(tokenSymbol)[0]);
  }
  return parseFloat(0.0000);
}
 
function retireToken(ownerAccountName, tokenAmount, contractName, memo = '', permission = 'active', broadcast = true) {
 
  const args = { contractName, ownerAccountName, tokenAmount, memo, permission };
  const action = composeAction(ChainAction.Token_Retire, args);
  const actions = [action];
 
  return this.transact(actions, broadcast);
}
 
// cleos push action cpu.ore transfer '["test1.acnt", "test2.acnt", "10.0000 CPU", "memo"]' -p test1.acnt
function transferToken(fromAccountName, toAccountName, tokenAmount, contractName, memo = '', permission = 'active', broadcast = true) {
 
  const args = { contractName, fromAccountName, toAccountName, tokenAmount, memo, permission };
  const action = composeAction(ChainAction.Token_Transfer, args);
  const actions = [action];
 
  return this.transact(actions, broadcast);
}
 
// cleos push action cpu.ore transferFrom '["app.acnt", "test1.acnt", "test2.acnt", "10.0000 CPU"]' -p app.acnt
function transferFrom(approvedAccountName, fromAccountName, toAccountName, tokenAmount, contractName, memo = '', permission = 'active', broadcast = true) {
 
  const args = { approvedAccountName, contractName, fromAccountName, toAccountName, tokenAmount, memo, permission };
  const action = composeAction(ChainAction.Token_TransferFrom, args);
  const actions = [action];
 
  return this.transact(actions, broadcast);
}
 
module.exports = {
  approveTransfer,
  createToken,
  getAmount,
  getApprovedAccount,
  getApprovedAmount,
  getBalance,
  issueToken,
  retireToken,
  transferToken,
  transferFrom
};