@helium/lazy-distributor-sdk 0.0.5 → 0.0.6

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.
Files changed (31) hide show
  1. package/lib/cjs/functions/distributeCompressionRewards.js +51 -0
  2. package/lib/cjs/functions/distributeCompressionRewards.js.map +1 -0
  3. package/lib/cjs/functions/initializeCompressionRecipient.js +47 -0
  4. package/lib/cjs/functions/initializeCompressionRecipient.js.map +1 -0
  5. package/lib/cjs/index.js +8 -4
  6. package/lib/cjs/index.js.map +1 -1
  7. package/lib/cjs/pdas.js +12 -1
  8. package/lib/cjs/pdas.js.map +1 -1
  9. package/lib/cjs/resolvers.js +61 -8
  10. package/lib/cjs/resolvers.js.map +1 -1
  11. package/lib/esm/src/functions/distributeCompressionRewards.js +36 -0
  12. package/lib/esm/src/functions/distributeCompressionRewards.js.map +1 -0
  13. package/lib/esm/src/functions/initializeCompressionRecipient.js +32 -0
  14. package/lib/esm/src/functions/initializeCompressionRecipient.js.map +1 -0
  15. package/lib/esm/src/index.js +5 -3
  16. package/lib/esm/src/index.js.map +1 -1
  17. package/lib/esm/src/pdas.js +10 -0
  18. package/lib/esm/src/pdas.js.map +1 -1
  19. package/lib/esm/src/resolvers.js +62 -9
  20. package/lib/esm/src/resolvers.js.map +1 -1
  21. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
  22. package/lib/types/src/functions/distributeCompressionRewards.d.ts +134 -0
  23. package/lib/types/src/functions/distributeCompressionRewards.d.ts.map +1 -0
  24. package/lib/types/src/functions/initializeCompressionRecipient.d.ts +109 -0
  25. package/lib/types/src/functions/initializeCompressionRecipient.d.ts.map +1 -0
  26. package/lib/types/src/index.d.ts +3 -1
  27. package/lib/types/src/index.d.ts.map +1 -1
  28. package/lib/types/src/pdas.d.ts +1 -0
  29. package/lib/types/src/pdas.d.ts.map +1 -1
  30. package/lib/types/src/resolvers.d.ts.map +1 -1
  31. package/package.json +4 -4
