UNPKG

@algodex/algodex-sdk

Version:

API calls for interacting with the Algorand blockchain

59 lines (56 loc) 2 kB
/* * Copyright (C) 2021-2022 Algodex VASP (BVI) Corp. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ const algosdk = require('algosdk'); const withUnits = require('./withUnits'); const withLogicSigAccount = require('./withLogicSigAccount.js'); const withOrderbookEntry = require('./withOrderbookEntry.js'); const logger = require('../../logger'); /** * ## 🏗 [Compile Order](#compile) * * Takes an {@link Order} and compiles it into the required shape for the sdk. * This includes converting floats to {@link BaseUnits} with Numerator and * Denominator. The {@link BaseUnits} properties are used to compile the * delegate template. Then it constructs a {@link LogicSigAccount} which is * the main output of the compile step. * * @example * const {order: compile} = require('@algodex/sdk') * const order = compile({ * "client": new algosdk.Algodv2(), * "asset": { * "id": 15322902, * "decimals": 6, * }, * "address": "TJFFNUYWHPPIYDE4DGGYPGHWKGAPJEWP3DGE5THZS3B2M2XIAPQ2WY3X4I", * "price": 2.22, * "amount": 1, * "total": 2, * "execution": "maker", * "type": "buy", * "appId": 22045503, * "version": 6 * }) * console.log(order.contract.lsig) * // Outputs LogicSigAccount * * @param {Order} o The Order Object * @return {Promise<Order>} Returns a composed order with ContractState * @memberOf module:order/compile */ async function compile( o) { logger.debug(`compile(Order) as ${o.execution}`); if (!(o?.client instanceof algosdk.Algodv2)) { throw new TypeError('Invalid Algod Client!'); } if (typeof o?.asset === 'undefined' || (typeof o?.asset?.decimals !== 'number' && typeof o?.contract?.N === 'undefined')) { throw new TypeError('Invalid Asset!!'); } return await withLogicSigAccount(withOrderbookEntry(withUnits(o))); } module.exports = compile;