client-aftermath-ts-sdk
Version:
Client Aftermath TypeScript SDK
77 lines (76 loc) • 4 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OracleApi = void 0;
const transactions_1 = require("@mysten/sui/transactions");
const utils_1 = require("../../../general/utils");
const sui_1 = require("../../sui");
const eventsApiHelpers_1 = require("../../../general/apiHelpers/eventsApiHelpers");
class OracleApi {
// =========================================================================
// Constructor
// =========================================================================
constructor(Provider) {
this.Provider = Provider;
// =========================================================================
// Inspections
// =========================================================================
this.fetchPrice = (inputs) => __awaiter(this, void 0, void 0, function* () {
const tx = new transactions_1.Transaction();
this.getPriceTx(Object.assign(Object.assign({}, inputs), { tx }));
const priceBytes = yield this.Provider.Inspections().fetchFirstBytesFromTxOutput({
tx,
});
const price = utils_1.Casting.bigIntFromBytes(priceBytes);
return utils_1.Casting.IFixed.numberFromIFixed(price);
});
// =========================================================================
// Transaction Commands
// =========================================================================
this.getPriceTx = (inputs) => {
const { tx, priceFeedId } = inputs;
return tx.moveCall({
target: utils_1.Helpers.transactions.createTxTarget(this.addresses.packages.oracleReader, "oracle_reader", "get_average_price_for_all_sources"),
typeArguments: [],
arguments: [
tx.object(priceFeedId),
tx.object(sui_1.Sui.constants.addresses.suiClockId),
tx.pure.u64(utils_1.Casting.u64MaxBigInt),
tx.pure.bool(false),
tx.pure.bool(false), // may abort
],
});
};
// =========================================================================
// Private
// =========================================================================
// =========================================================================
// Event Types
// =========================================================================
this.eventType = (eventName) => eventsApiHelpers_1.EventsApiHelpers.createEventType(this.addresses.packages.events, OracleApi.constants.moduleNames.events, eventName);
const addresses = this.Provider.addresses.oracle;
if (!addresses)
throw new Error("not all required addresses have been set in provider");
this.addresses = addresses;
this.eventTypes = {
updatedPriceFeed: this.eventType("UpdatedPriceFeed"),
};
}
}
exports.OracleApi = OracleApi;
// =========================================================================
// Class Members
// =========================================================================
OracleApi.constants = {
moduleNames: {
events: "events",
},
};