@@ -0,0 +1,51 @@
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.distributeCompressionRewards = void 0;
13
+ const spl_utils_1 = require("@helium/spl-utils");
14
+ function distributeCompressionRewards({ program, assetId, lazyDistributor, getAssetFn = spl_utils_1.getAsset, getAssetProofFn = spl_utils_1.getAssetProof, }) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ // @ts-ignore
17
+ const endpoint = program.provider.connection._rpcEndpoint;
18
+ const asset = yield getAssetFn(endpoint, assetId);
19
+ if (!asset) {
20
+ throw new Error("No asset with ID " + assetId.toBase58());
21
+ }
22
+ const assetProof = yield getAssetProofFn(endpoint, assetId);
23
+ if (!assetProof) {
24
+ throw new Error("No asset proof with ID " + assetId.toBase58());
25
+ }
26
+ const { root, proof, leaf, treeId, nodeIndex } = assetProof;
27
+ const { ownership: { owner } } = asset;
28
+ return program.methods
29
+ .distributeCompressionRewardsV0({
30
+ hash: leaf.toBuffer().toJSON().data,
31
+ root: root.toBuffer().toJSON().data,
32
+ index: nodeIndex,
33
+ })
34
+ .accounts({
35
+ common: {
36
+ lazyDistributor,
37
+ owner,
38
+ },
39
+ merkleTree: treeId,
40
+ })
41
+ .remainingAccounts(proof.map((p) => {
42
+ return {
43
+ pubkey: p,
44
+ isWritable: false,
45
+ isSigner: false,
46
+ };
47
+ }));
48
+ });
49
+ }
50
+ exports.distributeCompressionRewards = distributeCompressionRewards;
51
+ //# sourceMappingURL=distributeCompressionRewards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributeCompressionRewards.js","sourceRoot":"","sources":["../../../src/functions/distributeCompressionRewards.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iDAA+E;AAI/E,SAAsB,4BAA4B,CAAkB,EAClE,OAAO,EACP,OAAO,EACP,eAAe,EACf,UAAU,GAAG,oBAAQ,EACrB,eAAe,GAAG,yBAAa,GAQhC;;QACC,aAAa;QACb,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC3D;QACD,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;SACjE;QACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;QAC5D,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC;QAEvC,OAAO,OAAO,CAAC,OAAO;aACnB,8BAA8B,CAAC;YAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI;YACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI;YACnC,KAAK,EAAE,SAAS;SACjB,CAAC;aACD,QAAQ,CAAC;YACR,MAAM,EAAE;gBACN,eAAe;gBACf,KAAK;aACN;YACD,UAAU,EAAE,MAAM;SACnB,CAAC;aACD,iBAAiB,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,OAAO;gBACL,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACN,CAAC;CAAA;AAjDD,oEAiDC"}
@@ -0,0 +1,47 @@
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.initializeCompressionRecipient = void 0;
13
+ const spl_utils_1 = require("@helium/spl-utils");
14
+ function initializeCompressionRecipient({ program, assetId, lazyDistributor,
15
+ // @ts-ignore
16
+ owner = program.provider.wallet.publicKey, getAssetProofFn = spl_utils_1.getAssetProof, }) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ // @ts-ignore
19
+ const endpoint = program.provider.connection._rpcEndpoint;
20
+ const asset = yield getAssetProofFn(endpoint, assetId);
21
+ if (!asset) {
22
+ throw new Error("No asset with ID " + assetId.toBase58());
23
+ }
24
+ const { root, proof, leaf, treeId, nodeIndex } = asset;
25
+ return program.methods
26
+ .initializeCompressionRecipientV0({
27
+ hash: leaf.toBuffer().toJSON().data,
28
+ root: root.toBuffer().toJSON().data,
29
+ index: nodeIndex,
30
+ })
31
+ .accounts({
32
+ lazyDistributor,
33
+ merkleTree: treeId,
34
+ owner: owner,
35
+ delegate: owner,
36
+ })
37
+ .remainingAccounts(proof.map((p) => {
38
+ return {
39
+ pubkey: p,
40
+ isWritable: false,
41
+ isSigner: false,
42
+ };
43
+ }));
44
+ });
45
+ }
46
+ exports.initializeCompressionRecipient = initializeCompressionRecipient;
47
+ //# sourceMappingURL=initializeCompressionRecipient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializeCompressionRecipient.js","sourceRoot":"","sources":["../../../src/functions/initializeCompressionRecipient.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iDAA8D;AAM9D,SAAsB,8BAA8B,CAAC,EACnD,OAAO,EACP,OAAO,EACP,eAAe;AACf,aAAa;AACb,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EACzC,eAAe,GAAG,yBAAa,GAOhC;;QACC,aAAa;QACb,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC3D;QACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAEvD,OAAO,OAAO,CAAC,OAAO;aACnB,gCAAgC,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI;YACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI;YACnC,KAAK,EAAE,SAAS;SACjB,CAAC;aACD,QAAQ,CAAC;YACR,eAAe;YACf,UAAU,EAAE,MAAM;YAClB,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,KAAK;SAChB,CAAC;aACD,iBAAiB,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,OAAO;gBACL,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACN,CAAC;CAAA;AA3CD,wEA2CC"}
package/lib/cjs/index.js CHANGED
@@ -23,10 +23,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
23
23
  });
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.init = void 0;
26
+ exports.init = exports.initializeCompressionRecipient = exports.distributeCompressionRewards = void 0;
27
27
  const anchor_1 = require("@project-serum/anchor");
28
28
  const constants_1 = require("./constants");
29
29
  const resolvers_1 = require("./resolvers");
