@dxdao/aqua
Version:
AquaJS gives developers access to the entire Aqua ecosystem a single package
112 lines • 6.36 kB
JavaScript
"use strict";
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.Aqua = void 0;
const aqua_sc_1 = require("@dxdao/aqua-sc");
const errors_1 = require("./errors");
const Subgraph_1 = require("./Subgraph");
class Aqua {
constructor({ factory, saleLauncher, templateLauncher, subgraph }, signerOrProvider) {
this.factory = aqua_sc_1.AquaFactory__factory.connect(factory, signerOrProvider);
this.saleLauncher = aqua_sc_1.SaleLauncher__factory.connect(saleLauncher, signerOrProvider);
this.templateLauncher = aqua_sc_1.TemplateLauncher__factory.connect(templateLauncher, signerOrProvider);
this.subgraph = new Subgraph_1.Subgraph(subgraph);
this.provider = signerOrProvider;
this.confirmationNumber = 3;
}
contracts() {
return {
factory: this.factory,
saleLauncher: this.saleLauncher,
templateLauncher: this.templateLauncher,
};
}
addSaleModule(saleAddress) {
return __awaiter(this, void 0, void 0, function* () {
const addTemplateTx = yield this.saleLauncher.addTemplate(saleAddress);
const addTemplateTxReceipt = addTemplateTx.wait(this.confirmationNumber);
return addTemplateTxReceipt;
});
}
addSaleTemplate(saleTemplateAddress) {
return __awaiter(this, void 0, void 0, function* () {
const addTemplateTx = yield this.templateLauncher.addTemplate(saleTemplateAddress);
const addTemplateTxReceipt = yield addTemplateTx.wait(this.confirmationNumber);
return addTemplateTxReceipt;
});
}
createFixedPriceSale(saleOptions, metaData) {
return __awaiter(this, void 0, void 0, function* () {
const templateName = `FixedPriceSaleTemplate`;
const transactions = [];
const saleTemplates = yield this.subgraph.getSaleTemplates();
const template = saleTemplates.find(({ name }) => name == templateName);
if (!template) {
throw new errors_1.SaleTemplateNotRegistered(templateName);
}
const saleOptionsInitDataBytes = (0, aqua_sc_1.encodeInitDataFixedPriceSale)(Object.assign(Object.assign({}, saleOptions), { saleLauncher: this.saleLauncher.address, saleTemplateId: template.id }));
const launchTemplateTx = yield this.factory.launchTemplate(template.id, saleOptionsInitDataBytes, metaData);
transactions.push(launchTemplateTx);
const launchTemplateTxRecipt = yield launchTemplateTx.wait(this.confirmationNumber);
const templateAddress = this.getLaunchedTemplateAddress(launchTemplateTxRecipt);
const saleTemplate = aqua_sc_1.FixedPriceSaleTemplate__factory.connect(templateAddress, this.provider);
const createSaleTx = yield saleTemplate.createSale({
value: yield this.factory.saleFee(),
});
transactions.push(createSaleTx);
const createSaleTxReceipt = yield createSaleTx.wait(this.confirmationNumber);
const newSaleAddress = `0x${createSaleTxReceipt.logs[0].topics[1].substring(26)}`;
return {
sale: aqua_sc_1.FixedPriceSale__factory.connect(newSaleAddress, this.provider),
transactions,
};
});
}
createFairSale(saleOptions, metaData) {
return __awaiter(this, void 0, void 0, function* () {
const templateName = `FairSaleTemplate`;
const transactions = [];
const saleTemplates = yield this.subgraph.getSaleTemplates();
const template = saleTemplates.find(({ name }) => name == templateName);
if (!template) {
throw new errors_1.SaleTemplateNotRegistered(templateName);
}
const saleOptionsInitDataBytes = (0, aqua_sc_1.encodeInitDataFairSale)(Object.assign(Object.assign({}, saleOptions), { saleLauncher: this.saleLauncher.address, saleTemplateId: template.id }));
const launchTemplateTx = yield this.factory.launchTemplate(template.id, saleOptionsInitDataBytes, metaData);
transactions.push(launchTemplateTx);
const launchTemplateTxRecipt = yield launchTemplateTx.wait(this.confirmationNumber);
const templateAddress = this.getLaunchedTemplateAddress(launchTemplateTxRecipt);
const saleTemplate = aqua_sc_1.FixedPriceSaleTemplate__factory.connect(templateAddress, this.provider);
const createSaleTx = yield saleTemplate.createSale({
value: yield this.factory.saleFee(),
});
transactions.push(createSaleTx);
const createSaleTxReceipt = yield createSaleTx.wait(this.confirmationNumber);
const newSaleAddress = `0x${createSaleTxReceipt.logs[0].topics[1].substring(26)}`;
return {
sale: aqua_sc_1.FairSale__factory.connect(newSaleAddress, this.provider),
transactions,
};
});
}
getLaunchedTemplateAddress(transctionReceipt) {
if (!transctionReceipt.events) {
throw new errors_1.AquaError('Transction did not emit any event');
}
const eventTemplateLaunched = transctionReceipt.events.find(event => event.event === this.factory.interface.events['TemplateLaunched(address,uint256)'].name);
if (!eventTemplateLaunched || !eventTemplateLaunched.args) {
throw new errors_1.AquaError('Transction did not emit TemplateLaunched event');
}
return eventTemplateLaunched.args.template;
}
}
exports.Aqua = Aqua;
//# sourceMappingURL=Aqua.js.map