@pump-fun/pump-sdk 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.js +74 -6
- package/dist/index.d.mts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +74 -6
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/sdk.ts +30 -1
- package/src/tokenIncentives.ts +86 -8
package/dist/esm/index.js
CHANGED
|
@@ -3959,20 +3959,64 @@ import BN3 from "bn.js";
|
|
|
3959
3959
|
|
|
3960
3960
|
// src/tokenIncentives.ts
|
|
3961
3961
|
import BN2 from "bn.js";
|
|
3962
|
+
function totalUnclaimedTokens(globalVolumeAccumulator, userVolumeAccumulator, currentTimestamp = Date.now() / 1e3) {
|
|
3963
|
+
const { startTime, endTime, secondsInADay, totalTokenSupply, solVolumes } = globalVolumeAccumulator;
|
|
3964
|
+
const { totalUnclaimedTokens: totalUnclaimedTokens2, currentSolVolume, lastUpdateTimestamp } = userVolumeAccumulator;
|
|
3965
|
+
const result = totalUnclaimedTokens2;
|
|
3966
|
+
if (startTime.eqn(0) || endTime.eqn(0) || secondsInADay.eqn(0)) {
|
|
3967
|
+
return result;
|
|
3968
|
+
}
|
|
3969
|
+
let currentTimestampBn = new BN2(currentTimestamp);
|
|
3970
|
+
if (currentTimestampBn.lt(startTime)) {
|
|
3971
|
+
return result;
|
|
3972
|
+
}
|
|
3973
|
+
const currentDayIndex = currentTimestampBn.sub(startTime).div(secondsInADay).toNumber();
|
|
3974
|
+
if (lastUpdateTimestamp.lt(startTime)) {
|
|
3975
|
+
return result;
|
|
3976
|
+
}
|
|
3977
|
+
const lastUpdatedIndex = lastUpdateTimestamp.sub(startTime).div(secondsInADay).toNumber();
|
|
3978
|
+
if (endTime.lt(startTime)) {
|
|
3979
|
+
return result;
|
|
3980
|
+
}
|
|
3981
|
+
const endDayIndex = endTime.sub(startTime).div(secondsInADay).toNumber();
|
|
3982
|
+
if (currentDayIndex > lastUpdatedIndex && lastUpdatedIndex <= endDayIndex) {
|
|
3983
|
+
const lastUpdatedDayTokenSupply = totalTokenSupply[lastUpdatedIndex];
|
|
3984
|
+
const lastUpdatedDaySolVolume = solVolumes[lastUpdatedIndex];
|
|
3985
|
+
if (lastUpdatedDaySolVolume.eqn(0)) {
|
|
3986
|
+
return result;
|
|
3987
|
+
}
|
|
3988
|
+
return result.add(
|
|
3989
|
+
currentSolVolume.mul(lastUpdatedDayTokenSupply).div(lastUpdatedDaySolVolume)
|
|
3990
|
+
);
|
|
3991
|
+
}
|
|
3992
|
+
return result;
|
|
3993
|
+
}
|
|
3962
3994
|
function currentDayTokens(globalVolumeAccumulator, userVolumeAccumulator, currentTimestamp = Date.now() / 1e3) {
|
|
3963
|
-
const { startTime, endTime } = globalVolumeAccumulator;
|
|
3995
|
+
const { startTime, endTime, secondsInADay, totalTokenSupply, solVolumes } = globalVolumeAccumulator;
|
|
3996
|
+
const { currentSolVolume, lastUpdateTimestamp } = userVolumeAccumulator;
|
|
3997
|
+
if (startTime.eqn(0) || endTime.eqn(0) || secondsInADay.eqn(0)) {
|
|
3998
|
+
return new BN2(0);
|
|
3999
|
+
}
|
|
3964
4000
|
let currentTimestampBn = new BN2(currentTimestamp);
|
|
3965
4001
|
if (currentTimestampBn.lt(startTime) || currentTimestampBn.gt(endTime)) {
|
|
3966
4002
|
return new BN2(0);
|
|
3967
4003
|
}
|
|
3968
|
-
const
|
|
3969
|
-
|
|
3970
|
-
|
|
3971
|
-
|
|
4004
|
+
const currentDayIndex = currentTimestampBn.sub(startTime).div(secondsInADay).toNumber();
|
|
4005
|
+
if (lastUpdateTimestamp.lt(startTime)) {
|
|
4006
|
+
return new BN2(0);
|
|
4007
|
+
}
|
|
4008
|
+
const lastUpdatedIndex = lastUpdateTimestamp.sub(startTime).div(secondsInADay).toNumber();
|
|
4009
|
+
if (endTime.lt(startTime)) {
|
|
4010
|
+
return new BN2(0);
|
|
4011
|
+
}
|
|
4012
|
+
if (currentDayIndex !== lastUpdatedIndex) {
|
|
4013
|
+
return new BN2(0);
|
|
4014
|
+
}
|
|
4015
|
+
const currentDayTokenSupply = totalTokenSupply[currentDayIndex];
|
|
4016
|
+
const currentDaySolVolume = solVolumes[currentDayIndex];
|
|
3972
4017
|
if (currentDaySolVolume.eqn(0)) {
|
|
3973
4018
|
return new BN2(0);
|
|
3974
4019
|
}
|
|
3975
|
-
const { currentSolVolume } = userVolumeAccumulator;
|
|
3976
4020
|
return currentSolVolume.mul(currentDayTokenSupply).div(currentDaySolVolume);
|
|
3977
4021
|
}
|
|
3978
4022
|
|
|
@@ -4384,6 +4428,28 @@ var PumpSdk = class {
|
|
|
4384
4428
|
)
|
|
4385
4429
|
];
|
|
4386
4430
|
}
|
|
4431
|
+
async getTotalUnclaimedTokens(user) {
|
|
4432
|
+
const [
|
|
4433
|
+
globalVolumeAccumulatorAccountInfo,
|
|
4434
|
+
userVolumeAccumulatorAccountInfo
|
|
4435
|
+
] = await this.connection.getMultipleAccountsInfo([
|
|
4436
|
+
globalVolumeAccumulatorPda()[0],
|
|
4437
|
+
userVolumeAccumulatorPda(user)[0]
|
|
4438
|
+
]);
|
|
4439
|
+
if (!globalVolumeAccumulatorAccountInfo || !userVolumeAccumulatorAccountInfo) {
|
|
4440
|
+
return new BN3(0);
|
|
4441
|
+
}
|
|
4442
|
+
const globalVolumeAccumulator = this.decodeGlobalVolumeAccumulator(
|
|
4443
|
+
globalVolumeAccumulatorAccountInfo
|
|
4444
|
+
);
|
|
4445
|
+
const userVolumeAccumulator = this.decodeUserVolumeAccumulator(
|
|
4446
|
+
userVolumeAccumulatorAccountInfo
|
|
4447
|
+
);
|
|
4448
|
+
return totalUnclaimedTokens(
|
|
4449
|
+
globalVolumeAccumulator,
|
|
4450
|
+
userVolumeAccumulator
|
|
4451
|
+
).add(await this.pumpAmmSdk.getCurrentDayTokens(user));
|
|
4452
|
+
}
|
|
4387
4453
|
async getCurrentDayTokens(user) {
|
|
4388
4454
|
const [
|
|
4389
4455
|
globalVolumeAccumulatorAccountInfo,
|
|
@@ -4471,6 +4537,7 @@ export {
|
|
|
4471
4537
|
bondingCurvePda,
|
|
4472
4538
|
canonicalPumpPoolPda,
|
|
4473
4539
|
creatorVaultPda,
|
|
4540
|
+
currentDayTokens,
|
|
4474
4541
|
getBuySolAmountFromTokenAmount,
|
|
4475
4542
|
getBuyTokenAmountFromSolAmount,
|
|
4476
4543
|
getPumpProgram,
|
|
@@ -4480,5 +4547,6 @@ export {
|
|
|
4480
4547
|
newBondingCurve,
|
|
4481
4548
|
pump_default as pumpIdl,
|
|
4482
4549
|
pumpPoolAuthorityPda,
|
|
4550
|
+
totalUnclaimedTokens,
|
|
4483
4551
|
userVolumeAccumulatorPda
|
|
4484
4552
|
};
|
package/dist/index.d.mts
CHANGED
|
@@ -7904,7 +7904,11 @@ declare class PumpSdk {
|
|
|
7904
7904
|
getCreatorVaultBalance(creator: PublicKey): Promise<BN>;
|
|
7905
7905
|
adminUpdateTokenIncentives(startTime: BN, endTime: BN, dayNumber: BN, tokenSupplyPerDay: BN, secondsInADay?: BN, mint?: PublicKey, tokenProgram?: PublicKey): Promise<TransactionInstruction[]>;
|
|
7906
7906
|
claimTokenIncentives(user: PublicKey, payer: PublicKey, mint?: PublicKey, tokenProgram?: PublicKey): Promise<TransactionInstruction[]>;
|
|
7907
|
+
getTotalUnclaimedTokens(user: PublicKey): Promise<BN>;
|
|
7907
7908
|
getCurrentDayTokens(user: PublicKey): Promise<BN>;
|
|
7908
7909
|
}
|
|
7909
7910
|
|
|
7910
|
-
|
|
7911
|
+
declare function totalUnclaimedTokens(globalVolumeAccumulator: GlobalVolumeAccumulator, userVolumeAccumulator: UserVolumeAccumulator, currentTimestamp?: number): BN;
|
|
7912
|
+
declare function currentDayTokens(globalVolumeAccumulator: GlobalVolumeAccumulator, userVolumeAccumulator: UserVolumeAccumulator, currentTimestamp?: number): BN;
|
|
7913
|
+
|
|
7914
|
+
export { BONDING_CURVE_NEW_SIZE, type BondingCurve, CANONICAL_POOL_INDEX, type Global, PUMP_AMM_PROGRAM_ID, PUMP_PROGRAM_ID, type Pump, PumpSdk, bondingCurvePda, canonicalPumpPoolPda, creatorVaultPda, currentDayTokens, getBuySolAmountFromTokenAmount, getBuyTokenAmountFromSolAmount, getPumpProgram, getSellSolAmountFromTokenAmount, globalPda, globalVolumeAccumulatorPda, newBondingCurve, pump as pumpIdl, pumpPoolAuthorityPda, totalUnclaimedTokens, userVolumeAccumulatorPda };
|
package/dist/index.d.ts
CHANGED
|
@@ -7904,7 +7904,11 @@ declare class PumpSdk {
|
|
|
7904
7904
|
getCreatorVaultBalance(creator: PublicKey): Promise<BN>;
|
|
7905
7905
|
adminUpdateTokenIncentives(startTime: BN, endTime: BN, dayNumber: BN, tokenSupplyPerDay: BN, secondsInADay?: BN, mint?: PublicKey, tokenProgram?: PublicKey): Promise<TransactionInstruction[]>;
|
|
7906
7906
|
claimTokenIncentives(user: PublicKey, payer: PublicKey, mint?: PublicKey, tokenProgram?: PublicKey): Promise<TransactionInstruction[]>;
|
|
7907
|
+
getTotalUnclaimedTokens(user: PublicKey): Promise<BN>;
|
|
7907
7908
|
getCurrentDayTokens(user: PublicKey): Promise<BN>;
|
|
7908
7909
|
}
|
|
7909
7910
|
|
|
7910
|
-
|
|
7911
|
+
declare function totalUnclaimedTokens(globalVolumeAccumulator: GlobalVolumeAccumulator, userVolumeAccumulator: UserVolumeAccumulator, currentTimestamp?: number): BN;
|
|
7912
|
+
declare function currentDayTokens(globalVolumeAccumulator: GlobalVolumeAccumulator, userVolumeAccumulator: UserVolumeAccumulator, currentTimestamp?: number): BN;
|
|
7913
|
+
|
|
7914
|
+
export { BONDING_CURVE_NEW_SIZE, type BondingCurve, CANONICAL_POOL_INDEX, type Global, PUMP_AMM_PROGRAM_ID, PUMP_PROGRAM_ID, type Pump, PumpSdk, bondingCurvePda, canonicalPumpPoolPda, creatorVaultPda, currentDayTokens, getBuySolAmountFromTokenAmount, getBuyTokenAmountFromSolAmount, getPumpProgram, getSellSolAmountFromTokenAmount, globalPda, globalVolumeAccumulatorPda, newBondingCurve, pump as pumpIdl, pumpPoolAuthorityPda, totalUnclaimedTokens, userVolumeAccumulatorPda };
|
package/dist/index.js
CHANGED
|
@@ -38,6 +38,7 @@ __export(index_exports, {
|
|
|
38
38
|
bondingCurvePda: () => bondingCurvePda,
|
|
39
39
|
canonicalPumpPoolPda: () => canonicalPumpPoolPda,
|
|
40
40
|
creatorVaultPda: () => creatorVaultPda,
|
|
41
|
+
currentDayTokens: () => currentDayTokens,
|
|
41
42
|
getBuySolAmountFromTokenAmount: () => getBuySolAmountFromTokenAmount,
|
|
42
43
|
getBuyTokenAmountFromSolAmount: () => getBuyTokenAmountFromSolAmount,
|
|
43
44
|
getPumpProgram: () => getPumpProgram,
|
|
@@ -47,6 +48,7 @@ __export(index_exports, {
|
|
|
47
48
|
newBondingCurve: () => newBondingCurve,
|
|
48
49
|
pumpIdl: () => pump_default,
|
|
49
50
|
pumpPoolAuthorityPda: () => pumpPoolAuthorityPda,
|
|
51
|
+
totalUnclaimedTokens: () => totalUnclaimedTokens,
|
|
50
52
|
userVolumeAccumulatorPda: () => userVolumeAccumulatorPda
|
|
51
53
|
});
|
|
52
54
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -4004,20 +4006,64 @@ var import_bn3 = __toESM(require("bn.js"));
|
|
|
4004
4006
|
|
|
4005
4007
|
// src/tokenIncentives.ts
|
|
4006
4008
|
var import_bn2 = __toESM(require("bn.js"));
|
|
4009
|
+
function totalUnclaimedTokens(globalVolumeAccumulator, userVolumeAccumulator, currentTimestamp = Date.now() / 1e3) {
|
|
4010
|
+
const { startTime, endTime, secondsInADay, totalTokenSupply, solVolumes } = globalVolumeAccumulator;
|
|
4011
|
+
const { totalUnclaimedTokens: totalUnclaimedTokens2, currentSolVolume, lastUpdateTimestamp } = userVolumeAccumulator;
|
|
4012
|
+
const result = totalUnclaimedTokens2;
|
|
4013
|
+
if (startTime.eqn(0) || endTime.eqn(0) || secondsInADay.eqn(0)) {
|
|
4014
|
+
return result;
|
|
4015
|
+
}
|
|
4016
|
+
let currentTimestampBn = new import_bn2.default(currentTimestamp);
|
|
4017
|
+
if (currentTimestampBn.lt(startTime)) {
|
|
4018
|
+
return result;
|
|
4019
|
+
}
|
|
4020
|
+
const currentDayIndex = currentTimestampBn.sub(startTime).div(secondsInADay).toNumber();
|
|
4021
|
+
if (lastUpdateTimestamp.lt(startTime)) {
|
|
4022
|
+
return result;
|
|
4023
|
+
}
|
|
4024
|
+
const lastUpdatedIndex = lastUpdateTimestamp.sub(startTime).div(secondsInADay).toNumber();
|
|
4025
|
+
if (endTime.lt(startTime)) {
|
|
4026
|
+
return result;
|
|
4027
|
+
}
|
|
4028
|
+
const endDayIndex = endTime.sub(startTime).div(secondsInADay).toNumber();
|
|
4029
|
+
if (currentDayIndex > lastUpdatedIndex && lastUpdatedIndex <= endDayIndex) {
|
|
4030
|
+
const lastUpdatedDayTokenSupply = totalTokenSupply[lastUpdatedIndex];
|
|
4031
|
+
const lastUpdatedDaySolVolume = solVolumes[lastUpdatedIndex];
|
|
4032
|
+
if (lastUpdatedDaySolVolume.eqn(0)) {
|
|
4033
|
+
return result;
|
|
4034
|
+
}
|
|
4035
|
+
return result.add(
|
|
4036
|
+
currentSolVolume.mul(lastUpdatedDayTokenSupply).div(lastUpdatedDaySolVolume)
|
|
4037
|
+
);
|
|
4038
|
+
}
|
|
4039
|
+
return result;
|
|
4040
|
+
}
|
|
4007
4041
|
function currentDayTokens(globalVolumeAccumulator, userVolumeAccumulator, currentTimestamp = Date.now() / 1e3) {
|
|
4008
|
-
const { startTime, endTime } = globalVolumeAccumulator;
|
|
4042
|
+
const { startTime, endTime, secondsInADay, totalTokenSupply, solVolumes } = globalVolumeAccumulator;
|
|
4043
|
+
const { currentSolVolume, lastUpdateTimestamp } = userVolumeAccumulator;
|
|
4044
|
+
if (startTime.eqn(0) || endTime.eqn(0) || secondsInADay.eqn(0)) {
|
|
4045
|
+
return new import_bn2.default(0);
|
|
4046
|
+
}
|
|
4009
4047
|
let currentTimestampBn = new import_bn2.default(currentTimestamp);
|
|
4010
4048
|
if (currentTimestampBn.lt(startTime) || currentTimestampBn.gt(endTime)) {
|
|
4011
4049
|
return new import_bn2.default(0);
|
|
4012
4050
|
}
|
|
4013
|
-
const
|
|
4014
|
-
|
|
4015
|
-
|
|
4016
|
-
|
|
4051
|
+
const currentDayIndex = currentTimestampBn.sub(startTime).div(secondsInADay).toNumber();
|
|
4052
|
+
if (lastUpdateTimestamp.lt(startTime)) {
|
|
4053
|
+
return new import_bn2.default(0);
|
|
4054
|
+
}
|
|
4055
|
+
const lastUpdatedIndex = lastUpdateTimestamp.sub(startTime).div(secondsInADay).toNumber();
|
|
4056
|
+
if (endTime.lt(startTime)) {
|
|
4057
|
+
return new import_bn2.default(0);
|
|
4058
|
+
}
|
|
4059
|
+
if (currentDayIndex !== lastUpdatedIndex) {
|
|
4060
|
+
return new import_bn2.default(0);
|
|
4061
|
+
}
|
|
4062
|
+
const currentDayTokenSupply = totalTokenSupply[currentDayIndex];
|
|
4063
|
+
const currentDaySolVolume = solVolumes[currentDayIndex];
|
|
4017
4064
|
if (currentDaySolVolume.eqn(0)) {
|
|
4018
4065
|
return new import_bn2.default(0);
|
|
4019
4066
|
}
|
|
4020
|
-
const { currentSolVolume } = userVolumeAccumulator;
|
|
4021
4067
|
return currentSolVolume.mul(currentDayTokenSupply).div(currentDaySolVolume);
|
|
4022
4068
|
}
|
|
4023
4069
|
|
|
@@ -4429,6 +4475,28 @@ var PumpSdk = class {
|
|
|
4429
4475
|
)
|
|
4430
4476
|
];
|
|
4431
4477
|
}
|
|
4478
|
+
async getTotalUnclaimedTokens(user) {
|
|
4479
|
+
const [
|
|
4480
|
+
globalVolumeAccumulatorAccountInfo,
|
|
4481
|
+
userVolumeAccumulatorAccountInfo
|
|
4482
|
+
] = await this.connection.getMultipleAccountsInfo([
|
|
4483
|
+
globalVolumeAccumulatorPda()[0],
|
|
4484
|
+
userVolumeAccumulatorPda(user)[0]
|
|
4485
|
+
]);
|
|
4486
|
+
if (!globalVolumeAccumulatorAccountInfo || !userVolumeAccumulatorAccountInfo) {
|
|
4487
|
+
return new import_bn3.default(0);
|
|
4488
|
+
}
|
|
4489
|
+
const globalVolumeAccumulator = this.decodeGlobalVolumeAccumulator(
|
|
4490
|
+
globalVolumeAccumulatorAccountInfo
|
|
4491
|
+
);
|
|
4492
|
+
const userVolumeAccumulator = this.decodeUserVolumeAccumulator(
|
|
4493
|
+
userVolumeAccumulatorAccountInfo
|
|
4494
|
+
);
|
|
4495
|
+
return totalUnclaimedTokens(
|
|
4496
|
+
globalVolumeAccumulator,
|
|
4497
|
+
userVolumeAccumulator
|
|
4498
|
+
).add(await this.pumpAmmSdk.getCurrentDayTokens(user));
|
|
4499
|
+
}
|
|
4432
4500
|
async getCurrentDayTokens(user) {
|
|
4433
4501
|
const [
|
|
4434
4502
|
globalVolumeAccumulatorAccountInfo,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pump-fun/pump-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Pump Bonding Curve SDK",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"homepage": "https://github.com/pump-fun/pump-sdk#readme",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@coral-xyz/anchor": "^0.31.1",
|
|
42
|
-
"@pump-fun/pump-swap-sdk": "^0.0.1-beta.
|
|
42
|
+
"@pump-fun/pump-swap-sdk": "^0.0.1-beta.85",
|
|
43
43
|
"@solana/spl-token": "^0.4.13",
|
|
44
44
|
"@solana/web3.js": "^1.98.2",
|
|
45
45
|
"bn.js": "^5.2.2",
|
package/src/index.ts
CHANGED
package/src/sdk.ts
CHANGED
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
GlobalVolumeAccumulator,
|
|
34
34
|
UserVolumeAccumulator,
|
|
35
35
|
} from "./state";
|
|
36
|
-
import { currentDayTokens } from "./tokenIncentives";
|
|
36
|
+
import { currentDayTokens, totalUnclaimedTokens } from "./tokenIncentives";
|
|
37
37
|
|
|
38
38
|
export function getPumpProgram(
|
|
39
39
|
connection: Connection,
|
|
@@ -623,6 +623,35 @@ export class PumpSdk {
|
|
|
623
623
|
];
|
|
624
624
|
}
|
|
625
625
|
|
|
626
|
+
async getTotalUnclaimedTokens(user: PublicKey): Promise<BN> {
|
|
627
|
+
const [
|
|
628
|
+
globalVolumeAccumulatorAccountInfo,
|
|
629
|
+
userVolumeAccumulatorAccountInfo,
|
|
630
|
+
] = await this.connection.getMultipleAccountsInfo([
|
|
631
|
+
globalVolumeAccumulatorPda()[0],
|
|
632
|
+
userVolumeAccumulatorPda(user)[0],
|
|
633
|
+
]);
|
|
634
|
+
|
|
635
|
+
if (
|
|
636
|
+
!globalVolumeAccumulatorAccountInfo ||
|
|
637
|
+
!userVolumeAccumulatorAccountInfo
|
|
638
|
+
) {
|
|
639
|
+
return new BN(0);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
const globalVolumeAccumulator = this.decodeGlobalVolumeAccumulator(
|
|
643
|
+
globalVolumeAccumulatorAccountInfo,
|
|
644
|
+
);
|
|
645
|
+
const userVolumeAccumulator = this.decodeUserVolumeAccumulator(
|
|
646
|
+
userVolumeAccumulatorAccountInfo,
|
|
647
|
+
);
|
|
648
|
+
|
|
649
|
+
return totalUnclaimedTokens(
|
|
650
|
+
globalVolumeAccumulator,
|
|
651
|
+
userVolumeAccumulator,
|
|
652
|
+
).add(await this.pumpAmmSdk.getCurrentDayTokens(user));
|
|
653
|
+
}
|
|
654
|
+
|
|
626
655
|
async getCurrentDayTokens(user: PublicKey): Promise<BN> {
|
|
627
656
|
const [
|
|
628
657
|
globalVolumeAccumulatorAccountInfo,
|
package/src/tokenIncentives.ts
CHANGED
|
@@ -1,12 +1,78 @@
|
|
|
1
1
|
import BN from "bn.js";
|
|
2
2
|
import { GlobalVolumeAccumulator, UserVolumeAccumulator } from "./state";
|
|
3
3
|
|
|
4
|
+
export function totalUnclaimedTokens(
|
|
5
|
+
globalVolumeAccumulator: GlobalVolumeAccumulator,
|
|
6
|
+
userVolumeAccumulator: UserVolumeAccumulator,
|
|
7
|
+
currentTimestamp: number = Date.now() / 1000,
|
|
8
|
+
): BN {
|
|
9
|
+
const { startTime, endTime, secondsInADay, totalTokenSupply, solVolumes } =
|
|
10
|
+
globalVolumeAccumulator;
|
|
11
|
+
const { totalUnclaimedTokens, currentSolVolume, lastUpdateTimestamp } =
|
|
12
|
+
userVolumeAccumulator;
|
|
13
|
+
|
|
14
|
+
const result = totalUnclaimedTokens;
|
|
15
|
+
|
|
16
|
+
if (startTime.eqn(0) || endTime.eqn(0) || secondsInADay.eqn(0)) {
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let currentTimestampBn = new BN(currentTimestamp);
|
|
21
|
+
|
|
22
|
+
if (currentTimestampBn.lt(startTime)) {
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const currentDayIndex = currentTimestampBn
|
|
27
|
+
.sub(startTime)
|
|
28
|
+
.div(secondsInADay)
|
|
29
|
+
.toNumber();
|
|
30
|
+
|
|
31
|
+
if (lastUpdateTimestamp.lt(startTime)) {
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const lastUpdatedIndex = lastUpdateTimestamp
|
|
36
|
+
.sub(startTime)
|
|
37
|
+
.div(secondsInADay)
|
|
38
|
+
.toNumber();
|
|
39
|
+
|
|
40
|
+
if (endTime.lt(startTime)) {
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const endDayIndex = endTime.sub(startTime).div(secondsInADay).toNumber();
|
|
45
|
+
|
|
46
|
+
if (currentDayIndex > lastUpdatedIndex && lastUpdatedIndex <= endDayIndex) {
|
|
47
|
+
const lastUpdatedDayTokenSupply = totalTokenSupply[lastUpdatedIndex];
|
|
48
|
+
const lastUpdatedDaySolVolume = solVolumes[lastUpdatedIndex];
|
|
49
|
+
|
|
50
|
+
if (lastUpdatedDaySolVolume.eqn(0)) {
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return result.add(
|
|
55
|
+
currentSolVolume
|
|
56
|
+
.mul(lastUpdatedDayTokenSupply)
|
|
57
|
+
.div(lastUpdatedDaySolVolume),
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
|
|
4
64
|
export function currentDayTokens(
|
|
5
65
|
globalVolumeAccumulator: GlobalVolumeAccumulator,
|
|
6
66
|
userVolumeAccumulator: UserVolumeAccumulator,
|
|
7
67
|
currentTimestamp: number = Date.now() / 1000,
|
|
8
68
|
): BN {
|
|
9
|
-
const { startTime, endTime } =
|
|
69
|
+
const { startTime, endTime, secondsInADay, totalTokenSupply, solVolumes } =
|
|
70
|
+
globalVolumeAccumulator;
|
|
71
|
+
const { currentSolVolume, lastUpdateTimestamp } = userVolumeAccumulator;
|
|
72
|
+
|
|
73
|
+
if (startTime.eqn(0) || endTime.eqn(0) || secondsInADay.eqn(0)) {
|
|
74
|
+
return new BN(0);
|
|
75
|
+
}
|
|
10
76
|
|
|
11
77
|
let currentTimestampBn = new BN(currentTimestamp);
|
|
12
78
|
|
|
@@ -14,22 +80,34 @@ export function currentDayTokens(
|
|
|
14
80
|
return new BN(0);
|
|
15
81
|
}
|
|
16
82
|
|
|
17
|
-
const
|
|
18
|
-
|
|
83
|
+
const currentDayIndex = currentTimestampBn
|
|
84
|
+
.sub(startTime)
|
|
85
|
+
.div(secondsInADay)
|
|
86
|
+
.toNumber();
|
|
87
|
+
|
|
88
|
+
if (lastUpdateTimestamp.lt(startTime)) {
|
|
89
|
+
return new BN(0);
|
|
90
|
+
}
|
|
19
91
|
|
|
20
|
-
|
|
92
|
+
const lastUpdatedIndex = lastUpdateTimestamp
|
|
21
93
|
.sub(startTime)
|
|
22
94
|
.div(secondsInADay)
|
|
23
95
|
.toNumber();
|
|
24
96
|
|
|
25
|
-
|
|
26
|
-
|
|
97
|
+
if (endTime.lt(startTime)) {
|
|
98
|
+
return new BN(0);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (currentDayIndex !== lastUpdatedIndex) {
|
|
102
|
+
return new BN(0);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const currentDayTokenSupply = totalTokenSupply[currentDayIndex];
|
|
106
|
+
const currentDaySolVolume = solVolumes[currentDayIndex];
|
|
27
107
|
|
|
28
108
|
if (currentDaySolVolume.eqn(0)) {
|
|
29
109
|
return new BN(0);
|
|
30
110
|
}
|
|
31
111
|
|
|
32
|
-
const { currentSolVolume } = userVolumeAccumulator;
|
|
33
|
-
|
|
34
112
|
return currentSolVolume.mul(currentDayTokenSupply).div(currentDaySolVolume);
|
|
35
113
|
}
|