@helium/distributor-oracle 0.2.20 → 0.2.22-next.33

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.
@@ -1,320 +0,0 @@
1
- import { BN } from "@coral-xyz/anchor";
2
- import { decodeEntityKey, init, init as initHem, keyToAssetKey, keyToAssetForAsset, } from "@helium/helium-entity-manager-sdk";
3
- import { daoKey } from "@helium/helium-sub-daos-sdk";
4
- import { distributeCompressionRewards, initializeCompressionRecipient, recipientKey } from "@helium/lazy-distributor-sdk";
5
- import { init as initRewards } from "@helium/rewards-oracle-sdk";
6
- import { HNT_MINT, getAsset, getAssetProof, truthy } from "@helium/spl-utils";
7
- import { getAssociatedTokenAddress } from "@solana/spl-token";
8
- import { PublicKey, Transaction } from "@solana/web3.js";
9
- import axios from "axios";
10
- const HNT = process.env.HNT_MINT
11
- ? new PublicKey(process.env.HNT_MINT)
12
- : HNT_MINT;
13
- const DAO = daoKey(HNT)[0];
14
- export async function getCurrentRewards(program, lazyDistributor, assetId) {
15
- const lazyDistributorAcc = await program.account.lazyDistributorV0.fetch(lazyDistributor);
16
- const results = await Promise.all(
17
- // @ts-ignore
18
- lazyDistributorAcc.oracles.map((x) => axios.get(`${x.url}?assetId=${assetId.toBase58()}`)));
19
- return results.map((x, idx) => {
20
- return {
21
- currentRewards: x.data.currentRewards,
22
- // @ts-ignore
23
- oracleKey: lazyDistributorAcc.oracles[idx].oracle,
24
- };
25
- });
26
- }
27
- export async function getBulkRewards(program, lazyDistributor, entityKeys) {
28
- const lazyDistributorAcc = await program.account.lazyDistributorV0.fetch(lazyDistributor);
29
- const results = await Promise.all(
30
- // @ts-ignore
31
- lazyDistributorAcc.oracles.map((x) => axios.post(`${x.url}/bulk-rewards`, { entityKeys })));
32
- return results.map((x, idx) => {
33
- return {
34
- currentRewards: x.data.currentRewards,
35
- // @ts-ignore
36
- oracleKey: lazyDistributorAcc.oracles[idx].oracle,
37
- };
38
- });
39
- }
40
- export async function getPendingRewards(program, lazyDistributor, dao, entityKeys, encoding = 'b58') {
41
- const oracleRewards = await getBulkRewards(program, lazyDistributor, entityKeys);
42
- const hemProgram = await init(program.provider);
43
- const withRecipients = await Promise.all(entityKeys.map(async (entityKey) => {
44
- const keyToAssetK = keyToAssetKey(dao, entityKey, encoding)[0];
45
- const keyToAsset = await hemProgram.account.keyToAssetV0.fetch(keyToAssetK);
46
- const recipient = recipientKey(lazyDistributor, keyToAsset.asset)[0];
47
- const recipientAcc = await program.account.recipientV0.fetchNullable(recipient);
48
- return {
49
- entityKey,
50
- recipientAcc,
51
- };
52
- }));
53
- return withRecipients.reduce((acc, { entityKey, recipientAcc }) => {
54
- const sortedOracleRewards = oracleRewards
55
- .map((rew) => rew.currentRewards[entityKey] || new BN(0))
56
- .sort((a, b) => new BN(a).sub(new BN(b)).toNumber());
57
- const oracleMedian = new BN(sortedOracleRewards[Math.floor(sortedOracleRewards.length / 2)]);
58
- const subbed = oracleMedian.sub(recipientAcc?.totalRewards || new BN(0));
59
- acc[entityKey] = subbed.toString();
60
- return acc;
61
- }, {});
62
- }
63
- export async function formBulkTransactions({ program: lazyDistributorProgram, rewardsOracleProgram, heliumEntityManagerProgram, rewards, assets, compressionAssetAccs, lazyDistributor, lazyDistributorAcc, wallet = lazyDistributorProgram.provider.wallet.publicKey, skipOracleSign = false, assetEndpoint, getAssetFn = getAsset, getAssetProofFn = getAssetProof, }) {
64
- if (assets.length > 100) {
65
- throw new Error('Too many assets, max 100');
66
- }
67
- const provider = lazyDistributorProgram.provider;
68
- if (!rewardsOracleProgram) {
69
- rewardsOracleProgram = await initRewards(provider);
70
- }
71
- if (!heliumEntityManagerProgram) {
72
- heliumEntityManagerProgram = await initHem(provider);
73
- }
74
- if (!lazyDistributorAcc) {
75
- lazyDistributorAcc =
76
- await lazyDistributorProgram.account.lazyDistributorV0.fetch(lazyDistributor);
77
- }
78
- if (!compressionAssetAccs) {
79
- compressionAssetAccs = await Promise.all(assets.map(async (asset) => {
80
- // @ts-ignore
81
- const assetAcc = await getAssetFn(assetEndpoint || provider.connection.rpcEndpoint, asset);
82
- if (!assetAcc) {
83
- throw new Error('No asset with ID ' + asset.toBase58());
84
- }
85
- return assetAcc;
86
- }));
87
- }
88
- if (compressionAssetAccs.length != assets.length) {
89
- throw new Error('Assets not the same length as compressionAssetAccs');
90
- }
91
- let recipientKeys = assets.map((asset) => recipientKey(lazyDistributor, asset)[0]);
92
- let recipientAccs = await lazyDistributorProgram.account.recipientV0.fetchMultiple(recipientKeys);
93
- let ixsPerAsset = await Promise.all(recipientAccs.map(async (recipientAcc, idx) => {
94
- if (!recipientAcc) {
95
- return [
96
- await (await initializeCompressionRecipient({
97
- program: lazyDistributorProgram,
98
- assetId: assets[idx],
99
- lazyDistributor,
100
- assetEndpoint,
101
- owner: wallet,
102
- // Make the oracle pay for the recipient to avoid newly migrated users not having enough sol to claim rewards
103
- payer: lazyDistributorAcc.oracles[0].oracle,
104
- getAssetFn: () => Promise.resolve(compressionAssetAccs[idx]),
105
- getAssetProofFn,
106
- })).instruction(),
107
- ];
108
- }
109
- return [];
110
- }));
111
- // construct the set and distribute ixs
112
- let setAndDistributeIxs = await Promise.all(compressionAssetAccs.map(async (assetAcc, idx) => {
113
- const keyToAssetK = keyToAssetForAsset(assetAcc);
114
- const keyToAsset = await heliumEntityManagerProgram.account.keyToAssetV0.fetch(keyToAssetK);
115
- const entityKey = decodeEntityKey(keyToAsset.entityKey, keyToAsset.keySerialization);
116
- const setRewardIxs = (await Promise.all(rewards.map(async (bulkRewards, oracleIdx) => {
117
- if (!(entityKey in bulkRewards.currentRewards)) {
118
- return null;
119
- }
120
- return await rewardsOracleProgram.methods
121
- .setCurrentRewardsWrapperV1({
122
- currentRewards: new BN(bulkRewards.currentRewards[entityKey]),
123
- oracleIndex: oracleIdx,
124
- })
125
- .accounts({
126
- lazyDistributor,
127
- recipient: recipientKeys[idx],
128
- keyToAsset: keyToAssetK,
129
- oracle: bulkRewards.oracleKey,
130
- })
131
- .instruction();
132
- }))).filter(truthy);
133
- if (setRewardIxs.length == 0) {
134
- return [];
135
- }
136
- const distributeIx = await (await distributeCompressionRewards({
137
- program: lazyDistributorProgram,
138
- assetId: assets[idx],
139
- lazyDistributor,
140
- rewardsMint: lazyDistributorAcc.rewardsMint,
141
- getAssetFn: () => Promise.resolve(assetAcc),
142
- getAssetProofFn,
143
- assetEndpoint,
144
- })).instruction();
145
- return [...setRewardIxs, distributeIx];
146
- }));
147
- for (let i = 0; i < setAndDistributeIxs.length; i++) {
148
- if (setAndDistributeIxs[i].length == 0) {
149
- continue;
150
- }
151
- ixsPerAsset[i].push(...setAndDistributeIxs[i]);
152
- }
153
- // filter arrays where init recipient is the only ix
154
- ixsPerAsset = ixsPerAsset.filter((x) => x.length > 1);
155
- let blockhash = (await provider.connection.getLatestBlockhash()).blockhash;
156
- // unsigned txs
157
- let initialTxs = ixsPerAsset.map((ixs) => {
158
- const tx = new Transaction();
159
- tx.recentBlockhash = blockhash;
160
- tx.feePayer = wallet;
161
- tx.add(...ixs);
162
- return tx;
163
- });
164
- // @ts-ignore
165
- const oracleUrls = lazyDistributorAcc.oracles.map((x) => x.url);
166
- let serTxs = initialTxs.map((tx) => {
167
- return tx.serialize({
168
- requireAllSignatures: false,
169
- verifySignatures: false,
170
- });
171
- });
172
- if (!skipOracleSign) {
173
- for (const oracle of oracleUrls) {
174
- const res = await axios.post(`${oracle}/bulk-sign`, {
175
- transactions: serTxs.map((tx) => tx.toJSON().data),
176
- });
177
- serTxs = res.data.transactions.map((x) => Buffer.from(x));
178
- }
179
- }
180
- const finalTxs = serTxs.map((tx) => Transaction.from(tx));
181
- // Check instructions are the same
182
- finalTxs.forEach((finalTx, idx) => {
183
- assertSameIxns(finalTx.instructions, initialTxs[idx].instructions);
184
- });
185
- return finalTxs;
186
- }
187
- export async function formTransaction({ program: lazyDistributorProgram, rewardsOracleProgram, provider, rewards, asset, hotspot, lazyDistributor, wallet = provider.wallet.publicKey, skipOracleSign = false, assetEndpoint, getAssetFn = getAsset, getAssetProofFn = getAssetProof, }) {
188
- if (!asset && !hotspot) {
189
- throw new Error('Must provide asset or hotspot');
190
- }
191
- if (!asset) {
192
- asset = hotspot;
193
- }
194
- if (!rewardsOracleProgram) {
195
- rewardsOracleProgram = await initRewards(lazyDistributorProgram.provider);
196
- }
197
- const assetAcc = await getAssetFn(assetEndpoint || provider.connection.rpcEndpoint, asset);
198
- if (!assetAcc) {
199
- throw new Error('No asset with ID ' + asset.toBase58());
200
- }
201
- const keyToAsset = keyToAssetForAsset(assetAcc);
202
- const recipient = recipientKey(lazyDistributor, asset)[0];
203
- const lazyDistributorAcc = (await lazyDistributorProgram.account.lazyDistributorV0.fetch(lazyDistributor));
204
- const rewardsMint = lazyDistributorAcc.rewardsMint;
205
- let tx = new Transaction();
206
- const destinationAccount = await getAssociatedTokenAddress(rewardsMint, assetAcc.ownership.owner, true);
207
- if (!(await provider.connection.getAccountInfo(recipient))) {
208
- let initRecipientIx;
209
- if (assetAcc.compression.compressed) {
210
- initRecipientIx = await (await initializeCompressionRecipient({
211
- program: lazyDistributorProgram,
212
- assetId: asset,
213
- lazyDistributor,
214
- assetEndpoint,
215
- owner: wallet,
216
- // Make the oracle pay for the recipient to avoid newly migrated users not having enough sol to claim rewards
217
- payer: lazyDistributorAcc.oracles[0].oracle,
218
- getAssetFn: () => Promise.resolve(assetAcc),
219
- getAssetProofFn,
220
- })).instruction();
221
- }
222
- else {
223
- initRecipientIx = await lazyDistributorProgram.methods
224
- .initializeRecipientV0()
225
- .accounts({
226
- lazyDistributor,
227
- mint: asset,
228
- })
229
- .instruction();
230
- }
231
- tx.add(initRecipientIx);
232
- }
233
- const ixPromises = rewards.map((x, idx) => {
234
- return rewardsOracleProgram.methods
235
- .setCurrentRewardsWrapperV1({
236
- currentRewards: new BN(x.currentRewards),
237
- oracleIndex: idx,
238
- })
239
- .accounts({
240
- lazyDistributor,
241
- recipient,
242
- keyToAsset,
243
- oracle: x.oracleKey,
244
- })
245
- .instruction();
246
- });
247
- const ixs = await Promise.all(ixPromises);
248
- tx.add(...ixs);
249
- tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
250
- tx.feePayer = wallet ? wallet : provider.wallet.publicKey;
251
- if (assetAcc.compression.compressed) {
252
- const distributeIx = await (await distributeCompressionRewards({
253
- program: lazyDistributorProgram,
254
- assetId: asset,
255
- lazyDistributor,
256
- getAssetFn: () => Promise.resolve(assetAcc),
257
- getAssetProofFn,
258
- assetEndpoint,
259
- })).instruction();
260
- tx.add(distributeIx);
261
- }
262
- else {
263
- const distributeIx = await lazyDistributorProgram.methods
264
- .distributeRewardsV0()
265
- .accounts({
266
- // @ts-ignore
267
- common: {
268
- recipient,
269
- lazyDistributor,
270
- rewardsMint,
271
- owner: assetAcc.ownership.owner,
272
- destinationAccount,
273
- },
274
- })
275
- .instruction();
276
- tx.add(distributeIx);
277
- }
278
- // @ts-ignore
279
- const oracleUrls = lazyDistributorAcc.oracles.map((x) => x.url);
280
- let serTx = tx.serialize({
281
- requireAllSignatures: false,
282
- verifySignatures: false,
283
- });
284
- if (!skipOracleSign) {
285
- for (const oracle of oracleUrls) {
286
- const res = await axios.post(`${oracle}`, {
287
- transaction: serTx,
288
- });
289
- serTx = Buffer.from(res.data.transaction);
290
- }
291
- }
292
- const finalTx = Transaction.from(serTx);
293
- // Ensure the oracle didn't pull a fast one
294
- assertSameIxns(finalTx.instructions, tx.instructions);
295
- return finalTx;
296
- }
297
- function assertSameIxns(instructions, instructions1) {
298
- if (instructions.length !== instructions1.length) {
299
- throw new Error('Extra instructions added by oracle');
300
- }
301
- instructions.forEach((instruction, idx) => {
302
- const instruction1 = instructions1[idx];
303
- if (instruction.programId.toBase58() !== instruction1.programId.toBase58()) {
304
- throw new Error('Program id mismatch');
305
- }
306
- if (!instruction.data.equals(instruction1.data)) {
307
- throw new Error('Instruction data mismatch');
308
- }
309
- if (instruction.keys.length !== instruction1.keys.length) {
310
- throw new Error('Key length mismatch');
311
- }
312
- instruction.keys.forEach((key, idx) => {
313
- const key1 = instruction1.keys[idx];
314
- if (key.pubkey.toBase58() !== key1.pubkey.toBase58()) {
315
- throw new Error('Key mismatch');
316
- }
317
- });
318
- });
319
- }
320
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export * from "./client";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -1,62 +0,0 @@
1
- import { Sequelize, STRING, BIGINT, Model } from "sequelize";
2
- import AWS from "aws-sdk";
3
- import * as pg from "pg";
4
- const host = process.env.PGHOST || "localhost";
5
- const port = Number(process.env.PGPORT) || 5432;
6
- export const sequelize = new Sequelize({
7
- host: host,
8
- dialect: "postgres",
9
- port: port,
10
- logging: false,
11
- dialectModule: pg,
12
- username: process.env.PGUSER,
13
- database: process.env.PGDATABASE,
14
- pool: {
15
- max: 5,
16
- min: 0,
17
- acquire: 30000,
18
- idle: 10000
19
- },
20
- hooks: {
21
- beforeConnect: async (config) => {
22
- const isRds = host.includes("rds.amazonaws.com");
23
- let password = process.env.PGPASSWORD;
24
- if (isRds && !password) {
25
- const signer = new AWS.RDS.Signer({
26
- region: process.env.AWS_REGION,
27
- hostname: process.env.PGHOST,
28
- port,
29
- username: process.env.PGUSER,
30
- });
31
- password = await new Promise((resolve, reject) => signer.getAuthToken({}, (err, token) => {
32
- if (err) {
33
- return reject(err);
34
- }
35
- resolve(token);
36
- }));
37
- config.dialectOptions = {
38
- ssl: {
39
- require: false,
40
- rejectUnauthorized: false,
41
- }
42
- };
43
- }
44
- config.password = password;
45
- },
46
- },
47
- });
48
- export class Reward extends Model {
49
- }
50
- Reward.init({
51
- address: {
52
- type: STRING,
53
- primaryKey: true,
54
- },
55
- rewards: {
56
- type: BIGINT,
57
- },
58
- lastReward: {
59
- type: 'TIMESTAMP',
60
- },
61
- }, { sequelize, modelName: "reward_index", tableName: "reward_index", underscored: true, timestamps: false });
62
- //# sourceMappingURL=model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAQ,MAAM,WAAW,CAAC;AACnE,OAAO,GAAG,MAAM,SAAS,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;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;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,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,KAAK,EAAE,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,GAAG,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;KACF;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,MAAO,SAAQ,KAAK;CAGhC;AACD,MAAM,CAAC,IAAI,CACT;IACE,OAAO,EAAE;QACP,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,IAAI;KACjB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,MAAM;KACb;IACD,UAAU,EAAE;QACV,IAAI,EAAE,WAAW;KAClB;CACF,EACD,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAC1G,CAAC"}