30
+ var distributeCompressionRewards_1 = require("./functions/distributeCompressionRewards");
31
+ Object.defineProperty(exports, "distributeCompressionRewards", { enumerable: true, get: function () { return distributeCompressionRewards_1.distributeCompressionRewards; } });
32
+ var initializeCompressionRecipient_1 = require("./functions/initializeCompressionRecipient");
33
+ Object.defineProperty(exports, "initializeCompressionRecipient", { enumerable: true, get: function () { return initializeCompressionRecipient_1.initializeCompressionRecipient; } });
34
+ __exportStar(require("./constants"), exports);
35
+ __exportStar(require("./pdas"), exports);
36
+ __exportStar(require("./resolvers"), exports);
30
37
  function init(provider, programId = constants_1.PROGRAM_ID, idl) {
31
38
  return __awaiter(this, void 0, void 0, function* () {
32
39
  if (!idl) {
@@ -39,7 +46,4 @@ function init(provider, programId = constants_1.PROGRAM_ID, idl) {
39
46
  });
40
47
  }
41
48
  exports.init = init;
42
- __exportStar(require("./constants"), exports);
43
- __exportStar(require("./pdas"), exports);
44
- __exportStar(require("./resolvers"), exports);
45
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAqE;AAErE,2CAAyC;AACzC,2CAAuD;AAEvD,SAAsB,IAAI,CACxB,QAAwB,EACxB,YAAuB,sBAAU,EACjC,GAAgB;;QAEhB,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,MAAM,gBAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SACnD;QACD,MAAM,eAAe,GAAG,IAAI,gBAAO,CACjC,GAAsB,EACtB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,EAAE;YACH,OAAO,oCAAwB,CAAC;QAClC,CAAC,CAC0B,CAAC;QAC9B,OAAO,eAAe,CAAC;IACzB,CAAC;CAAA;AAlBD,oBAkBC;AAED,8CAA4B;AAC5B,yCAAuB;AACvB,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAqE;AAErE,2CAAyC;AACzC,2CAAuD;AAEvD,yFAAwF;AAA/E,4IAAA,4BAA4B,OAAA;AACrC,6FAA4F;AAAnF,gJAAA,8BAA8B,OAAA;AAEvC,8CAA4B;AAC5B,yCAAuB;AACvB,8CAA4B;AAE5B,SAAsB,IAAI,CACxB,QAAwB,EACxB,YAAuB,sBAAU,EACjC,GAAgB;;QAEhB,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,MAAM,gBAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SACnD;QACD,MAAM,eAAe,GAAG,IAAI,gBAAO,CACjC,GAAsB,EACtB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,EAAE;YACH,OAAO,oCAAwB,CAAC;QAClC,CAAC,CAC0B,CAAC;QAC9B,OAAO,eAAe,CAAC;IACzB,CAAC;CAAA;AAlBD,oBAkBC"}
package/lib/cjs/pdas.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.recipientKey = exports.lazyDistributorKey = void 0;
3
+ exports.compressedRecipientKey = exports.recipientKey = exports.lazyDistributorKey = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  const constants_1 = require("./constants");
6
6
  function lazyDistributorKey(mint, programId = constants_1.PROGRAM_ID) {
@@ -11,4 +11,15 @@ function recipientKey(lazyDistributor, mint, programId = constants_1.PROGRAM_ID)
11
11
  return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("recipient", "utf-8"), lazyDistributor.toBuffer(), mint.toBuffer()], programId);
12
12
  }
13
13
  exports.recipientKey = recipientKey;
14
+ function compressedRecipientKey(lazyDistributor, merkleTree, index, programId = constants_1.PROGRAM_ID) {
15
+ const indexBuf = Buffer.alloc(4);
16
+ indexBuf.writeInt32LE(index);
17
+ return web3_js_1.PublicKey.findProgramAddressSync([
18
+ Buffer.from("recipient", "utf-8"),
19
+ lazyDistributor.toBuffer(),
20
+ merkleTree.toBuffer(),
21
+ indexBuf
22
+ ], programId);
23
+ }
24
+ exports.compressedRecipientKey = compressedRecipientKey;
14
25
  //# sourceMappingURL=pdas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdas.js","sourceRoot":"","sources":["../../src/pdas.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAC5C,2CAAyC;AAGzC,SAAgB,kBAAkB,CAChC,IAAe,EACf,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC3D,SAAS,CACV,CAAC;AACJ,CAAC;AARD,gDAQC;AAED,SAAgB,YAAY,CAC1B,eAA0B,EAC1B,IAAe,EACf,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAChF,SAAS,CACV,CAAC;AACJ,CAAC;AATD,oCASC"}
