machinomy
Version:
Micropayments powered by Ethereum
40 lines • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const PaymentChannel_1 = require("./PaymentChannel");
const ChannelState_1 = require("./ChannelState");
const bignumber_js_1 = require("bignumber.js");
class ChannelInflator {
constructor(channelEthContract, channelTokenContract) {
this.channelEthContract = channelEthContract;
this.channelTokenContract = channelTokenContract;
}
static isTokenContractDefined(tokenContract) {
// tslint:disable-next-line:strict-type-predicates
return tokenContract !== undefined && tokenContract !== null && tokenContract.startsWith('0x') && parseInt(tokenContract, 16) !== 0;
}
async inflate(paymentChannelJSON) {
const tokenContract = paymentChannelJSON.tokenContract;
const channelId = paymentChannelJSON.channelId;
const contract = this.actualContract(tokenContract);
const state = await contract.getState(channelId);
const channel = await contract.channelById(channelId);
if (channel) {
const value = channel[2];
const settlingUntil = new bignumber_js_1.BigNumber(channel[4]);
return new PaymentChannel_1.PaymentChannel(paymentChannelJSON.sender, paymentChannelJSON.receiver, paymentChannelJSON.channelId, value, paymentChannelJSON.spent, state === ChannelState_1.ChannelState.Impossible ? ChannelState_1.ChannelState.Settled : state, paymentChannelJSON.tokenContract, paymentChannelJSON.settlementPeriod, settlingUntil);
}
else {
return null;
}
}
actualContract(tokenContract) {
if (ChannelInflator.isTokenContractDefined(tokenContract)) {
return this.channelTokenContract;
}
else {
return this.channelEthContract;
}
}
}
exports.default = ChannelInflator;
//# sourceMappingURL=ChannelInflator.js.map