@helium/distributor-oracle 0.9.30 → 0.9.31

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.
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_CLAIMS_PER_TX = exports.DAO = exports.DNT = exports.HNT = void 0;
4
+ const spl_utils_1 = require("@helium/spl-utils");
5
+ const web3_js_1 = require("@solana/web3.js");
6
+ const helium_sub_daos_sdk_1 = require("@helium/helium-sub-daos-sdk");
7
+ exports.HNT = process.env.HNT_MINT
8
+ ? new web3_js_1.PublicKey(process.env.HNT_MINT)
9
+ : spl_utils_1.HNT_MINT;
10
+ exports.DNT = process.env.DNT_MINT
11
+ ? new web3_js_1.PublicKey(process.env.DNT_MINT)
12
+ : spl_utils_1.IOT_MINT;
13
+ exports.DAO = (0, helium_sub_daos_sdk_1.daoKey)(exports.HNT)[0];
14
+ exports.MAX_CLAIMS_PER_TX = process.env.MAX_CLAIMS_PER_TX
15
+ ? parseInt(process.env.MAX_CLAIMS_PER_TX)
16
+ : 5;
17
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAA,iDAAuD;AACvD,6CAA4C;AAC5C,qEAAqD;AAExC,QAAA,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ;IACrC,CAAC,CAAC,IAAI,mBAAS,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrC,CAAC,CAAC,oBAAQ,CAAC;AACA,QAAA,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ;IACrC,CAAC,CAAC,IAAI,mBAAS,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrC,CAAC,CAAC,oBAAQ,CAAC;AACA,QAAA,GAAG,GAAG,IAAA,4BAAM,EAAC,WAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAErB,QAAA,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB;IAC5D,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACzC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeviceType = void 0;
4
+ var DeviceType;
5
+ (function (DeviceType) {
6
+ DeviceType["IOT"] = "iot";
7
+ DeviceType["MOBILE"] = "mobile";
8
+ })(DeviceType || (exports.DeviceType = DeviceType = {}));
9
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/database.ts"],"names":[],"mappings":";;;AAKA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yBAAW,CAAA;IACX,+BAAiB,CAAA;AACnB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB"}
package/lib/cjs/model.js CHANGED
@@ -35,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.Reward = exports.sequelize = void 0;
38
+ exports.WalletClaimJob = exports.Reward = exports.sequelize = void 0;
39
39
  const sequelize_1 = require("sequelize");
40
40
  const aws_sdk_1 = __importDefault(require("aws-sdk"));
41
41
  const pg = __importStar(require("pg"));
@@ -101,4 +101,22 @@ Reward.init({
101
101
  type: sequelize_1.STRING,
102
102
  }
103
103
  }, { sequelize: exports.sequelize, modelName: "reward_index", tableName: "reward_index", underscored: true, timestamps: false });