1
+ {"version":3,"file":"pdas.js","sourceRoot":"","sources":["../../src/pdas.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAC5C,2CAAyC;AAGzC,SAAgB,kBAAkB,CAChC,IAAe,EACf,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC3D,SAAS,CACV,CAAC;AACJ,CAAC;AARD,gDAQC;AAED,SAAgB,YAAY,CAC1B,eAA0B,EAC1B,IAAe,EACf,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAChF,SAAS,CACV,CAAC;AACJ,CAAC;AATD,oCASC;AAED,SAAgB,sBAAsB,CACpC,eAA0B,EAC1B,UAAqB,EACrB,KAAa,EACb,YAAuB,sBAAU;IAEjC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,mBAAS,CAAC,sBAAsB,CACrC;QACE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;QACjC,eAAe,CAAC,QAAQ,EAAE;QAC1B,UAAU,CAAC,QAAQ,EAAE;QACrB,QAAQ;KACT,EACD,SAAS,CACV,CAAC;AACJ,CAAC;AAjBD,wDAiBC"}
@@ -15,11 +15,35 @@ const mpl_token_metadata_1 = require("@metaplex-foundation/mpl-token-metadata");
15
15
  const spl_token_1 = require("@solana/spl-token");
16
16
  const web3_js_1 = require("@solana/web3.js");
17
17
  const circuit_breaker_sdk_1 = require("@helium/circuit-breaker-sdk");
18
- exports.lazyDistributorResolvers = (0, spl_utils_1.combineResolvers)((0, spl_utils_1.ataResolver)({
18
+ const pdas_1 = require("./pdas");
19
+ exports.lazyDistributorResolvers = (0, spl_utils_1.combineResolvers)((0, spl_utils_1.resolveIndividual)(({ path }) => __awaiter(void 0, void 0, void 0, function* () {
20
+ switch (path[path.length - 1]) {
21
+ case "tokenMetadataProgram":
22
+ return new web3_js_1.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
23
+ case "bubblegumProgram":
24
+ return new web3_js_1.PublicKey("BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY");
25
+ case "compressionProgram":
26
+ return new web3_js_1.PublicKey("cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK");
27
+ case "logWrapper":
28
+ return new web3_js_1.PublicKey("noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV");
29
+ default:
30
+ return;
31
+ }
32
+ })), (0, spl_utils_1.ataResolver)({
19
33
  instruction: "initializeLazyDistributorV0",
20
34
  account: "rewardsEscrow",
21
35
  mint: "rewardsMint",
22
36
  owner: "lazyDistributor",
37
+ }), (0, spl_utils_1.ataResolver)({
38
+ instruction: "distributeRewardsV0",
39
+ account: "common.destinationAccount",
40
+ mint: "common.rewardsMint",
41
+ owner: "common.owner",
42
+ }), (0, spl_utils_1.ataResolver)({
43
+ instruction: "distributeCompressionRewardsV0",
44
+ account: "common.destinationAccount",
45
+ mint: "common.rewardsMint",
46
+ owner: "common.owner",
23
47
  }), circuit_breaker_sdk_1.circuitBreakerResolvers, (0, spl_utils_1.resolveIndividual)(({ path, accounts, idlIx }) => __awaiter(void 0, void 0, void 0, function* () {
24
48
  if (path[path.length - 1] === "targetMetadata") {
25
49
  if (!accounts.mint) {
@@ -31,20 +55,49 @@ exports.lazyDistributorResolvers = (0, spl_utils_1.combineResolvers)((0, spl_uti
31
55
  accounts.mint.toBuffer(),
32
56
  ], mpl_token_metadata_1.PROGRAM_ID))[0];
33
57
  }
34
- })), ({ accounts, provider, idlIx }) => __awaiter(void 0, void 0, void 0, function* () {
58
+ })), ({ accounts, idlIx, args }) => __awaiter(void 0, void 0, void 0, function* () {
59
+ let resolved = 0;
60
+ const common = accounts.common;
61
+ if (idlIx.name === "distributeCompressionRewardsV0" &&
62
+ accounts.merkleTree &&
63
+ common.lazyDistributor &&
64
+ !common.recipient) {
65
+ common.recipient = (0, pdas_1.compressedRecipientKey)(common.lazyDistributor, accounts.merkleTree, args[2])[0];
66
+ resolved++;
67
+ }
68
+ if (idlIx.name === "distributeRewardsV0" &&
69
+ accounts.mint &&
70
+ accounts.lazyDistributor &&
71
+ !common.recipient) {
72
+ common.recipient = (0, pdas_1.recipientKey)(common.lazyDistributor, accounts.mint)[0];
73
+ resolved++;
74
+ }
75
+ return {
76
+ resolved,
77
+ accounts,
78
+ };
79
+ }), ({ accounts, provider, idlIx }) => __awaiter(void 0, void 0, void 0, function* () {
35
80
  let resolved = 0;
36
81
  if (idlIx.name === "distributeRewardsV0" &&
82
+ // @ts-ignore
37
83
  (!accounts.recipientMintAccount ||
38
- !accounts.destinationAccount ||
39
- !accounts.owner)) {
40
- const recipient = accounts.recipient;
84
+ // @ts-ignore
85
+ !accounts.common.destinationAccount ||
86
+ // @ts-ignore
87
+ !accounts.common.owner)) {
88
+ // @ts-ignore
89
+ const recipient = accounts.common.recipient;
41
90
  const recipientAcc = yield provider.connection.getAccountInfo(recipient);
42
91
  const recipientMint = new web3_js_1.PublicKey(recipientAcc.data.subarray(8 + 32, 8 + 32 + 32));
43
92
  const recipientMintAccount = (yield provider.connection.getTokenLargestAccounts(recipientMint)).value[0].address;
44
93
  const recipientMintTokenAccount = yield (0, spl_token_1.getAccount)(provider.connection, recipientMintAccount);
45
- const destinationAccount = yield (0, spl_token_1.getAssociatedTokenAddress)(accounts.rewardsMint, recipientMintTokenAccount.owner);
46
- accounts.owner = recipientMintTokenAccount.owner;
47
- accounts.destinationAccount = destinationAccount;
94
+ const destinationAccount = yield (0, spl_token_1.getAssociatedTokenAddress)(
95
+ // @ts-ignore
96
+ accounts.common.rewardsMint, recipientMintTokenAccount.owner);
97
+ // @ts-ignore
98
+ accounts.common.owner = recipientMintTokenAccount.owner;
99
+ // @ts-ignore
100
+ accounts.common.destinationAccount = destinationAccount;
48
101
  accounts.recipientMintAccount = recipientMintAccount;
49
102
  resolved += 1;
50
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../src/resolvers.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAI2B;AAC3B,gFAAkG;AAClG,iDAA0E;AAC1E,6CAA4C;AAC5C,qEAAsE;AAEzD,QAAA,wBAAwB,GAAG,IAAA,4BAAgB,EACtD,IAAA,uBAAW,EAAC;IACV,WAAW,EAAE,6BAA6B;IAC1C,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,iBAAiB;CACzB,CAAC,EACF,6CAAuB,EACvB,IAAA,6BAAiB,EAAC,CAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IACpD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,gBAAgB,EAAE;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SACpC;QACD,OAAO,CACL,MAAM,mBAAS,CAAC,kBAAkB,CAChC;YACE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;YAChC,+BAAyB,CAAC,QAAQ,EAAE;YACnC,QAAQ,CAAC,IAAkB,CAAC,QAAQ,EAAE;SACxC,EACD,+BAAyB,CAC1B,CACF,CAAC,CAAC,CAAC,CAAC;KACN;AACH,CAAC,CAAA,CAAC,EACF,CAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IACtC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IACE,KAAK,CAAC,IAAI,KAAK,qBAAqB;QACpC,CAAC,CAAC,QAAQ,CAAC,oBAAoB;YAC7B,CAAC,QAAQ,CAAC,kBAAkB;YAC5B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAClB;QACA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAsB,CAAC;QAClD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,aAAa,GAAG,IAAI,mBAAS,CACjC,YAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CACjD,CAAC;QACF,MAAM,oBAAoB,GAAG,CAC3B,MAAM,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,aAAa,CAAC,CACjE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACnB,MAAM,yBAAyB,GAAG,MAAM,IAAA,sBAAU,EAChD,QAAQ,CAAC,UAAU,EACnB,oBAAoB,CACrB,CAAC;QACF,MAAM,kBAAkB,GAAG,MAAM,IAAA,qCAAyB,EACxD,QAAQ,CAAC,WAAwB,EACjC,yBAAyB,CAAC,KAAK,CAChC,CAAC;QACF,QAAQ,CAAC,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC;QACjD,QAAQ,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QACjD,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACrD,QAAQ,IAAI,CAAC,CAAC;KACf;IAED,OAAO;QACL,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC,CAAA,CACF,CAAC"}
1
+ {"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../src/resolvers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { getAsset, getAssetProof } from "@helium/spl-utils";
2
+ export async function distributeCompressionRewards({ program, assetId, lazyDistributor, getAssetFn = getAsset, getAssetProofFn = getAssetProof, }) {
3
+ // @ts-ignore
4
+ const endpoint = program.provider.connection._rpcEndpoint;
5
+ const asset = await getAssetFn(endpoint, assetId);
6
+ if (!asset) {
7
+ throw new Error("No asset with ID " + assetId.toBase58());
8
+ }
9
+ const assetProof = await getAssetProofFn(endpoint, assetId);
10
+ if (!assetProof) {
11
+ throw new Error("No asset proof with ID " + assetId.toBase58());
12
+ }
13
+ const { root, proof, leaf, treeId, nodeIndex } = assetProof;
14
+ const { ownership: { owner } } = asset;
15
+ return program.methods
16
+ .distributeCompressionRewardsV0({
17
+ hash: leaf.toBuffer().toJSON().data,
18
+ root: root.toBuffer().toJSON().data,
19
+ index: nodeIndex,
20
+ })
21
+ .accounts({
22
+ common: {
23
+ lazyDistributor,
24
+ owner,
25
+ },
26
+ merkleTree: treeId,
27
+ })
28
+ .remainingAccounts(proof.map((p) => {
29
+ return {
30
+ pubkey: p,
31
+ isWritable: false,
32
+ isSigner: false,
33
+ };
34
+ }));
35
+ }
36
+ //# sourceMappingURL=distributeCompressionRewards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributeCompressionRewards.js","sourceRoot":"","sources":["../../../../src/functions/distributeCompressionRewards.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,QAAQ,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAC;AAI/E,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAkB,EAClE,OAAO,EACP,OAAO,EACP,eAAe,EACf,UAAU,GAAG,QAAQ,EACrB,eAAe,GAAG,aAAa,GAQhC;IACC,aAAa;IACb,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC3D;IACD,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;KACjE;IACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;IAC5D,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC;IAEvC,OAAO,OAAO,CAAC,OAAO;SACnB,8BAA8B,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI;QACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI;QACnC,KAAK,EAAE,SAAS;KACjB,CAAC;SACD,QAAQ,CAAC;QACR,MAAM,EAAE;YACN,eAAe;YACf,KAAK;SACN;QACD,UAAU,EAAE,MAAM;KACnB,CAAC;SACD,iBAAiB,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACd,OAAO;YACL,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { getAssetProof } from "@helium/spl-utils";
2
+ export async function initializeCompressionRecipient({ program, assetId, lazyDistributor,
3
+ // @ts-ignore
4
+ owner = program.provider.wallet.publicKey, getAssetProofFn = getAssetProof, }) {
5
+ // @ts-ignore
6
+ const endpoint = program.provider.connection._rpcEndpoint;
7
+ const asset = await getAssetProofFn(endpoint, assetId);
8
+ if (!asset) {
9
+ throw new Error("No asset with ID " + assetId.toBase58());
10
+ }
11
+ const { root, proof, leaf, treeId, nodeIndex } = asset;
12
+ return program.methods
13
+ .initializeCompressionRecipientV0({
14
+ hash: leaf.toBuffer().toJSON().data,
15
+ root: root.toBuffer().toJSON().data,
16
+ index: nodeIndex,
17
+ })
18
+ .accounts({
19
+ lazyDistributor,
20
+ merkleTree: treeId,
21
+ owner: owner,
22
+ delegate: owner,
23
+ })
24
+ .remainingAccounts(proof.map((p) => {
25
+ return {
26
+ pubkey: p,
27
+ isWritable: false,
28
+ isSigner: false,
29
+ };
30
+ }));
31
+ }
32
+ //# sourceMappingURL=initializeCompressionRecipient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializeCompressionRecipient.js","sourceRoot":"","sources":["../../../../src/functions/initializeCompressionRecipient.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAM9D,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,EACnD,OAAO,EACP,OAAO,EACP,eAAe;AACf,aAAa;AACb,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EACzC,eAAe,GAAG,aAAa,GAOhC;IACC,aAAa;IACb,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC3D;IACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEvD,OAAO,OAAO,CAAC,OAAO;SACnB,gCAAgC,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI;QACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI;QACnC,KAAK,EAAE,SAAS;KACjB,CAAC;SACD,QAAQ,CAAC;QACR,eAAe;QACf,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;KAChB,CAAC;SACD,iBAAiB,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACd,OAAO;YACL,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -1,6 +1,11 @@
1
1
  import { Program } from "@project-serum/anchor";
2
2
  import { PROGRAM_ID } from "./constants";
3
3
  import { lazyDistributorResolvers } from "./resolvers";
4
+ export { distributeCompressionRewards } from "./functions/distributeCompressionRewards";
5
+ export { initializeCompressionRecipient } from "./functions/initializeCompressionRecipient";
6
+ export * from "./constants";
7
+ export * from "./pdas";
8
+ export * from "./resolvers";
4
9
  export async function init(provider, programId = PROGRAM_ID, idl) {
5
10
  if (!idl) {
6
11
  idl = await Program.fetchIdl(programId, provider);
@@ -10,7 +15,4 @@ export async function init(provider, programId = PROGRAM_ID, idl) {
10
15
  });
11
16
  return lazyDistributor;
12
17
  }
13
- export * from "./constants";
14
- export * from "./pdas";
15
- export * from "./resolvers";
16
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,QAAwB,EACxB,YAAuB,UAAU,EACjC,GAAgB;IAEhB,IAAI,CAAC,GAAG,EAAE;QACR,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;KACnD;IACD,MAAM,eAAe,GAAG,IAAI,OAAO,CACjC,GAAsB,EACtB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,EAAE;QACH,OAAO,wBAAwB,CAAC;IAClC,CAAC,CAC0B,CAAC;IAC9B,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAE5F,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,QAAwB,EACxB,YAAuB,UAAU,EACjC,GAAgB;IAEhB,IAAI,CAAC,GAAG,EAAE;QACR,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;KACnD;IACD,MAAM,eAAe,GAAG,IAAI,OAAO,CACjC,GAAsB,EACtB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,EAAE;QACH,OAAO,wBAAwB,CAAC;IAClC,CAAC,CAC0B,CAAC;IAC9B,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -6,4 +6,14 @@ export function lazyDistributorKey(mint, programId = PROGRAM_ID) {
6
6
  export function recipientKey(lazyDistributor, mint, programId = PROGRAM_ID) {
7
7
  return PublicKey.findProgramAddressSync([Buffer.from("recipient", "utf-8"), lazyDistributor.toBuffer(), mint.toBuffer()], programId);
8
8
  }
9
+ export function compressedRecipientKey(lazyDistributor, merkleTree, index, programId = PROGRAM_ID) {
10
+ const indexBuf = Buffer.alloc(4);
11
+ indexBuf.writeInt32LE(index);
12
+ return PublicKey.findProgramAddressSync([
13
+ Buffer.from("recipient", "utf-8"),
14
+ lazyDistributor.toBuffer(),
15
+ merkleTree.toBuffer(),
16
+ indexBuf
17
+ ], programId);
18
+ }
9
19
  //# sourceMappingURL=pdas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdas.js","sourceRoot":"","sources":["../../../src/pdas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,UAAU,kBAAkB,CAChC,IAAe,EACf,YAAuB,UAAU;IAEjC,OAAO,SAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC3D,SAAS,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,eAA0B,EAC1B,IAAe,EACf,YAAuB,UAAU;IAEjC,OAAO,SAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAChF,SAAS,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"pdas.js","sourceRoot":"","sources":["../../../src/pdas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,UAAU,kBAAkB,CAChC,IAAe,EACf,YAAuB,UAAU;IAEjC,OAAO,SAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC3D,SAAS,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,eAA0B,EAC1B,IAAe,EACf,YAAuB,UAAU;IAEjC,OAAO,SAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAChF,SAAS,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,eAA0B,EAC1B,UAAqB,EACrB,KAAa,EACb,YAAuB,UAAU;IAEjC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,SAAS,CAAC,sBAAsB,CACrC;QACE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;QACjC,eAAe,CAAC,QAAQ,EAAE;QAC1B,UAAU,CAAC,QAAQ,EAAE;QACrB,QAAQ;KACT,EACD,SAAS,CACV,CAAC;AACJ,CAAC"}
@@ -1,13 +1,37 @@
1
- import { ataResolver, combineResolvers, resolveIndividual } from "@helium/spl-utils";
1
+ import { ataResolver, combineResolvers, resolveIndividual, } from "@helium/spl-utils";
2
2
  import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
3
3
  import { getAccount, getAssociatedTokenAddress } from "@solana/spl-token";
4
4
  import { PublicKey } from "@solana/web3.js";
5
5
  import { circuitBreakerResolvers } from "@helium/circuit-breaker-sdk";
6
- export const lazyDistributorResolvers = combineResolvers(ataResolver({
6
+ import { compressedRecipientKey, recipientKey } from "./pdas";
7
+ export const lazyDistributorResolvers = combineResolvers(resolveIndividual(async ({ path }) => {
8
+ switch (path[path.length - 1]) {
9
+ case "tokenMetadataProgram":
10
+ return new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
11
+ case "bubblegumProgram":
12
+ return new PublicKey("BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY");
13
+ case "compressionProgram":
14
+ return new PublicKey("cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK");
15
+ case "logWrapper":
16
+ return new PublicKey("noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV");
17
+ default:
18
+ return;
19
+ }
20
+ }), ataResolver({
7
21
  instruction: "initializeLazyDistributorV0",
8
22
  account: "rewardsEscrow",
9
23
  mint: "rewardsMint",
10
24
  owner: "lazyDistributor",
25
+ }), ataResolver({
26
+ instruction: "distributeRewardsV0",
27
+ account: "common.destinationAccount",
28
+ mint: "common.rewardsMint",
29
+ owner: "common.owner",
30
+ }), ataResolver({
31
+ instruction: "distributeCompressionRewardsV0",
32
+ account: "common.destinationAccount",
33
+ mint: "common.rewardsMint",
34
+ owner: "common.owner",
11
35
  }), circuitBreakerResolvers, resolveIndividual(async ({ path, accounts, idlIx }) => {
12
36
  if (path[path.length - 1] === "targetMetadata") {
13
37
  if (!accounts.mint) {
@@ -19,20 +43,49 @@ export const lazyDistributorResolvers = combineResolvers(ataResolver({
19
43
  accounts.mint.toBuffer(),
20
44
  ], TOKEN_METADATA_PROGRAM_ID))[0];
21
45
  }
22
- }), async ({ accounts, provider, idlIx }) => {
46
+ }), async ({ accounts, idlIx, args }) => {
47
+ let resolved = 0;
48
+ const common = accounts.common;
49
+ if (idlIx.name === "distributeCompressionRewardsV0" &&
50
+ accounts.merkleTree &&
51
+ common.lazyDistributor &&
52
+ !common.recipient) {
53
+ common.recipient = compressedRecipientKey(common.lazyDistributor, accounts.merkleTree, args[2])[0];
54
+ resolved++;
55
+ }
56
+ if (idlIx.name === "distributeRewardsV0" &&
57
+ accounts.mint &&
58
+ accounts.lazyDistributor &&
59
+ !common.recipient) {
60
+ common.recipient = recipientKey(common.lazyDistributor, accounts.mint)[0];
61
+ resolved++;
62
+ }
63
+ return {
64
+ resolved,
65
+ accounts,
66
+ };
67
+ }, async ({ accounts, provider, idlIx }) => {
23
68
  let resolved = 0;
24
69
  if (idlIx.name === "distributeRewardsV0" &&
70
+ // @ts-ignore
25
71
  (!accounts.recipientMintAccount ||
26
- !accounts.destinationAccount ||
27
- !accounts.owner)) {
28
- const recipient = accounts.recipient;
72
+ // @ts-ignore
73
+ !accounts.common.destinationAccount ||
74
+ // @ts-ignore
75
+ !accounts.common.owner)) {
76
+ // @ts-ignore
77
+ const recipient = accounts.common.recipient;
29
78
  const recipientAcc = await provider.connection.getAccountInfo(recipient);
30
79
  const recipientMint = new PublicKey(recipientAcc.data.subarray(8 + 32, 8 + 32 + 32));
31
80
  const recipientMintAccount = (await provider.connection.getTokenLargestAccounts(recipientMint)).value[0].address;
32
81
  const recipientMintTokenAccount = await getAccount(provider.connection, recipientMintAccount);
33
- const destinationAccount = await getAssociatedTokenAddress(accounts.rewardsMint, recipientMintTokenAccount.owner);
34
- accounts.owner = recipientMintTokenAccount.owner;
35
- accounts.destinationAccount = destinationAccount;
82
+ const destinationAccount = await getAssociatedTokenAddress(
83
+ // @ts-ignore
84
+ accounts.common.rewardsMint, recipientMintTokenAccount.owner);
85
+ // @ts-ignore
86
+ accounts.common.owner = recipientMintTokenAccount.owner;
87
+ // @ts-ignore
88
+ accounts.common.destinationAccount = destinationAccount;
36
89
  accounts.recipientMintAccount = recipientMintAccount;
37
90
  resolved += 1;
38
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../../src/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,IAAI,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CACtD,WAAW,CAAC;IACV,WAAW,EAAE,6BAA6B;IAC1C,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,iBAAiB;CACzB,CAAC,EACF,uBAAuB,EACvB,iBAAiB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IACpD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,gBAAgB,EAAE;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SACpC;QACD,OAAO,CACL,MAAM,SAAS,CAAC,kBAAkB,CAChC;YACE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;YAChC,yBAAyB,CAAC,QAAQ,EAAE;YACnC,QAAQ,CAAC,IAAkB,CAAC,QAAQ,EAAE;SACxC,EACD,yBAAyB,CAC1B,CACF,CAAC,CAAC,CAAC,CAAC;KACN;AACH,CAAC,CAAC,EACF,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IACtC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IACE,KAAK,CAAC,IAAI,KAAK,qBAAqB;QACpC,CAAC,CAAC,QAAQ,CAAC,oBAAoB;YAC7B,CAAC,QAAQ,CAAC,kBAAkB;YAC5B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAClB;QACA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAsB,CAAC;QAClD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,aAAa,GAAG,IAAI,SAAS,CACjC,YAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CACjD,CAAC;QACF,MAAM,oBAAoB,GAAG,CAC3B,MAAM,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,aAAa,CAAC,CACjE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACnB,MAAM,yBAAyB,GAAG,MAAM,UAAU,CAChD,QAAQ,CAAC,UAAU,EACnB,oBAAoB,CACrB,CAAC;QACF,MAAM,kBAAkB,GAAG,MAAM,yBAAyB,CACxD,QAAQ,CAAC,WAAwB,EACjC,yBAAyB,CAAC,KAAK,CAChC,CAAC;QACF,QAAQ,CAAC,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC;QACjD,QAAQ,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QACjD,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACrD,QAAQ,IAAI,CAAC,CAAC;KACf;IAED,OAAO;QACL,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../../src/resolvers.ts"],"names":[],"mappings":"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"}