UNPKG

@algodex/algodex-sdk

Version:

API calls for interacting with the Algorand blockchain

85 lines (81 loc) 3.23 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 getMakerTxns = require('./getMakerTxns'); /** * # 🔗 withMakerTxns * Accepts an [Order]{@link Order} with execution type [Maker]{@tutorial Maker} and generates the relevant transactions. * * * ### Existing Escrow (Only relevant for [makePlaceAlgo]{@link module:txns/buy.makePlaceAlgo} ) * When a user places a maker order, we first check to see if the [Algodex Orderbook]{@tutorial Orderbook} already has an Order entry at that price, from that User. * * If that order exists, we generate a set of transactions that adds to the existing order. * * If the order does not exist, we generate a set of transactions to create a new maker order. * * You can learn more about the differences between the two types of transactions in the trasnaction table for [makePlaceAlgoTxns]{@link module:txns/buy.makePlaceAlgoTxns} factory. * * ### When is it used? * This method and the corresponding Factory is used anytime a Maker order is added to the [Algodex Orderbook]{@tutorial Orderbook}. * * This method is the maker leg of [getMakerTakerTxns]{@link module:order/structures.getMakerTakerTxns}. * * This method would be ideal for use in algorithmic trading strategies and for programmaticaly providing liquidity to the [Algodex Orderbook]{@tutorial Orderbook} * * * * * @example * const [AlgodexAPI]{@link AlgodexApi} = require(@algodex/algodex-sdk) * const api = new [AlgodexAPI]{@link AlgodexApi}(require('../config.json')) * const order = { * "client": api.algod, * "indexer": api.indexer, * "asset": { * "id": 15322902, * "decimals": 6, * }, * "address": "TJFFNUYWHPPIYDE4DGGYPGHWKGAPJEWP3DGE5THZS3B2M2XIAPQ2WY3X4I", * "price": 2.22, * "amount": 1, * "total": 2, * "execution": "maker", * "type": "buy", * "appId": 22045503, * "version": 6 * } * const {[compile]{@link module:order/compile}} = require(@algodex/algodex-sdk/order) * * //order.execution === 'maker' * let res = await withMakerTxns(api, await [compile]{@link module:order/compile}(order)) * console.log(res.contract.txns) * //Outputs: * [makePlaceAlgoTxns]{@link module:txns/buy.makePlaceAlgoTxns} || [makePlaceAssetTxns]{@link module:txns/sell.makePlaceAssetTxns} * * @param {Api} api Instance of AlgodexApi * @param {Order} order The User's Order * @return {Promise<Order>} * @memberOf module:order/structure * @see [getMakerTxns]{@link getMakerTxns} || [makePlaceAlgoTxns]{@link module:txns/buy.makePlaceAlgoTxns} || [makePlaceAssetTxns]{@link module:txns/sell.makePlaceAssetTxns} */ async function withMakerTxns(api, order) { const isExistingEscrow = await api.getIsExistingEscrow(order); if (isExistingEscrow) { order.contract = { ...order.contract, creator: order.address, }; } return { ...order, contract: { ...order.contract, txns: await getMakerTxns(order, isExistingEscrow), creator: order.address, }, }; } module.exports = withMakerTxns;