104
+ class WalletClaimJob extends sequelize_1.Model {
105
+ }
106
+ exports.WalletClaimJob = WalletClaimJob;
107
+ WalletClaimJob.init({
108
+ wallet: {
109
+ type: sequelize_1.STRING,
110
+ primaryKey: true,
111
+ },
112
+ remainingKtas: {
113
+ type: (0, sequelize_1.ARRAY)(sequelize_1.STRING),
114
+ }
115
+ }, {
116
+ sequelize: exports.sequelize,
117
+ modelName: "wallet_claim_jobs",
118
+ tableName: "wallet_claim_jobs",
119
+ underscored: true,
120
+ timestamps: false,
121
+ });
104
122
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAmE;AACnE,sDAA0B;AAC1B,uCAAyB;AAEzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,WAAW,CAAC;AAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;AACnC,QAAA,SAAS,GAAG,IAAI,qBAAS,CAAC;IACrC,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,EAAE;IACjB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;IAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;IAChC,IAAI,EAAE;QACJ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;KACZ;IACD,KAAK,EAAE;QACL,aAAa,EAAE,CAAO,MAAW,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAEjD,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YACtC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE;gBACtB,MAAM,MAAM,GAAG,IAAI,iBAAG,CAAC,GAAG,CAAC,MAAM,CAAC;oBAChC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;oBAC9B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;oBAC5B,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;iBAC7B,CAAC,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBACvF,IAAI,GAAG,EAAE;wBACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;qBACnB;oBACD,OAAO,CAAC,KAAK,CAAC,CAAA;gBAChB,CAAC,CAAC,CAAC,CAAC;gBACJ,MAAM,CAAC,cAAc,GAAG;oBACtB,GAAG,EAAE;wBACH,OAAO,EAAE,KAAK;wBACd,kBAAkB,EAAE,KAAK;qBAC1B;iBACF,CAAA;aACF;YACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,CAAC,CAAA;KACF;CACF,CAAC,CAAC;AAEH,MAAa,MAAO,SAAQ,iBAAK;CAGhC;AAHD,wBAGC;AACD,MAAM,CAAC,IAAI,CACT;IACE,OAAO,EAAE;QACP,IAAI,EAAE,kBAAM;QACZ,UAAU,EAAE,IAAI;KACjB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,kBAAM;KACb;IACD,UAAU,EAAE;QACV,IAAI,EAAE,WAAW;KAClB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,kBAAM;KACb;CACF,EACD,EAAE,SAAS,EAAT,iBAAS,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAC1G,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PgDatabase = void 0;
13
+ // @ts-ignore
14
+ const anchor_1 = require("@coral-xyz/anchor");
15
+ const helium_entity_manager_sdk_1 = require("@helium/helium-entity-manager-sdk");
16
+ const lazy_distributor_sdk_1 = require("@helium/lazy-distributor-sdk");
17
+ const spl_utils_1 = require("@helium/spl-utils");
18
+ const web3_js_1 = require("@solana/web3.js");
19
+ const sequelize_1 = require("sequelize");
20
+ const constants_1 = require("./constants");
21
+ const database_1 = require("./database");
22
+ const model_1 = require("./model");
23
+ const ENTITY_CREATOR = (0, helium_entity_manager_sdk_1.entityCreatorKey)(constants_1.DAO)[0];
24
+ const HNT_LAZY_DISTRIBUTOR = (0, lazy_distributor_sdk_1.lazyDistributorKey)(spl_utils_1.HNT_MINT)[0];
25
+ const getRewardTypeForDevice = (deviceType) => `${deviceType.toString().toLowerCase()}_gateway`;
26
+ class PgDatabase {
27
+ constructor(issuanceProgram, lazyDistributorProgram, getAssetFn = spl_utils_1.getAsset, searchAssetsFn = spl_utils_1.searchAssets) {
28
+ this.issuanceProgram = issuanceProgram;
29
+ this.lazyDistributorProgram = lazyDistributorProgram;
30
+ this.getAssetFn = getAssetFn;
31
+ this.searchAssetsFn = searchAssetsFn;
32
+ }
33
+ getOrCreateWalletClaimJob(wallet, batchNumber) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ if (!batchNumber) {
36
+ yield model_1.WalletClaimJob.destroy({
37
+ where: { wallet: wallet.toBase58() },
38
+ });
39
+ }
40
+ const job = yield model_1.WalletClaimJob.findOne({
41
+ where: { wallet: wallet.toBase58() },
42
+ });
43
+ if (!job) {
44
+ let page = 1;
45
+ const limit = 1000;
46
+ let allKtas = [];
47
+ while (true) {
48
+ const assets = (yield this.searchAssetsFn(process.env.ASSET_API_URL ||
49
+ this.issuanceProgram.provider.connection.rpcEndpoint, {
50
+ ownerAddress: wallet.toBase58(),
51
+ creatorVerified: true,
52
+ creatorAddress: ENTITY_CREATOR.toBase58(),
53
+ page,
54
+ limit,
55
+ })) || [];
56
+ allKtas = allKtas.concat(assets.map((asset) => (0, helium_entity_manager_sdk_1.keyToAssetForAsset)(asset, constants_1.DAO).toBase58()));
57
+ if (assets.length < limit) {
58
+ break;
59
+ }
60
+ page++;
61
+ }
62
+ const job = yield model_1.WalletClaimJob.create({
63
+ wallet: wallet.toBase58(),
64
+ remainingKtas: allKtas,
65
+ });
66
+ yield job.save();
67
+ return job;
68
+ }
69
+ return job;
70
+ });
71
+ }
72
+ getRewardableEntities(wallet, limit, batchNumber = 0) {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ const job = yield this.getOrCreateWalletClaimJob(wallet, batchNumber);
75
+ const entities = [];
76
+ let nextBatchNumber = batchNumber || 0;
77
+ while (entities.length == 0) {
78
+ const remainingKtas = job.remainingKtas.slice(nextBatchNumber * limit, (nextBatchNumber + 1) * limit);
79
+ if (remainingKtas.length === 0) {
80
+ nextBatchNumber++;
81
+ break;
82
+ }
83
+ const ktas = (yield this.issuanceProgram.account.keyToAssetV0.fetchMultiple(remainingKtas)).map((kta, index) => (Object.assign(Object.assign({}, kta), { address: new web3_js_1.PublicKey(remainingKtas[index]) })));
84
+ const assets = ktas.map((kta) => kta.asset);
85
+ const recipientKeys = assets.map((a) => (0, lazy_distributor_sdk_1.recipientKey)(HNT_LAZY_DISTRIBUTOR, a)[0]);
86
+ const recipients = (yield this.lazyDistributorProgram.account.recipientV0.fetchMultiple(recipientKeys)).map((r, index) => (Object.assign(Object.assign({}, r), { address: new web3_js_1.PublicKey(recipientKeys[index]) })));
87
+ const entityKeys = ktas.map((kta) => (0, helium_entity_manager_sdk_1.decodeEntityKey)(kta.entityKey, kta.keySerialization));
88
+ const lifetimeRewards = yield this.getBulkRewards(entityKeys);
89
+ for (let i = 0; i < recipients.length; i++) {
90
+ const entityKey = entityKeys[i];
91
+ const recipient = recipients[i];
92
+ const kta = ktas[i];
93
+ const lifetimeReward = lifetimeRewards[entityKey];
94
+ const pendingRewards = new anchor_1.BN(lifetimeReward).sub((recipient === null || recipient === void 0 ? void 0 : recipient.totalRewards) || new anchor_1.BN("0"));
95
+ if (!pendingRewards.lte(new anchor_1.BN("0"))) {
96
+ entities.push({
97
+ keyToAsset: kta,
98
+ lifetimeReward: lifetimeReward,
99
+ pendingReward: pendingRewards.toString(),
100
+ recipient: recipient,
101
+ });
102
+ }
103
+ }
104
+ nextBatchNumber++;
105
+ }
106
+ return {
107
+ entities,
108
+ nextBatchNumber,
109
+ };
110
+ });
111
+ }
112
+ getTotalRewards() {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ const totalRewards = (yield model_1.Reward.findAll({
115
+ attributes: [
116
+ [model_1.sequelize.fn("SUM", model_1.sequelize.col("rewards")), "rewards"],
117
+ ],
118
+ }))[0].rewards;
119
+ return totalRewards;
120
+ });
121
+ }
122
+ getActiveDevices(type) {
123
+ const rewardTypes = type
124
+ ? [getRewardTypeForDevice(type)]
125
+ : Object.values(database_1.DeviceType)
126
+ .filter((value) => isNaN(Number(value))) // Filter out numeric enum keys
127
+ .map((deviceType) => getRewardTypeForDevice(deviceType));
128
+ return model_1.Reward.count({
129
+ where: {
130
+ lastReward: {
131
+ [sequelize_1.Op.gte]: new Date(Date.now() - 1000 * 60 * 60 * 24 * 30), // Active within the last 30 days
132
+ },
133
+ rewardType: {
134
+ [sequelize_1.Op.in]: rewardTypes,
135
+ },
136
+ },
137
+ });
138
+ }
139
+ getBulkRewards(entityKeys) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ const rewards = yield model_1.Reward.findAll({
142
+ where: {
143
+ address: {
144
+ [sequelize_1.Op.in]: entityKeys,
145
+ },
146
+ },
147
+ });
148
+ return rewards
149
+ .map((rew) => [rew.address, rew.rewards])
150
+ .reduce((acc, [key, val]) => {
151
+ acc[key] = new anchor_1.BN(val).toString();
152
+ return acc;
153
+ }, {});
154
+ });
155
+ }
156
+ getCurrentRewards(assetId) {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ const asset = yield this.getAssetFn(process.env.ASSET_API_URL ||
159
+ this.issuanceProgram.provider.connection.rpcEndpoint, assetId);
160
+ if (!asset) {
161
+ console.error("No asset found", assetId.toBase58());
162
+ return "0";
163
+ }
164
+ const keyToAssetKey = (0, helium_entity_manager_sdk_1.keyToAssetForAsset)(asset, constants_1.DAO);
165
+ const keyToAsset = yield this.issuanceProgram.account.keyToAssetV0.fetch(keyToAssetKey);
166
+ const entityKey = (0, helium_entity_manager_sdk_1.decodeEntityKey)(keyToAsset.entityKey, keyToAsset.keySerialization);
167
+ // Verify the creator is our entity creator, otherwise they could just
168
+ // pass in any NFT with this ecc compact to collect rewards
169
+ if (!asset.creators[0].verified ||
170
+ !new web3_js_1.PublicKey(asset.creators[0].address).equals(ENTITY_CREATOR)) {
171
+ throw new Error("Not a valid rewardable entity");
172
+ }
173
+ return this.getCurrentRewardsByEntity(entityKey);
174
+ });
175
+ }
176
+ getCurrentRewardsByEntity(entityKeyStr) {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ const reward = (yield model_1.Reward.findByPk(entityKeyStr));
179
+ return new anchor_1.BN(reward === null || reward === void 0 ? void 0 : reward.rewards).toString() || "0";
180
+ });
181
+ }
182
+ }
183
+ exports.PgDatabase = PgDatabase;
184
+ //# sourceMappingURL=pgDatabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pgDatabase.js","sourceRoot":"","sources":["../../src/pgDatabase.ts"],"names":[],"mappings":"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"}