@devasher/kuru-sdk
Version:
Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)
90 lines • 3.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PositionProvider = void 0;
const ethers_1 = require("ethers");
const OrderBook_json_1 = __importDefault(require("../../abi/OrderBook.json"));
const txConfig_1 = __importDefault(require("../utils/txConfig"));
class PositionProvider {
/**
* @dev Submits a batch of liquidity positions to the contract
* @param signer - The signer object
* @param contractAddress - The contract address
* @param batchDetails - The batch liquidity position details
* @returns A promise that resolves to the transaction
*/
static async provisionLiquidity(signer, contractAddress, batchDetails) {
// Create contract instance
const contract = new ethers_1.ethers.Contract(contractAddress, OrderBook_json_1.default.abi, signer);
const prices = [];
const flipPrices = [];
const sizes = [];
const isBuy = [];
// Add bids
for (const bid of batchDetails.bids) {
prices.push(bid.price);
flipPrices.push(bid.flipPrice);
sizes.push(bid.liquidity);
isBuy.push(true);
}
// Add asks
for (const ask of batchDetails.asks) {
prices.push(ask.price);
flipPrices.push(ask.flipPrice);
sizes.push(ask.liquidity);
isBuy.push(false);
}
// Call the contract with provisionOrRevert = false
const tx = await contract.batchProvisionLiquidity(prices, flipPrices, sizes, isBuy, false);
const receipt = await tx.wait();
return receipt;
}
/**
* @dev Constructs a transaction for batch liquidity provision
* @param signer - The signer instance
* @param contractAddress - The contract address
* @param batchDetails - The batch liquidity position details
* @param txOptions - Transaction options
* @returns A promise that resolves to the transaction request object
*/
static async constructBatchProvisionTransaction(signer, contractAddress, batchDetails, txOptions) {
const address = await signer.getAddress();
const prices = [];
const flipPrices = [];
const sizes = [];
const isBuy = [];
// Add bids
for (const bid of batchDetails.bids) {
prices.push(bid.price);
flipPrices.push(bid.flipPrice);
sizes.push(bid.liquidity);
isBuy.push(true);
}
// Add asks
for (const ask of batchDetails.asks) {
prices.push(ask.price);
flipPrices.push(ask.flipPrice);
sizes.push(ask.liquidity);
isBuy.push(false);
}
const orderbookInterface = new ethers_1.ethers.Interface(OrderBook_json_1.default.abi);
const data = orderbookInterface.encodeFunctionData('batchProvisionLiquidity', [
prices,
flipPrices,
sizes,
isBuy,
false,
]);
return (0, txConfig_1.default)({
from: address,
to: contractAddress,
signer,
data,
txOptions,
});
}
}
exports.PositionProvider = PositionProvider;
//# sourceMappingURL=provision.js.map