From f6e13c3b7969121a72029ddf5d8dd1d273b6122e Mon Sep 17 00:00:00 2001 From: Yamel Amador Fernandez Date: Tue, 30 Aug 2022 09:19:15 -0500 Subject: [PATCH] Change streamUnitsPerSecond to be number to have the ability to use decimal values --- package.json | 2 +- src/types.ts | 2 +- src/utils.ts | 34 +++++++++++++--------------------- tests/index.test.ts | 11 +++++------ 4 files changed, 20 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 2adee80..2559e3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mean-dao/msp", - "version": "3.0.0-alpha.7", + "version": "3.0.0-alpha.8", "description": "MSP Typescript SDK", "private": false, "main": "lib/index.js", diff --git a/src/types.ts b/src/types.ts index 44beb32..84f9be7 100644 --- a/src/types.ts +++ b/src/types.ts @@ -237,7 +237,7 @@ export type Stream = { fundsLeftInStream: BN; fundsSentToBeneficiary: BN; remainingAllocationAmount: BN; - streamUnitsPerSecond: BN; + streamUnitsPerSecond: number; // Dates startUtc: string; createdOnUtc: string; diff --git a/src/utils.ts b/src/utils.ts index c91a9b2..c7e1065 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -550,7 +550,6 @@ const parseGetStreamData = ( ? event.createdOnUtc.toNumber() : 0; - // const startUtcInSeconds = event.startUtc.toNumber(); const startUtcInSeconds = getStreamStartUtcInSeconds(event); const effectiveCreatedOnUtcInSeconds = createdOnUtcInSeconds > 0 @@ -558,9 +557,7 @@ const parseGetStreamData = ( : event.startUtc.toNumber(); const startUtc = new Date(startUtcInSeconds * 1000); - // console.log('startUtc:', startUtc.toString()); const depletionDate = getStreamEstDepletionDate(event); - // console.log('depletionDate:', depletionDate.toString()); const stream = { id: address, @@ -630,9 +627,7 @@ export const parseStreamItemData = ( const timeDiff = Math.round((Date.now() / 1_000) - blockTime); const startUtc = new Date(startUtcInSeconds * 1000); - // console.log('startUtc:', startUtc.toString()); const depletionDate = getStreamEstDepletionDate(stream); - // console.log('depletionDate:', depletionDate.toString()); const streamStatus = getStreamStatus(stream, timeDiff); const streamMissedEarningUnitsWhilePaused = getStreamMissedEarningUnitsWhilePaused(stream); const streamWithdrawableAmount = getStreamWithdrawableAmount(stream, timeDiff); @@ -1346,7 +1341,7 @@ export const getStreamWithdrawableAmount = (stream: any, timeDiff = 0) => { const startUtcInSeconds = getStreamStartUtcInSeconds(stream); const timeSinceStart = blocktimeRelativeNow - startUtcInSeconds; // const nonStopEarningUnits = cliffAmount + streamedUnitsPerSecond * timeSinceStart; - const nonStopEarningUnits = streamedUnitsPerSecond.muln(timeSinceStart).add(cliffAmount); + const nonStopEarningUnits = cliffAmount.addn(streamedUnitsPerSecond * timeSinceStart); // const totalSecondsPaused = // stream.lastKnownTotalSecondsInPausedStatus.toNumber().length >= 10 // ? parseInt( @@ -1359,12 +1354,11 @@ export const getStreamWithdrawableAmount = (stream: any, timeDiff = 0) => { ? parseInt((stream.lastKnownTotalSecondsInPausedStatus.toNumber() / 1_000).toString()) : stream.lastKnownTotalSecondsInPausedStatus.toNumber(); - // const missedEarningUnitsWhilePaused = streamedUnitsPerSecond * totalSecondsPaused; - const missedEarningUnitsWhilePaused = streamedUnitsPerSecond.muln(totalSecondsPaused); + const missedEarningUnitsWhilePaused = streamedUnitsPerSecond * totalSecondsPaused; let entitledEarnings = nonStopEarningUnits; - if (nonStopEarningUnits.gte(missedEarningUnitsWhilePaused)) { - entitledEarnings = nonStopEarningUnits.sub(missedEarningUnitsWhilePaused); + if (nonStopEarningUnits.gten(missedEarningUnitsWhilePaused)) { + entitledEarnings = nonStopEarningUnits.subn(missedEarningUnitsWhilePaused); } let withdrawableUnitsWhileRunning = entitledEarnings; @@ -1395,16 +1389,18 @@ export const getStreamStatus = (stream: any, timeDiff: number) => { return STREAM_STATUS.Paused; } - // Running or automatically paused (ran out of funds) + const totalSecondsPaused = stream.lastKnownTotalSecondsInPausedStatus.toString().length >= 10 + ? parseInt((stream.lastKnownTotalSecondsInPausedStatus.toNumber() / 1_000).toString()) + : stream.lastKnownTotalSecondsInPausedStatus.toNumber(); const cliffUnits = getStreamCliffAmount(stream); const secondsSinceStart = blocktimeRelativeNow - startUtcInSeconds; const streamedUnitsPerSecond = getStreamUnitsPerSecond(stream); - const nonStopEarningUnits = streamedUnitsPerSecond.muln(secondsSinceStart).add(cliffUnits); - const missedEarningUnitsWhilePaused = streamedUnitsPerSecond.mul(stream.lastKnownTotalSecondsInPausedStatus); + const nonStopEarningUnits = cliffUnits.addn(streamedUnitsPerSecond * secondsSinceStart); + const missedEarningUnitsWhilePaused = streamedUnitsPerSecond * totalSecondsPaused; let entitledEarnings = nonStopEarningUnits; - if (nonStopEarningUnits.gte(missedEarningUnitsWhilePaused)) { - entitledEarnings = nonStopEarningUnits.sub(missedEarningUnitsWhilePaused); + if (nonStopEarningUnits.gten(missedEarningUnitsWhilePaused)) { + entitledEarnings = nonStopEarningUnits.subn(missedEarningUnitsWhilePaused); } // Running @@ -1428,17 +1424,13 @@ export const getStreamUnitsPerSecond = (stream: any) => { const interval = stream.rateIntervalInSeconds.toNumber(); if (interval === 0) { - return new BN(0); + return 0; } const rateAmountUnits = new BigNumber(stream.rateAmountUnits.toString()); const streamUnitsPerSecond = rateAmountUnits.dividedBy(interval); - if (streamUnitsPerSecond.lt(1)) { - return new BN(1); - } - - return new BN(streamUnitsPerSecond.toNumber()); + return streamUnitsPerSecond.toNumber(); }; export const getStreamStartUtcInSeconds = (stream: any): number => { diff --git a/tests/index.test.ts b/tests/index.test.ts index df5879f..c0c24a3 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -472,19 +472,18 @@ describe('MSP Tests\n', async () => { streamWithdrawableAmount = new BN(0); } else { const streamUnitsPerSecond = getStreamUnitsPerSecond(stream); - console.log('streamUnitsPerSecond:', streamUnitsPerSecond); const blocktimeRelativeNow = Math.round((Date.now() / 1_000) - timeDiff); const startUtcInSeconds = getStreamStartUtcInSeconds(stream); const timeSinceStart = blocktimeRelativeNow - startUtcInSeconds; - const nonStopEarningUnits = streamUnitsPerSecond.muln(timeSinceStart).add(cliffAmount); + const nonStopEarningUnits = cliffAmount.addn(streamUnitsPerSecond * timeSinceStart); const totalSecondsPaused = stream.lastKnownTotalSecondsInPausedStatus.toString().length >= 10 ? parseInt((stream.lastKnownTotalSecondsInPausedStatus.toNumber() / 1_000).toString()) : stream.lastKnownTotalSecondsInPausedStatus.toNumber(); - const missedEarningUnitsWhilePaused = streamUnitsPerSecond.muln(totalSecondsPaused); + const missedEarningUnitsWhilePaused = streamUnitsPerSecond * totalSecondsPaused; let entitledEarnings = nonStopEarningUnits; - if (nonStopEarningUnits.gte(missedEarningUnitsWhilePaused)) { - entitledEarnings = nonStopEarningUnits.sub(missedEarningUnitsWhilePaused); + if (nonStopEarningUnits.gten(missedEarningUnitsWhilePaused)) { + entitledEarnings = nonStopEarningUnits.subn(missedEarningUnitsWhilePaused); } let withdrawableUnitsWhileRunning = entitledEarnings; @@ -497,7 +496,7 @@ describe('MSP Tests\n', async () => { streamWithdrawableAmount = BN.max(new BN(0), withdrawableAmount); - debugObject.streamUnitsPerSecond = streamUnitsPerSecond.toString(); + debugObject.streamUnitsPerSecond = streamUnitsPerSecond; debugObject.startUtcInSeconds = startUtcInSeconds; debugObject.timeSinceStart = timeSinceStart; debugObject.nonStopEarningUnits = nonStopEarningUnits.toString();