machinomy
Version:
Micropayments powered by Ethereum
92 lines • 4.03 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const logger_1 = require("@machinomy/logger");
const ChannelInflator_1 = require("./ChannelInflator");
const LOG = new logger_1.default('channel-contract');
class ChannelContract {
constructor(web3, channelsDao, channelEthContract, channelTokenContract) {
this.channelEthContract = channelEthContract;
this.channelTokenContract = channelTokenContract;
this.channelsDao = channelsDao;
}
async open(sender, receiver, value, settlementPeriod, channelId, tokenContract) {
if (ChannelInflator_1.default.isTokenContractDefined(tokenContract)) {
return this.channelTokenContract.open(sender, receiver, value, settlementPeriod, tokenContract, channelId);
}
else {
return this.channelEthContract.open(sender, receiver, value, settlementPeriod, channelId);
}
}
async claim(receiver, channelId, value, signature) {
const contract = await this.getContractByChannelId(channelId);
return contract.claim(receiver, channelId, value, signature);
}
async deposit(sender, channelId, value, tokenContract) {
if (ChannelInflator_1.default.isTokenContractDefined(tokenContract)) {
return this.channelTokenContract.deposit(sender, channelId, value, tokenContract);
}
else {
return this.channelEthContract.deposit(sender, channelId, value);
}
}
async getState(channelId) {
const contract = await this.getContractByChannelId(channelId);
return contract.getState(channelId);
}
async getSettlementPeriod(channelId) {
const contract = await this.getContractByChannelId(channelId);
return contract.getSettlementPeriod(channelId);
}
async startSettle(account, channelId) {
const contract = await this.getContractByChannelId(channelId);
return contract.startSettle(account, channelId);
}
async finishSettle(account, channelId) {
const contract = await this.getContractByChannelId(channelId);
return contract.finishSettle(account, channelId);
}
async paymentDigest(channelId, value) {
const channel = await this.channelsDao.firstById(channelId);
if (channel) {
const tokenContract = channel.tokenContract;
if (ChannelInflator_1.default.isTokenContractDefined(tokenContract)) {
return this.channelTokenContract.paymentDigest(channelId, value, tokenContract);
}
else {
return this.channelEthContract.paymentDigest(channelId, value);
}
}
else {
throw new Error(`Channel ${channelId} is not found`);
}
}
async canClaim(payment) {
const channelId = payment.channelId;
const value = payment.value;
const receiver = payment.receiver;
const signature = payment.signature;
if (ChannelInflator_1.default.isTokenContractDefined(payment.tokenContract)) {
return this.channelTokenContract.canClaim(channelId, value, receiver, signature);
}
else {
return this.channelEthContract.canClaim(channelId, value, receiver, signature);
}
}
async channelById(channelId) {
const contract = await this.getContractByChannelId(channelId);
return contract.channelById(channelId);
}
async getContractByChannelId(channelId) {
const channel = await this.channelsDao.firstById(channelId);
if (channel) {
const tokenContract = channel.tokenContract;
return ChannelInflator_1.default.isTokenContractDefined(tokenContract) ? this.channelTokenContract : this.channelEthContract;
}
else {
LOG.info(`getContractByChannelId(): Channel ${channelId} is undefined`);
return this.channelEthContract;
}
}
}
exports.default = ChannelContract;
//# sourceMappingURL=ChannelContract.js.map