@bluefin-exchange/bluefin7k-aggregator-sdk
Version:
49 lines (48 loc) • 2.09 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.BluefinXContract = void 0;
const bcs_1 = require("@mysten/sui/bcs");
const utils_1 = require("@mysten/sui/utils");
const sui_1 = require("../../../utils/sui");
const base_1 = require("../base");
const BcsQuote = bcs_1.bcs.struct("Quote", {
vault: bcs_1.bcs.Address,
id: bcs_1.bcs.string(),
taker: bcs_1.bcs.Address,
token_in_amount: bcs_1.bcs.u64(),
token_out_amount: bcs_1.bcs.u64(),
token_in_type: bcs_1.bcs.string(),
token_out_type: bcs_1.bcs.string(),
expires_at: bcs_1.bcs.u64(),
created_at: bcs_1.bcs.u64(),
});
class BluefinXContract extends base_1.BaseContract {
async swap(tx) {
const extra = this.extra;
const quoteBytes = BcsQuote.serialize({
vault: extra.vault,
id: extra.quoteId,
taker: extra.taker,
token_in_amount: this.swapInfo.amount,
token_out_amount: this.swapInfo.returnAmount,
token_in_type: (0, utils_1.normalizeStructTag)(this.swapInfo.assetIn).slice(2),
token_out_type: (0, utils_1.normalizeStructTag)(this.swapInfo.assetOut).slice(2),
expires_at: extra.quoteExpiresAtUtcMillis,
created_at: extra.createdAtUtcMillis,
}).toBytes();
const [out] = tx.moveCall({
arguments: [
tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
tx.object(extra.vault),
tx.object(this.config.bluefinx.globalConfig),
tx.pure.vector("u8", Array.from(quoteBytes)),
tx.pure.vector("u8", Array.from((0, utils_1.fromBase64)(extra.signature))),
sui_1.SuiUtils.coinIntoBalance(tx, this.swapInfo.assetIn, this.inputCoinObject),
],
target: `${this.config.bluefinx.package}::vault::swap`,
typeArguments: [this.swapInfo.assetIn, this.swapInfo.assetOut],
});
return sui_1.SuiUtils.coinFromBalance(tx, this.swapInfo.assetOut, out);
}
}
exports.BluefinXContract = BluefinXContract;
;