@open-rights-exchange/orejs
Version:
Orejs is a Javascript helper library to provide simple high-level access to the ore-protocol. Orejs uses eosJS as a wrapper to the EOS blockchain.
128 lines (105 loc) • 4.63 kB
JavaScript
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}`;
}
if (typeof tokenAmount === 'string') {
if (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) => {
if (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);
if (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
};