UNPKG

@dxdao/aqua

Version:

AquaJS gives developers access to the entire Aqua ecosystem a single package

112 lines 6.36 kB
"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