@primuslabs/fund-js-sdk 0.1.15 → 0.1.16

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/index.mjs CHANGED
@@ -112,6 +112,7 @@ var Fund_CONTRACTS = Object.values(SUPPORTEDCHAINIDSMAP).reduce((prev, curr) =>
112
112
  };
113
113
  }, {});
114
114
  var SUPPORTEDCHAINIDS = Object.keys(Fund_CONTRACTS).map((i) => Number(i));
115
+ var SUPPORTEDSOLANACHAINIDS = ["EtWTRABZaYq6iMfeYKouRu166VU2xqa1", "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"];
115
116
  var FundForRedPacket_CONTRACTS = Object.values(SUPPORTEDCHAINIDSMAP).filter(
116
117
  (item) => {
117
118
  return item.redPacketContractAddress;
@@ -134,6 +135,41 @@ var hasErrorFlagFn = (curErrorArr, targetErrorStrArr) => {
134
135
  return f;
135
136
  });
136
137
  };
138
+ var getErrArrFn = (error) => {
139
+ const errorMsg1 = typeof error === "string" ? error : error instanceof Error ? error.message : typeof error.message === "string" ? error.message : JSON.stringify(error);
140
+ const errorMsg2 = typeof error === "object" ? JSON.stringify(error) : error?.toString();
141
+ const curErrorStrArr = [errorMsg1, errorMsg2];
142
+ return curErrorStrArr;
143
+ };
144
+ var formatErrFn = (error) => {
145
+ let formatError = error;
146
+ const curErrorStrArr = getErrArrFn(error);
147
+ const userRejectErrStrArr = ["user rejected", "approval denied"];
148
+ const isUserRejected = hasErrorFlagFn(curErrorStrArr, userRejectErrStrArr);
149
+ if (error?.code === "ACTION_REJECTED" || isUserRejected) {
150
+ formatError = "user rejected transaction";
151
+ }
152
+ const isNoPendingWithdrawals = hasErrorFlagFn(curErrorStrArr, ["no pending withdrawals"]);
153
+ if (isNoPendingWithdrawals) {
154
+ formatError = "no pending withdrawals";
155
+ }
156
+ const insufficientBalanceErrStrArr = ["insufficient balance", "INSUFFICIENT_FUNDS", "The caller does not have enough funds for value transfer."];
157
+ const isInsufficientBalance = hasErrorFlagFn(curErrorStrArr, insufficientBalanceErrStrArr);
158
+ if (isInsufficientBalance) {
159
+ formatError = "insufficient balance";
160
+ }
161
+ const alreadyClaimedErrStrArr = ["Already claimed"];
162
+ const isAlreadyClaimed = hasErrorFlagFn(curErrorStrArr, alreadyClaimedErrStrArr);
163
+ if (isAlreadyClaimed) {
164
+ formatError = "already claimed";
165
+ }
166
+ const allClaimedErrStrArr = ["All claimed"];
167
+ const isAllClaimed = hasErrorFlagFn(curErrorStrArr, allClaimedErrStrArr);
168
+ if (isAllClaimed) {
169
+ formatError = "all claimed";
170
+ }
171
+ return formatError;
172
+ };
137
173
 
138
174
  // src/classes/Contract.ts
139
175
  var Contract = class {
@@ -2717,239 +2753,3769 @@ var FundForRedPacket = class {
2717
2753
  }
2718
2754
  };
2719
2755
 
2720
- // src/classes/ZktlsSdk.ts
2721
- import { PrimusZKTLS } from "@primuslabs/zktls-js-sdk";
2722
- var ZktlsSdk = class {
2723
- zkTlsSdk;
2724
- constructor() {
2756
+ // src/classes/FundOnSolanaForRedPacket.ts
2757
+ import * as anchor3 from "@coral-xyz/anchor";
2758
+
2759
+ // src/classes/solana/program.ts
2760
+ import { Program } from "@coral-xyz/anchor";
2761
+ import * as anchor from "@coral-xyz/anchor";
2762
+ import { PublicKey } from "@solana/web3.js";
2763
+ import { getMint } from "@solana/spl-token";
2764
+ import { encode as encodeBase58 } from "micro-base58";
2765
+ import * as borsh from "borsh";
2766
+ var { deserialize } = borsh;
2767
+ var BN2 = anchor.BN;
2768
+ var getProgram = (idl, anchorProvider) => {
2769
+ return new Program(idl, anchorProvider);
2770
+ };
2771
+ var toTokenAmount = (amount, decimals) => {
2772
+ const [integerPart, fractionalPart = ""] = String(amount).split(".");
2773
+ const fractionalPadded = fractionalPart.padEnd(decimals, "0").slice(0, decimals);
2774
+ const raw = integerPart + fractionalPadded;
2775
+ const cleaned = raw.replace(/^0+/, "") || "0";
2776
+ return new BN2(cleaned);
2777
+ };
2778
+ async function getTokenDecimals(mintAddress, connection) {
2779
+ const mintPubkey = new PublicKey(mintAddress);
2780
+ const mintInfo = await getMint(connection, mintPubkey);
2781
+ return mintInfo.decimals;
2782
+ }
2783
+ var hexToUint8Array = (hex) => {
2784
+ let hexStr = hex.startsWith("0x") ? hex.slice(2) : hex;
2785
+ return Buffer.from(hexStr.toLowerCase(), "hex");
2786
+ };
2787
+ function formatAttestation(attestation) {
2788
+ const {
2789
+ additionParams,
2790
+ attConditions,
2791
+ attestors,
2792
+ data,
2793
+ recipient,
2794
+ responseResolve,
2795
+ request,
2796
+ signatures,
2797
+ timestamp
2798
+ } = attestation;
2799
+ const formatAttestors = attestors.map(({ attestorAddr, url }) => {
2800
+ return {
2801
+ attestorAddr: hexToUint8Array(attestorAddr),
2802
+ url
2803
+ };
2804
+ });
2805
+ const formatSignatures = signatures.map((s) => hexToUint8Array(s));
2806
+ const formatAtt = {
2807
+ additionParams,
2808
+ attConditions,
2809
+ attestors: formatAttestors,
2810
+ data,
2811
+ recipient: new PublicKey(recipient).toBytes(),
2812
+ responseResolve,
2813
+ request,
2814
+ signatures: formatSignatures,
2815
+ timestamp: new anchor.BN(timestamp)
2816
+ };
2817
+ return formatAtt;
2818
+ }
2819
+ async function decodeReSendEvent(eventData) {
2820
+ const eventBuffer = Buffer.from(eventData, "base64");
2821
+ const raw = eventBuffer.slice(8);
2822
+ console.log("eventBuffer first 8 bytes:", Array.from(eventBuffer.slice(0, 8)));
2823
+ class CheckParams {
2824
+ check_type;
2825
+ params;
2826
+ constructor(fields) {
2827
+ this.check_type = fields.check_type;
2828
+ this.params = fields.params;
2829
+ }
2725
2830
  }
2726
- getZkTlsSdk() {
2727
- return this.zkTlsSdk;
2831
+ class RESendEvent {
2832
+ id;
2833
+ re_sender;
2834
+ token_type;
2835
+ token_address;
2836
+ amount;
2837
+ re_type;
2838
+ number;
2839
+ timestamp;
2840
+ check_params;
2841
+ empty_ratio;
2842
+ constructor(fields) {
2843
+ this.id = fields.id;
2844
+ this.re_sender = fields.re_sender;
2845
+ this.token_type = fields.token_type;
2846
+ this.token_address = fields.token_address;
2847
+ this.amount = fields.amount;
2848
+ this.re_type = fields.re_type;
2849
+ this.number = fields.number;
2850
+ this.timestamp = fields.timestamp;
2851
+ this.check_params = new CheckParams(fields.check_params);
2852
+ this.empty_ratio = fields.empty_ratio;
2853
+ }
2728
2854
  }
2729
- async init(appId) {
2730
- return new Promise(async (resolve, reject) => {
2731
- try {
2732
- this.zkTlsSdk = new PrimusZKTLS();
2733
- let platformDevice = "pc";
2734
- const isIpad = () => {
2735
- const userAgent = navigator.userAgent.toLowerCase();
2736
- const isTabletSize = window.innerWidth > 768 && window.innerWidth < 1366;
2737
- return /ipad/.test(userAgent) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 0 && isTabletSize;
2738
- };
2739
- if (navigator.userAgent.toLocaleLowerCase().includes("android")) {
2740
- platformDevice = "android";
2741
- } else if (navigator.userAgent.toLocaleLowerCase().includes("iphone") || isIpad()) {
2742
- platformDevice = "ios";
2743
- }
2744
- console.log("init appId", appId, platformDevice);
2745
- const extensionVersion = await this.zkTlsSdk.init(
2746
- appId,
2747
- "",
2748
- { platform: platformDevice }
2749
- );
2750
- resolve(extensionVersion);
2751
- } catch (error) {
2752
- return reject(error);
2753
- }
2754
- });
2855
+ const CheckParamsJson = {
2856
+ "kind": "struct",
2857
+ "fields": [
2858
+ ["check_type", "u32"],
2859
+ ["params", "string"]
2860
+ ]
2861
+ };
2862
+ const RESendEventJson = {
2863
+ "kind": "struct",
2864
+ "fields": [
2865
+ ["id", [32]],
2866
+ ["re_sender", [32]],
2867
+ ["token_type", "u32"],
2868
+ ["token_address", [32]],
2869
+ ["amount", "u64"],
2870
+ ["re_type", "u32"],
2871
+ ["number", "u32"],
2872
+ ["timestamp", "u64"],
2873
+ ["check_params", CheckParams],
2874
+ ["empty_ratio", "u8"]
2875
+ ]
2876
+ };
2877
+ const schema2 = /* @__PURE__ */ new Map([
2878
+ [CheckParams, CheckParamsJson],
2879
+ [RESendEvent, RESendEventJson]
2880
+ ]);
2881
+ const res = deserialize(schema2, RESendEvent, raw);
2882
+ console.log("decodeReSendEvent=", res);
2883
+ return res;
2884
+ }
2885
+ async function decodeClaimEvent(eventData) {
2886
+ const eventBuffer = Buffer.from(eventData, "base64");
2887
+ const raw = eventBuffer.slice(8);
2888
+ console.log("eventBuffer first 8 bytes:", Array.from(eventBuffer.slice(0, 8)));
2889
+ class REClaimEvent {
2890
+ id;
2891
+ user;
2892
+ user_id;
2893
+ amount;
2894
+ index;
2895
+ timestamp;
2896
+ token_address;
2897
+ constructor(fields) {
2898
+ this.id = fields.id;
2899
+ this.user = fields.user;
2900
+ this.user_id = fields.user_id;
2901
+ this.amount = fields.amount;
2902
+ this.index = fields.index;
2903
+ this.timestamp = fields.timestamp;
2904
+ this.token_address = fields.token_address;
2905
+ }
2755
2906
  }
2756
- async attest(attestParams, signFn, backUrl) {
2757
- return new Promise(async (resolve, reject) => {
2758
- console.log("this.zkTlsSdk", this.zkTlsSdk);
2759
- const { socialPlatform, userIdentifier, address } = attestParams;
2760
- const { id: templateId, field } = DATASOURCETEMPLATESMAP[socialPlatform];
2761
- const attRequest = this.zkTlsSdk.generateRequestParams(
2762
- templateId,
2763
- address
2764
- );
2765
- if (backUrl) {
2766
- attRequest.setBackUrl(backUrl);
2767
- }
2768
- console.log(`attRequest: ${JSON.stringify(attRequest)}`);
2769
- attRequest.setAttConditions([
2770
- [
2771
- {
2772
- field,
2773
- op: "STREQ",
2774
- value: userIdentifier
2775
- }
2776
- ]
2777
- ]);
2778
- const signParams = attRequest.toJsonString();
2779
- const signature = await signFn(signParams);
2780
- if (!signature) {
2781
- return reject(`appSignature is empty!`);
2782
- }
2783
- try {
2784
- const formatAttestParams = {
2785
- attRequest: {
2786
- ...JSON.parse(signParams)
2787
- },
2788
- appSignature: signature
2789
- };
2790
- const attestation = await this.zkTlsSdk.startAttestation(
2791
- JSON.stringify(formatAttestParams)
2792
- );
2793
- return resolve(attestation);
2794
- } catch (error) {
2795
- return reject(error);
2796
- }
2797
- });
2907
+ const REClaimEventJson = {
2908
+ "kind": "struct",
2909
+ "fields": [
2910
+ ["id", [32]],
2911
+ ["user", [32]],
2912
+ ["user_id", "string"],
2913
+ ["amount", "u64"],
2914
+ ["index", "u32"],
2915
+ ["timestamp", "u64"],
2916
+ ["token_address", [32]]
2917
+ ]
2918
+ };
2919
+ const schema2 = /* @__PURE__ */ new Map([
2920
+ [REClaimEvent, REClaimEventJson]
2921
+ ]);
2922
+ const res = deserialize(schema2, REClaimEvent, raw);
2923
+ console.log("res=", res);
2924
+ console.log("res=", new PublicKey(res.user).toBase58());
2925
+ return res;
2926
+ }
2927
+ var getTxSigStrFromTx = (signedTx) => {
2928
+ if (signedTx?.signatures[0] && signedTx?.signatures[0].signature) {
2929
+ const signatureBytes = signedTx.signatures[0].signature;
2930
+ const signatureStr = encodeBase58(signatureBytes);
2931
+ return signatureStr;
2798
2932
  }
2799
- async attestCommon(attestParams) {
2800
- const { templateId, address, signFn, conditions, additionParams, backUrl } = attestParams;
2801
- return new Promise(async (resolve, reject) => {
2802
- console.log("this.zkTlsSdk", this.zkTlsSdk);
2803
- const attRequest = this.zkTlsSdk.generateRequestParams(
2804
- templateId,
2805
- address
2806
- );
2807
- if (backUrl) {
2808
- attRequest.setBackUrl(backUrl);
2809
- }
2810
- console.log(`attRequest: ${JSON.stringify(attRequest)}`);
2811
- if (conditions) {
2812
- attRequest.setAttConditions(conditions);
2813
- }
2814
- if (additionParams) {
2815
- console.log("setAdditionParams--", additionParams);
2816
- attRequest.setAdditionParams(additionParams);
2817
- }
2818
- const signParams = attRequest.toJsonString();
2819
- const signature = await signFn(signParams);
2820
- if (!signature) {
2821
- return reject(`appSignature is empty!`);
2822
- }
2823
- try {
2824
- const formatAttestParams = {
2825
- attRequest: {
2826
- ...JSON.parse(signParams)
2827
- },
2828
- appSignature: signature
2829
- };
2830
- const attestation = await this.zkTlsSdk.startAttestation(
2831
- JSON.stringify(formatAttestParams)
2832
- );
2833
- return resolve(attestation);
2834
- } catch (error) {
2835
- return reject(error);
2836
- }
2837
- });
2933
+ return "";
2934
+ };
2935
+ var getTxIsOnChain = async (signatureStr, connection) => {
2936
+ if (signatureStr) {
2937
+ const { value } = await connection.getSignatureStatus(signatureStr);
2938
+ if (value && value.confirmationStatus) {
2939
+ return true;
2940
+ } else {
2941
+ return false;
2942
+ }
2838
2943
  }
2944
+ return false;
2945
+ };
2946
+ var getTxIsOnProcess = (err) => {
2947
+ const strArr = ["This transaction has already been processed"];
2948
+ const curErrorStrArr = getErrArrFn(err);
2949
+ const isOnProcess = hasErrorFlagFn(curErrorStrArr, strArr);
2950
+ return isOnProcess;
2839
2951
  };
2840
2952
 
2841
- // src/index.ts
2842
- console.log("SUPPORTEDCHAINIDS", SUPPORTEDCHAINIDS);
2843
- var PrimusFund = class {
2844
- supportedChainIds = SUPPORTEDCHAINIDS;
2845
- supportedSocialPlatforms = SUPPORTEDSOCIALPLATFORMS;
2846
- provider;
2847
- _fund;
2848
- _fundForRedPacket;
2849
- _zkTlsSdk;
2850
- async init(provider, chainId, appId) {
2851
- return new Promise(async (resolve, reject) => {
2852
- try {
2853
- if (!this.supportedChainIds.includes(chainId)) {
2854
- return reject("chainId is not supported");
2855
- }
2856
- let formatProvider;
2857
- let signer;
2858
- if (provider instanceof ethers5.providers.JsonRpcProvider) {
2859
- formatProvider = provider;
2860
- } else {
2861
- formatProvider = new ethers5.providers.Web3Provider(provider);
2862
- signer = formatProvider.getSigner();
2863
- }
2864
- await formatProvider.ready;
2865
- const network = await formatProvider.getNetwork();
2866
- const providerChainId = network.chainId;
2867
- console.log("init provider", provider, network);
2868
- console.log("init providerChainId", providerChainId, chainId);
2869
- if (providerChainId !== chainId) {
2870
- return reject(`Please connect to the chain with ID ${chainId} first.`);
2871
- }
2872
- this.provider = signer ?? formatProvider;
2873
- this._fund = new Fund();
2874
- const result = await this._fund.init(this.provider, chainId);
2875
- this._fundForRedPacket = new FundForRedPacket();
2876
- await this._fundForRedPacket.init(this.provider, chainId);
2877
- if (appId) {
2878
- this._zkTlsSdk = new ZktlsSdk();
2879
- await this._zkTlsSdk.init(appId);
2880
- }
2881
- return resolve(result);
2882
- } catch (error) {
2883
- return reject(error);
2884
- }
2885
- });
2886
- }
2887
- async fund(fundParam) {
2888
- return new Promise(async (resolve, reject) => {
2889
- try {
2890
- const { tokenInfo, recipientInfos } = fundParam;
2891
- if (!recipientInfos || recipientInfos.length === 0) {
2892
- return reject("recipientInfos is empty");
2893
- }
2894
- const hasUnsupportedSocialPlatforms = recipientInfos.some((i) => !this.supportedSocialPlatforms.includes(i.socialPlatform.toLowerCase()));
2895
- if (hasUnsupportedSocialPlatforms) {
2896
- return reject("socialPlatform is not supported");
2953
+ // src/config/redPacketIdl.json
2954
+ var redPacketIdl_default = {
2955
+ address: "EmK8RSeeHBxb1iZUipon2QqvatcuJyJZM4cpTtSAYzud",
2956
+ metadata: {
2957
+ name: "primus_red_envelope",
2958
+ version: "0.1.0",
2959
+ spec: "0.1.0",
2960
+ description: "Created with Anchor"
2961
+ },
2962
+ instructions: [
2963
+ {
2964
+ name: "initialize",
2965
+ discriminator: [
2966
+ 175,
2967
+ 175,
2968
+ 109,
2969
+ 31,
2970
+ 13,
2971
+ 152,
2972
+ 155,
2973
+ 237
2974
+ ],
2975
+ accounts: [
2976
+ {
2977
+ name: "state",
2978
+ writable: true,
2979
+ pda: {
2980
+ seeds: [
2981
+ {
2982
+ kind: "const",
2983
+ value: [
2984
+ 114,
2985
+ 101,
2986
+ 100,
2987
+ 95,
2988
+ 101,
2989
+ 110,
2990
+ 118,
2991
+ 101,
2992
+ 108,
2993
+ 111,
2994
+ 112,
2995
+ 101
2996
+ ]
2997
+ }
2998
+ ]
2999
+ }
3000
+ },
3001
+ {
3002
+ name: "owner",
3003
+ writable: true,
3004
+ signer: true
3005
+ },
3006
+ {
3007
+ name: "system_program",
3008
+ address: "11111111111111111111111111111111"
2897
3009
  }
2898
- if (tokenInfo.tokenType === 1) {
2899
- tokenInfo.tokenAddress = ethers5.constants.AddressZero;
3010
+ ],
3011
+ args: [
3012
+ {
3013
+ name: "primus_zktls",
3014
+ type: "pubkey"
3015
+ },
3016
+ {
3017
+ name: "fee_recipient",
3018
+ type: "pubkey"
3019
+ },
3020
+ {
3021
+ name: "claim_fee",
3022
+ type: "u64"
2900
3023
  }
2901
- const newFundRecipientInfos = recipientInfos.map((i) => {
2902
- const formatSocialPlatform = i.socialPlatform.toLowerCase();
2903
- let formatUserIdentifier = i.userIdentifier;
2904
- if (i.socialPlatform === "x" && i.userIdentifier.startsWith("@")) {
2905
- formatUserIdentifier = i.userIdentifier.slice(1);
3024
+ ]
3025
+ },
3026
+ {
3027
+ name: "re_claim",
3028
+ discriminator: [
3029
+ 105,
3030
+ 179,
3031
+ 220,
3032
+ 94,
3033
+ 121,
3034
+ 140,
3035
+ 144,
3036
+ 24
3037
+ ],
3038
+ accounts: [
3039
+ {
3040
+ name: "state",
3041
+ writable: true
3042
+ },
3043
+ {
3044
+ name: "re_record",
3045
+ writable: true,
3046
+ pda: {
3047
+ seeds: [
3048
+ {
3049
+ kind: "const",
3050
+ value: [
3051
+ 114,
3052
+ 101,
3053
+ 95,
3054
+ 114,
3055
+ 101,
3056
+ 99,
3057
+ 111,
3058
+ 114,
3059
+ 100
3060
+ ]
3061
+ },
3062
+ {
3063
+ kind: "arg",
3064
+ path: "re_id"
3065
+ }
3066
+ ]
2906
3067
  }
2907
- return {
2908
- nftIds: i.nftIds ?? [],
2909
- socialPlatform: formatSocialPlatform,
2910
- userIdentifier: formatUserIdentifier,
2911
- tokenAmount: i.tokenAmount
2912
- };
2913
- });
2914
- if (recipientInfos.length === 1) {
2915
- const result = await this._fund?.fund(tokenInfo, newFundRecipientInfos[0]);
2916
- return resolve(result);
2917
- } else if (recipientInfos.length > 1) {
2918
- const result = await this._fund?.fundBatch(tokenInfo, newFundRecipientInfos);
2919
- return resolve(result);
2920
- }
2921
- } catch (error) {
2922
- return reject(error);
2923
- }
2924
- });
2925
- }
2926
- async approve(fundParam) {
2927
- return new Promise(async (resolve, reject) => {
2928
- try {
2929
- const { tokenInfo, recipientInfos } = fundParam;
2930
- if (!recipientInfos || recipientInfos.length === 0) {
2931
- return reject("recipientInfos is empty");
3068
+ },
3069
+ {
3070
+ name: "re_record_data",
3071
+ writable: true
3072
+ },
3073
+ {
3074
+ name: "claimer",
3075
+ writable: true,
3076
+ signer: true
3077
+ },
3078
+ {
3079
+ name: "system_program",
3080
+ address: "11111111111111111111111111111111"
3081
+ },
3082
+ {
3083
+ name: "primus_zktls_state",
3084
+ writable: true
3085
+ },
3086
+ {
3087
+ name: "primus_zktls_program",
3088
+ address: "3qG9pUbAHfizoqnvj9GxnTPaVgkyb7Ry6Q5vozMYdVAA"
3089
+ },
3090
+ {
3091
+ name: "fee_recipient",
3092
+ writable: true
3093
+ },
3094
+ {
3095
+ name: "att_recipient",
3096
+ writable: true
3097
+ },
3098
+ {
3099
+ name: "data_buffer",
3100
+ writable: true,
3101
+ optional: true
3102
+ },
3103
+ {
3104
+ name: "from_token_account",
3105
+ writable: true,
3106
+ optional: true,
3107
+ pda: {
3108
+ seeds: [
3109
+ {
3110
+ kind: "account",
3111
+ path: "state"
3112
+ },
3113
+ {
3114
+ kind: "const",
3115
+ value: [
3116
+ 6,
3117
+ 221,
3118
+ 246,
3119
+ 225,
3120
+ 215,
3121
+ 101,
3122
+ 161,
3123
+ 147,
3124
+ 217,
3125
+ 203,
3126
+ 225,
3127
+ 70,
3128
+ 206,
3129
+ 235,
3130
+ 121,
3131
+ 172,
3132
+ 28,
3133
+ 180,
3134
+ 133,
3135
+ 237,
3136
+ 95,
3137
+ 91,
3138
+ 55,
3139
+ 145,
3140
+ 58,
3141
+ 140,
3142
+ 245,
3143
+ 133,
3144
+ 126,
3145
+ 255,
3146
+ 0,
3147
+ 169
3148
+ ]
3149
+ },
3150
+ {
3151
+ kind: "account",
3152
+ path: "mint"
3153
+ }
3154
+ ],
3155
+ program: {
3156
+ kind: "const",
3157
+ value: [
3158
+ 140,
3159
+ 151,
3160
+ 37,
3161
+ 143,
3162
+ 78,
3163
+ 36,
3164
+ 137,
3165
+ 241,
3166
+ 187,
3167
+ 61,
3168
+ 16,
3169
+ 41,
3170
+ 20,
3171
+ 142,
3172
+ 13,
3173
+ 131,
3174
+ 11,
3175
+ 90,
3176
+ 19,
3177
+ 153,
3178
+ 218,
3179
+ 255,
3180
+ 16,
3181
+ 132,
3182
+ 4,
3183
+ 142,
3184
+ 123,
3185
+ 216,
3186
+ 219,
3187
+ 233,
3188
+ 248,
3189
+ 89
3190
+ ]
3191
+ }
3192
+ }
3193
+ },
3194
+ {
3195
+ name: "to_token_account",
3196
+ writable: true,
3197
+ optional: true,
3198
+ pda: {
3199
+ seeds: [
3200
+ {
3201
+ kind: "account",
3202
+ path: "att_recipient"
3203
+ },
3204
+ {
3205
+ kind: "const",
3206
+ value: [
3207
+ 6,
3208
+ 221,
3209
+ 246,
3210
+ 225,
3211
+ 215,
3212
+ 101,
3213
+ 161,
3214
+ 147,
3215
+ 217,
3216
+ 203,
3217
+ 225,
3218
+ 70,
3219
+ 206,
3220
+ 235,
3221
+ 121,
3222
+ 172,
3223
+ 28,
3224
+ 180,
3225
+ 133,
3226
+ 237,
3227
+ 95,
3228
+ 91,
3229
+ 55,
3230
+ 145,
3231
+ 58,
3232
+ 140,
3233
+ 245,
3234
+ 133,
3235
+ 126,
3236
+ 255,
3237
+ 0,
3238
+ 169
3239
+ ]
3240
+ },
3241
+ {
3242
+ kind: "account",
3243
+ path: "mint"
3244
+ }
3245
+ ],
3246
+ program: {
3247
+ kind: "const",
3248
+ value: [
3249
+ 140,
3250
+ 151,
3251
+ 37,
3252
+ 143,
3253
+ 78,
3254
+ 36,
3255
+ 137,
3256
+ 241,
3257
+ 187,
3258
+ 61,
3259
+ 16,
3260
+ 41,
3261
+ 20,
3262
+ 142,
3263
+ 13,
3264
+ 131,
3265
+ 11,
3266
+ 90,
3267
+ 19,
3268
+ 153,
3269
+ 218,
3270
+ 255,
3271
+ 16,
3272
+ 132,
3273
+ 4,
3274
+ 142,
3275
+ 123,
3276
+ 216,
3277
+ 219,
3278
+ 233,
3279
+ 248,
3280
+ 89
3281
+ ]
3282
+ }
3283
+ }
3284
+ },
3285
+ {
3286
+ name: "mint",
3287
+ optional: true
3288
+ },
3289
+ {
3290
+ name: "token_program",
3291
+ address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
3292
+ },
3293
+ {
3294
+ name: "associated_token_program",
3295
+ address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
2932
3296
  }
2933
- const hasUnsupportedSocialPlatforms = recipientInfos.some((i) => !this.supportedSocialPlatforms.includes(i.socialPlatform.toLowerCase()));
2934
- if (hasUnsupportedSocialPlatforms) {
2935
- return reject("socialPlatform is not supported");
3297
+ ],
3298
+ args: [
3299
+ {
3300
+ name: "_re_id",
3301
+ type: {
3302
+ array: [
3303
+ "u8",
3304
+ 32
3305
+ ]
3306
+ }
3307
+ },
3308
+ {
3309
+ name: "_att",
3310
+ type: {
3311
+ option: {
3312
+ defined: {
3313
+ name: "Attestation"
3314
+ }
3315
+ }
3316
+ }
2936
3317
  }
2937
- if (tokenInfo.tokenType === 1) {
2938
- tokenInfo.tokenAddress = ethers5.constants.AddressZero;
3318
+ ]
3319
+ },
3320
+ {
3321
+ name: "re_record_data_init",
3322
+ discriminator: [
3323
+ 211,
3324
+ 91,
3325
+ 95,
3326
+ 249,
3327
+ 111,
3328
+ 81,
3329
+ 103,
3330
+ 124
3331
+ ],
3332
+ accounts: [
3333
+ {
3334
+ name: "re_record_data",
3335
+ writable: true
3336
+ },
3337
+ {
3338
+ name: "sender",
3339
+ writable: true,
3340
+ signer: true
3341
+ },
3342
+ {
3343
+ name: "system_program",
3344
+ address: "11111111111111111111111111111111"
2939
3345
  }
2940
- const newFundRecipientInfos = recipientInfos.map((i) => {
2941
- const formatSocialPlatform = i.socialPlatform.toLowerCase();
2942
- let formatUserIdentifier = i.userIdentifier;
2943
- if (i.socialPlatform === "x" && i.userIdentifier.startsWith("@")) {
2944
- formatUserIdentifier = i.userIdentifier.slice(1);
3346
+ ],
3347
+ args: []
3348
+ },
3349
+ {
3350
+ name: "re_send",
3351
+ discriminator: [
3352
+ 31,
3353
+ 123,
3354
+ 130,
3355
+ 212,
3356
+ 113,
3357
+ 174,
3358
+ 167,
3359
+ 63
3360
+ ],
3361
+ accounts: [
3362
+ {
3363
+ name: "state",
3364
+ writable: true,
3365
+ pda: {
3366
+ seeds: [
3367
+ {
3368
+ kind: "const",
3369
+ value: [
3370
+ 114,
3371
+ 101,
3372
+ 100,
3373
+ 95,
3374
+ 101,
3375
+ 110,
3376
+ 118,
3377
+ 101,
3378
+ 108,
3379
+ 111,
3380
+ 112,
3381
+ 101
3382
+ ]
3383
+ }
3384
+ ]
2945
3385
  }
2946
- return {
2947
- nftIds: i.nftIds ?? [],
2948
- socialPlatform: formatSocialPlatform,
2949
- userIdentifier: formatUserIdentifier,
2950
- tokenAmount: i.tokenAmount
2951
- };
2952
- });
3386
+ },
3387
+ {
3388
+ name: "re_record",
3389
+ writable: true,
3390
+ pda: {
3391
+ seeds: [
3392
+ {
3393
+ kind: "const",
3394
+ value: [
3395
+ 114,
3396
+ 101,
3397
+ 95,
3398
+ 114,
3399
+ 101,
3400
+ 99,
3401
+ 111,
3402
+ 114,
3403
+ 100
3404
+ ]
3405
+ },
3406
+ {
3407
+ kind: "arg",
3408
+ path: "re_id"
3409
+ }
3410
+ ]
3411
+ }
3412
+ },
3413
+ {
3414
+ name: "re_record_data",
3415
+ writable: true
3416
+ },
3417
+ {
3418
+ name: "sender",
3419
+ writable: true,
3420
+ signer: true
3421
+ },
3422
+ {
3423
+ name: "system_program",
3424
+ address: "11111111111111111111111111111111"
3425
+ },
3426
+ {
3427
+ name: "from_token_account",
3428
+ writable: true,
3429
+ optional: true,
3430
+ pda: {
3431
+ seeds: [
3432
+ {
3433
+ kind: "account",
3434
+ path: "sender"
3435
+ },
3436
+ {
3437
+ kind: "const",
3438
+ value: [
3439
+ 6,
3440
+ 221,
3441
+ 246,
3442
+ 225,
3443
+ 215,
3444
+ 101,
3445
+ 161,
3446
+ 147,
3447
+ 217,
3448
+ 203,
3449
+ 225,
3450
+ 70,
3451
+ 206,
3452
+ 235,
3453
+ 121,
3454
+ 172,
3455
+ 28,
3456
+ 180,
3457
+ 133,
3458
+ 237,
3459
+ 95,
3460
+ 91,
3461
+ 55,
3462
+ 145,
3463
+ 58,
3464
+ 140,
3465
+ 245,
3466
+ 133,
3467
+ 126,
3468
+ 255,
3469
+ 0,
3470
+ 169
3471
+ ]
3472
+ },
3473
+ {
3474
+ kind: "account",
3475
+ path: "mint"
3476
+ }
3477
+ ],
3478
+ program: {
3479
+ kind: "const",
3480
+ value: [
3481
+ 140,
3482
+ 151,
3483
+ 37,
3484
+ 143,
3485
+ 78,
3486
+ 36,
3487
+ 137,
3488
+ 241,
3489
+ 187,
3490
+ 61,
3491
+ 16,
3492
+ 41,
3493
+ 20,
3494
+ 142,
3495
+ 13,
3496
+ 131,
3497
+ 11,
3498
+ 90,
3499
+ 19,
3500
+ 153,
3501
+ 218,
3502
+ 255,
3503
+ 16,
3504
+ 132,
3505
+ 4,
3506
+ 142,
3507
+ 123,
3508
+ 216,
3509
+ 219,
3510
+ 233,
3511
+ 248,
3512
+ 89
3513
+ ]
3514
+ }
3515
+ }
3516
+ },
3517
+ {
3518
+ name: "to_token_account",
3519
+ writable: true,
3520
+ optional: true,
3521
+ pda: {
3522
+ seeds: [
3523
+ {
3524
+ kind: "account",
3525
+ path: "state"
3526
+ },
3527
+ {
3528
+ kind: "const",
3529
+ value: [
3530
+ 6,
3531
+ 221,
3532
+ 246,
3533
+ 225,
3534
+ 215,
3535
+ 101,
3536
+ 161,
3537
+ 147,
3538
+ 217,
3539
+ 203,
3540
+ 225,
3541
+ 70,
3542
+ 206,
3543
+ 235,
3544
+ 121,
3545
+ 172,
3546
+ 28,
3547
+ 180,
3548
+ 133,
3549
+ 237,
3550
+ 95,
3551
+ 91,
3552
+ 55,
3553
+ 145,
3554
+ 58,
3555
+ 140,
3556
+ 245,
3557
+ 133,
3558
+ 126,
3559
+ 255,
3560
+ 0,
3561
+ 169
3562
+ ]
3563
+ },
3564
+ {
3565
+ kind: "account",
3566
+ path: "mint"
3567
+ }
3568
+ ],
3569
+ program: {
3570
+ kind: "const",
3571
+ value: [
3572
+ 140,
3573
+ 151,
3574
+ 37,
3575
+ 143,
3576
+ 78,
3577
+ 36,
3578
+ 137,
3579
+ 241,
3580
+ 187,
3581
+ 61,
3582
+ 16,
3583
+ 41,
3584
+ 20,
3585
+ 142,
3586
+ 13,
3587
+ 131,
3588
+ 11,
3589
+ 90,
3590
+ 19,
3591
+ 153,
3592
+ 218,
3593
+ 255,
3594
+ 16,
3595
+ 132,
3596
+ 4,
3597
+ 142,
3598
+ 123,
3599
+ 216,
3600
+ 219,
3601
+ 233,
3602
+ 248,
3603
+ 89
3604
+ ]
3605
+ }
3606
+ }
3607
+ },
3608
+ {
3609
+ name: "mint",
3610
+ optional: true
3611
+ },
3612
+ {
3613
+ name: "token_program",
3614
+ address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
3615
+ },
3616
+ {
3617
+ name: "associated_token_program",
3618
+ address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
3619
+ }
3620
+ ],
3621
+ args: [
3622
+ {
3623
+ name: "re_id",
3624
+ type: {
3625
+ array: [
3626
+ "u8",
3627
+ 32
3628
+ ]
3629
+ }
3630
+ },
3631
+ {
3632
+ name: "token",
3633
+ type: {
3634
+ defined: {
3635
+ name: "TipToken"
3636
+ }
3637
+ }
3638
+ },
3639
+ {
3640
+ name: "send_param",
3641
+ type: {
3642
+ defined: {
3643
+ name: "RESendParam"
3644
+ }
3645
+ }
3646
+ }
3647
+ ]
3648
+ },
3649
+ {
3650
+ name: "re_sender_withdraw",
3651
+ discriminator: [
3652
+ 231,
3653
+ 140,
3654
+ 27,
3655
+ 36,
3656
+ 175,
3657
+ 206,
3658
+ 105,
3659
+ 68
3660
+ ],
3661
+ accounts: [
3662
+ {
3663
+ name: "state",
3664
+ writable: true
3665
+ },
3666
+ {
3667
+ name: "re_record",
3668
+ writable: true,
3669
+ pda: {
3670
+ seeds: [
3671
+ {
3672
+ kind: "const",
3673
+ value: [
3674
+ 114,
3675
+ 101,
3676
+ 95,
3677
+ 114,
3678
+ 101,
3679
+ 99,
3680
+ 111,
3681
+ 114,
3682
+ 100
3683
+ ]
3684
+ },
3685
+ {
3686
+ kind: "arg",
3687
+ path: "re_id"
3688
+ }
3689
+ ]
3690
+ }
3691
+ },
3692
+ {
3693
+ name: "re_sender",
3694
+ writable: true,
3695
+ signer: true,
3696
+ relations: [
3697
+ "re_record"
3698
+ ]
3699
+ },
3700
+ {
3701
+ name: "system_program",
3702
+ address: "11111111111111111111111111111111"
3703
+ },
3704
+ {
3705
+ name: "from_token_account",
3706
+ writable: true,
3707
+ optional: true,
3708
+ pda: {
3709
+ seeds: [
3710
+ {
3711
+ kind: "account",
3712
+ path: "state"
3713
+ },
3714
+ {
3715
+ kind: "const",
3716
+ value: [
3717
+ 6,
3718
+ 221,
3719
+ 246,
3720
+ 225,
3721
+ 215,
3722
+ 101,
3723
+ 161,
3724
+ 147,
3725
+ 217,
3726
+ 203,
3727
+ 225,
3728
+ 70,
3729
+ 206,
3730
+ 235,
3731
+ 121,
3732
+ 172,
3733
+ 28,
3734
+ 180,
3735
+ 133,
3736
+ 237,
3737
+ 95,
3738
+ 91,
3739
+ 55,
3740
+ 145,
3741
+ 58,
3742
+ 140,
3743
+ 245,
3744
+ 133,
3745
+ 126,
3746
+ 255,
3747
+ 0,
3748
+ 169
3749
+ ]
3750
+ },
3751
+ {
3752
+ kind: "account",
3753
+ path: "mint"
3754
+ }
3755
+ ],
3756
+ program: {
3757
+ kind: "const",
3758
+ value: [
3759
+ 140,
3760
+ 151,
3761
+ 37,
3762
+ 143,
3763
+ 78,
3764
+ 36,
3765
+ 137,
3766
+ 241,
3767
+ 187,
3768
+ 61,
3769
+ 16,
3770
+ 41,
3771
+ 20,
3772
+ 142,
3773
+ 13,
3774
+ 131,
3775
+ 11,
3776
+ 90,
3777
+ 19,
3778
+ 153,
3779
+ 218,
3780
+ 255,
3781
+ 16,
3782
+ 132,
3783
+ 4,
3784
+ 142,
3785
+ 123,
3786
+ 216,
3787
+ 219,
3788
+ 233,
3789
+ 248,
3790
+ 89
3791
+ ]
3792
+ }
3793
+ }
3794
+ },
3795
+ {
3796
+ name: "to_token_account",
3797
+ writable: true,
3798
+ optional: true,
3799
+ pda: {
3800
+ seeds: [
3801
+ {
3802
+ kind: "account",
3803
+ path: "re_sender"
3804
+ },
3805
+ {
3806
+ kind: "const",
3807
+ value: [
3808
+ 6,
3809
+ 221,
3810
+ 246,
3811
+ 225,
3812
+ 215,
3813
+ 101,
3814
+ 161,
3815
+ 147,
3816
+ 217,
3817
+ 203,
3818
+ 225,
3819
+ 70,
3820
+ 206,
3821
+ 235,
3822
+ 121,
3823
+ 172,
3824
+ 28,
3825
+ 180,
3826
+ 133,
3827
+ 237,
3828
+ 95,
3829
+ 91,
3830
+ 55,
3831
+ 145,
3832
+ 58,
3833
+ 140,
3834
+ 245,
3835
+ 133,
3836
+ 126,
3837
+ 255,
3838
+ 0,
3839
+ 169
3840
+ ]
3841
+ },
3842
+ {
3843
+ kind: "account",
3844
+ path: "mint"
3845
+ }
3846
+ ],
3847
+ program: {
3848
+ kind: "const",
3849
+ value: [
3850
+ 140,
3851
+ 151,
3852
+ 37,
3853
+ 143,
3854
+ 78,
3855
+ 36,
3856
+ 137,
3857
+ 241,
3858
+ 187,
3859
+ 61,
3860
+ 16,
3861
+ 41,
3862
+ 20,
3863
+ 142,
3864
+ 13,
3865
+ 131,
3866
+ 11,
3867
+ 90,
3868
+ 19,
3869
+ 153,
3870
+ 218,
3871
+ 255,
3872
+ 16,
3873
+ 132,
3874
+ 4,
3875
+ 142,
3876
+ 123,
3877
+ 216,
3878
+ 219,
3879
+ 233,
3880
+ 248,
3881
+ 89
3882
+ ]
3883
+ }
3884
+ }
3885
+ },
3886
+ {
3887
+ name: "mint",
3888
+ optional: true
3889
+ },
3890
+ {
3891
+ name: "token_program",
3892
+ address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
3893
+ },
3894
+ {
3895
+ name: "associated_token_program",
3896
+ address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
3897
+ }
3898
+ ],
3899
+ args: [
3900
+ {
3901
+ name: "_re_id",
3902
+ type: {
3903
+ array: [
3904
+ "u8",
3905
+ 32
3906
+ ]
3907
+ }
3908
+ }
3909
+ ]
3910
+ },
3911
+ {
3912
+ name: "set_claim_fee",
3913
+ discriminator: [
3914
+ 124,
3915
+ 3,
3916
+ 184,
3917
+ 17,
3918
+ 133,
3919
+ 67,
3920
+ 255,
3921
+ 50
3922
+ ],
3923
+ accounts: [
3924
+ {
3925
+ name: "state",
3926
+ writable: true,
3927
+ pda: {
3928
+ seeds: [
3929
+ {
3930
+ kind: "const",
3931
+ value: [
3932
+ 114,
3933
+ 101,
3934
+ 100,
3935
+ 95,
3936
+ 101,
3937
+ 110,
3938
+ 118,
3939
+ 101,
3940
+ 108,
3941
+ 111,
3942
+ 112,
3943
+ 101
3944
+ ]
3945
+ }
3946
+ ]
3947
+ }
3948
+ },
3949
+ {
3950
+ name: "owner",
3951
+ writable: true,
3952
+ signer: true,
3953
+ relations: [
3954
+ "state"
3955
+ ]
3956
+ },
3957
+ {
3958
+ name: "system_program",
3959
+ address: "11111111111111111111111111111111"
3960
+ }
3961
+ ],
3962
+ args: [
3963
+ {
3964
+ name: "claim_fee",
3965
+ type: "u64"
3966
+ }
3967
+ ]
3968
+ },
3969
+ {
3970
+ name: "set_fee_recipient",
3971
+ discriminator: [
3972
+ 227,
3973
+ 18,
3974
+ 215,
3975
+ 42,
3976
+ 237,
3977
+ 246,
3978
+ 151,
3979
+ 66
3980
+ ],
3981
+ accounts: [
3982
+ {
3983
+ name: "state",
3984
+ writable: true,
3985
+ pda: {
3986
+ seeds: [
3987
+ {
3988
+ kind: "const",
3989
+ value: [
3990
+ 114,
3991
+ 101,
3992
+ 100,
3993
+ 95,
3994
+ 101,
3995
+ 110,
3996
+ 118,
3997
+ 101,
3998
+ 108,
3999
+ 111,
4000
+ 112,
4001
+ 101
4002
+ ]
4003
+ }
4004
+ ]
4005
+ }
4006
+ },
4007
+ {
4008
+ name: "owner",
4009
+ writable: true,
4010
+ signer: true,
4011
+ relations: [
4012
+ "state"
4013
+ ]
4014
+ },
4015
+ {
4016
+ name: "system_program",
4017
+ address: "11111111111111111111111111111111"
4018
+ }
4019
+ ],
4020
+ args: [
4021
+ {
4022
+ name: "fee_recipient",
4023
+ type: "pubkey"
4024
+ }
4025
+ ]
4026
+ },
4027
+ {
4028
+ name: "set_primus_zktls",
4029
+ discriminator: [
4030
+ 248,
4031
+ 182,
4032
+ 45,
4033
+ 229,
4034
+ 46,
4035
+ 5,
4036
+ 95,
4037
+ 71
4038
+ ],
4039
+ accounts: [
4040
+ {
4041
+ name: "state",
4042
+ writable: true,
4043
+ pda: {
4044
+ seeds: [
4045
+ {
4046
+ kind: "const",
4047
+ value: [
4048
+ 114,
4049
+ 101,
4050
+ 100,
4051
+ 95,
4052
+ 101,
4053
+ 110,
4054
+ 118,
4055
+ 101,
4056
+ 108,
4057
+ 111,
4058
+ 112,
4059
+ 101
4060
+ ]
4061
+ }
4062
+ ]
4063
+ }
4064
+ },
4065
+ {
4066
+ name: "owner",
4067
+ writable: true,
4068
+ signer: true,
4069
+ relations: [
4070
+ "state"
4071
+ ]
4072
+ },
4073
+ {
4074
+ name: "system_program",
4075
+ address: "11111111111111111111111111111111"
4076
+ }
4077
+ ],
4078
+ args: [
4079
+ {
4080
+ name: "primus_zktls",
4081
+ type: "pubkey"
4082
+ }
4083
+ ]
4084
+ },
4085
+ {
4086
+ name: "set_withdraw_delay",
4087
+ discriminator: [
4088
+ 184,
4089
+ 89,
4090
+ 21,
4091
+ 192,
4092
+ 34,
4093
+ 24,
4094
+ 3,
4095
+ 142
4096
+ ],
4097
+ accounts: [
4098
+ {
4099
+ name: "state",
4100
+ writable: true,
4101
+ pda: {
4102
+ seeds: [
4103
+ {
4104
+ kind: "const",
4105
+ value: [
4106
+ 114,
4107
+ 101,
4108
+ 100,
4109
+ 95,
4110
+ 101,
4111
+ 110,
4112
+ 118,
4113
+ 101,
4114
+ 108,
4115
+ 111,
4116
+ 112,
4117
+ 101
4118
+ ]
4119
+ }
4120
+ ]
4121
+ }
4122
+ },
4123
+ {
4124
+ name: "owner",
4125
+ writable: true,
4126
+ signer: true,
4127
+ relations: [
4128
+ "state"
4129
+ ]
4130
+ },
4131
+ {
4132
+ name: "system_program",
4133
+ address: "11111111111111111111111111111111"
4134
+ }
4135
+ ],
4136
+ args: [
4137
+ {
4138
+ name: "withdraw_delay",
4139
+ type: "u64"
4140
+ }
4141
+ ]
4142
+ }
4143
+ ],
4144
+ accounts: [
4145
+ {
4146
+ name: "DataBuffer",
4147
+ discriminator: [
4148
+ 235,
4149
+ 220,
4150
+ 51,
4151
+ 248,
4152
+ 56,
4153
+ 77,
4154
+ 241,
4155
+ 89
4156
+ ]
4157
+ },
4158
+ {
4159
+ name: "PrimusState",
4160
+ discriminator: [
4161
+ 200,
4162
+ 136,
4163
+ 35,
4164
+ 84,
4165
+ 173,
4166
+ 237,
4167
+ 163,
4168
+ 179
4169
+ ]
4170
+ },
4171
+ {
4172
+ name: "RERecord",
4173
+ discriminator: [
4174
+ 242,
4175
+ 171,
4176
+ 141,
4177
+ 17,
4178
+ 123,
4179
+ 107,
4180
+ 153,
4181
+ 15
4182
+ ]
4183
+ },
4184
+ {
4185
+ name: "RERecordData",
4186
+ discriminator: [
4187
+ 165,
4188
+ 107,
4189
+ 251,
4190
+ 115,
4191
+ 50,
4192
+ 118,
4193
+ 32,
4194
+ 148
4195
+ ]
4196
+ },
4197
+ {
4198
+ name: "RedEnvelopeState",
4199
+ discriminator: [
4200
+ 89,
4201
+ 134,
4202
+ 184,
4203
+ 61,
4204
+ 201,
4205
+ 123,
4206
+ 226,
4207
+ 180
4208
+ ]
4209
+ }
4210
+ ],
4211
+ events: [
4212
+ {
4213
+ name: "REClaimEvent",
4214
+ discriminator: [
4215
+ 214,
4216
+ 100,
4217
+ 41,
4218
+ 0,
4219
+ 45,
4220
+ 92,
4221
+ 31,
4222
+ 248
4223
+ ]
4224
+ },
4225
+ {
4226
+ name: "RESWithdrawEvent",
4227
+ discriminator: [
4228
+ 26,
4229
+ 207,
4230
+ 42,
4231
+ 68,
4232
+ 36,
4233
+ 174,
4234
+ 127,
4235
+ 205
4236
+ ]
4237
+ },
4238
+ {
4239
+ name: "RESendEvent",
4240
+ discriminator: [
4241
+ 147,
4242
+ 8,
4243
+ 237,
4244
+ 225,
4245
+ 123,
4246
+ 64,
4247
+ 157,
4248
+ 199
4249
+ ]
4250
+ }
4251
+ ],
4252
+ errors: [
4253
+ {
4254
+ code: 6e3,
4255
+ name: "InvalidZktlsProgram",
4256
+ msg: "Invalid Zktls Program"
4257
+ },
4258
+ {
4259
+ code: 6001,
4260
+ name: "InvalidTokenType",
4261
+ msg: "Invalid token type"
4262
+ },
4263
+ {
4264
+ code: 6002,
4265
+ name: "InvalidREType",
4266
+ msg: "Invalid red envelope type"
4267
+ },
4268
+ {
4269
+ code: 6003,
4270
+ name: "InvalidNumber",
4271
+ msg: "Invalid number"
4272
+ },
4273
+ {
4274
+ code: 6004,
4275
+ name: "InvalidEmptyRatio",
4276
+ msg: "Invalid empty ratio"
4277
+ },
4278
+ {
4279
+ code: 6005,
4280
+ name: "AmountTooLow",
4281
+ msg: "Amount too low"
4282
+ },
4283
+ {
4284
+ code: 6006,
4285
+ name: "WrongAmount",
4286
+ msg: "Wrong amount"
4287
+ },
4288
+ {
4289
+ code: 6007,
4290
+ name: "NoReId",
4291
+ msg: "Red envelope ID does not exist"
4292
+ },
4293
+ {
4294
+ code: 6008,
4295
+ name: "AllClaimed",
4296
+ msg: "All envelopes claimed"
4297
+ },
4298
+ {
4299
+ code: 6009,
4300
+ name: "UserIdEmpty",
4301
+ msg: "User ID empty"
4302
+ },
4303
+ {
4304
+ code: 6010,
4305
+ name: "InvalidUserAddress",
4306
+ msg: "Invalid User Address"
4307
+ },
4308
+ {
4309
+ code: 6011,
4310
+ name: "AlreadyClaimed",
4311
+ msg: "Already claimed"
4312
+ },
4313
+ {
4314
+ code: 6012,
4315
+ name: "AmountUnderflow",
4316
+ msg: "Amount underflow"
4317
+ },
4318
+ {
4319
+ code: 6013,
4320
+ name: "InvalidFeeRecipient",
4321
+ msg: "Invalid fee recipient"
4322
+ },
4323
+ {
4324
+ code: 6014,
4325
+ name: "InvalidStateAccount",
4326
+ msg: "Invalid state account"
4327
+ },
4328
+ {
4329
+ code: 6015,
4330
+ name: "RecipientIsZero",
4331
+ msg: "Recipient cannot be zero"
4332
+ },
4333
+ {
4334
+ code: 6016,
4335
+ name: "InvalidCheckType",
4336
+ msg: "Invalid checkType"
4337
+ },
4338
+ {
4339
+ code: 6017,
4340
+ name: "InvalidCheckParams",
4341
+ msg: "CheckParams decode failed"
4342
+ },
4343
+ {
4344
+ code: 6018,
4345
+ name: "NoFund",
4346
+ msg: "No fund"
4347
+ },
4348
+ {
4349
+ code: 6019,
4350
+ name: "NotOwner",
4351
+ msg: "Not owner"
4352
+ },
4353
+ {
4354
+ code: 6020,
4355
+ name: "NotExpired",
4356
+ msg: "Not expired"
4357
+ },
4358
+ {
4359
+ code: 6021,
4360
+ name: "UnsupportedTokenType",
4361
+ msg: "Unsupported Token Type"
4362
+ },
4363
+ {
4364
+ code: 6022,
4365
+ name: "InsufficientSOL",
4366
+ msg: "Insufficient SOL"
4367
+ },
4368
+ {
4369
+ code: 6023,
4370
+ name: "WrongTokenMint",
4371
+ msg: "Wrong token mint"
4372
+ },
4373
+ {
4374
+ code: 6024,
4375
+ name: "DeserializationFailed",
4376
+ msg: "Deserialization Failed"
4377
+ },
4378
+ {
4379
+ code: 6025,
4380
+ name: "JsonParseError",
4381
+ msg: "JSON Parse Error"
4382
+ },
4383
+ {
4384
+ code: 6026,
4385
+ name: "ResponseLengthError",
4386
+ msg: "response length error"
4387
+ },
4388
+ {
4389
+ code: 6027,
4390
+ name: "AttUrlError",
4391
+ msg: "att url error"
4392
+ },
4393
+ {
4394
+ code: 6028,
4395
+ name: "AttSuffixUrlError",
4396
+ msg: "att suffix url error"
4397
+ },
4398
+ {
4399
+ code: 6029,
4400
+ name: "JsonPathError",
4401
+ msg: "json path error"
4402
+ },
4403
+ {
4404
+ code: 6030,
4405
+ name: "UsernameKeyError",
4406
+ msg: "username key error"
4407
+ },
4408
+ {
4409
+ code: 6031,
4410
+ name: "FollowingError",
4411
+ msg: "following error"
4412
+ },
4413
+ {
4414
+ code: 6032,
4415
+ name: "FollowingNameError",
4416
+ msg: "following name error"
4417
+ },
4418
+ {
4419
+ code: 6033,
4420
+ name: "NameOpError",
4421
+ msg: "name op error"
4422
+ },
4423
+ {
4424
+ code: 6034,
4425
+ name: "AttConditionsError",
4426
+ msg: "att conditions error"
4427
+ },
4428
+ {
4429
+ code: 6035,
4430
+ name: "TooManyUrls",
4431
+ msg: "too many urls"
4432
+ },
4433
+ {
4434
+ code: 6036,
4435
+ name: "TooManyResponseresolve",
4436
+ msg: "too many responseResolve"
4437
+ },
4438
+ {
4439
+ code: 6037,
4440
+ name: "UserNameEmpty",
4441
+ msg: "user name empty"
4442
+ },
4443
+ {
4444
+ code: 6038,
4445
+ name: "SourceError",
4446
+ msg: "source error"
4447
+ },
4448
+ {
4449
+ code: 6039,
4450
+ name: "AccountResponseLengthError",
4451
+ msg: "account response length error"
4452
+ },
4453
+ {
4454
+ code: 6040,
4455
+ name: "TiktokAttUrlError",
4456
+ msg: "tiktok att url error"
4457
+ },
4458
+ {
4459
+ code: 6041,
4460
+ name: "TiktokJsonPathError",
4461
+ msg: "tiktok json path error"
4462
+ },
4463
+ {
4464
+ code: 6042,
4465
+ name: "XAttUrlError",
4466
+ msg: "x att url error"
4467
+ },
4468
+ {
4469
+ code: 6043,
4470
+ name: "XJsonPathError",
4471
+ msg: "x json path error"
4472
+ },
4473
+ {
4474
+ code: 6044,
4475
+ name: "GoogleAttUrlError",
4476
+ msg: "google att url error"
4477
+ },
4478
+ {
4479
+ code: 6045,
4480
+ name: "GoogleJsonPathError",
4481
+ msg: "google json path error"
4482
+ },
4483
+ {
4484
+ code: 6046,
4485
+ name: "XiaohongshuAttUrlError",
4486
+ msg: "xiaohongshu att url error"
4487
+ },
4488
+ {
4489
+ code: 6047,
4490
+ name: "XiaohongshuJsonPathError",
4491
+ msg: "xiaohongshu json path error"
4492
+ }
4493
+ ],
4494
+ types: [
4495
+ {
4496
+ name: "AttNetworkRequest",
4497
+ type: {
4498
+ kind: "struct",
4499
+ fields: [
4500
+ {
4501
+ name: "url",
4502
+ type: "string"
4503
+ },
4504
+ {
4505
+ name: "header",
4506
+ type: "string"
4507
+ },
4508
+ {
4509
+ name: "method",
4510
+ type: "string"
4511
+ },
4512
+ {
4513
+ name: "body",
4514
+ type: "string"
4515
+ }
4516
+ ]
4517
+ }
4518
+ },
4519
+ {
4520
+ name: "AttNetworkResponseResolve",
4521
+ type: {
4522
+ kind: "struct",
4523
+ fields: [
4524
+ {
4525
+ name: "key_name",
4526
+ type: "string"
4527
+ },
4528
+ {
4529
+ name: "parse_type",
4530
+ type: "string"
4531
+ },
4532
+ {
4533
+ name: "parse_path",
4534
+ type: "string"
4535
+ }
4536
+ ]
4537
+ }
4538
+ },
4539
+ {
4540
+ name: "Attestation",
4541
+ type: {
4542
+ kind: "struct",
4543
+ fields: [
4544
+ {
4545
+ name: "recipient",
4546
+ type: {
4547
+ array: [
4548
+ "u8",
4549
+ 32
4550
+ ]
4551
+ }
4552
+ },
4553
+ {
4554
+ name: "request",
4555
+ type: {
4556
+ defined: {
4557
+ name: "AttNetworkRequest"
4558
+ }
4559
+ }
4560
+ },
4561
+ {
4562
+ name: "response_resolve",
4563
+ type: {
4564
+ vec: {
4565
+ defined: {
4566
+ name: "AttNetworkResponseResolve"
4567
+ }
4568
+ }
4569
+ }
4570
+ },
4571
+ {
4572
+ name: "data",
4573
+ type: "string"
4574
+ },
4575
+ {
4576
+ name: "att_conditions",
4577
+ type: "string"
4578
+ },
4579
+ {
4580
+ name: "timestamp",
4581
+ type: "u64"
4582
+ },
4583
+ {
4584
+ name: "addition_params",
4585
+ type: "string"
4586
+ },
4587
+ {
4588
+ name: "attestors",
4589
+ type: {
4590
+ vec: {
4591
+ defined: {
4592
+ name: "Attestor"
4593
+ }
4594
+ }
4595
+ }
4596
+ },
4597
+ {
4598
+ name: "signatures",
4599
+ type: {
4600
+ vec: "bytes"
4601
+ }
4602
+ }
4603
+ ]
4604
+ }
4605
+ },
4606
+ {
4607
+ name: "Attestor",
4608
+ type: {
4609
+ kind: "struct",
4610
+ fields: [
4611
+ {
4612
+ name: "attestor_addr",
4613
+ type: {
4614
+ array: [
4615
+ "u8",
4616
+ 20
4617
+ ]
4618
+ }
4619
+ },
4620
+ {
4621
+ name: "url",
4622
+ type: "string"
4623
+ }
4624
+ ]
4625
+ }
4626
+ },
4627
+ {
4628
+ name: "CheckParams",
4629
+ type: {
4630
+ kind: "struct",
4631
+ fields: [
4632
+ {
4633
+ name: "check_type",
4634
+ type: "u32"
4635
+ },
4636
+ {
4637
+ name: "params",
4638
+ type: "string"
4639
+ }
4640
+ ]
4641
+ }
4642
+ },
4643
+ {
4644
+ name: "DataBuffer",
4645
+ type: {
4646
+ kind: "struct",
4647
+ fields: [
4648
+ {
4649
+ name: "user",
4650
+ type: "pubkey"
4651
+ },
4652
+ {
4653
+ name: "length",
4654
+ type: "u32"
4655
+ },
4656
+ {
4657
+ name: "data",
4658
+ type: "bytes"
4659
+ }
4660
+ ]
4661
+ }
4662
+ },
4663
+ {
4664
+ name: "PrimusState",
4665
+ type: {
4666
+ kind: "struct",
4667
+ fields: [
4668
+ {
4669
+ name: "owner",
4670
+ type: "pubkey"
4671
+ },
4672
+ {
4673
+ name: "attestors",
4674
+ type: {
4675
+ vec: {
4676
+ defined: {
4677
+ name: "Attestor"
4678
+ }
4679
+ }
4680
+ }
4681
+ },
4682
+ {
4683
+ name: "bump",
4684
+ type: "u8"
4685
+ }
4686
+ ]
4687
+ }
4688
+ },
4689
+ {
4690
+ name: "REClaimEvent",
4691
+ type: {
4692
+ kind: "struct",
4693
+ fields: [
4694
+ {
4695
+ name: "id",
4696
+ type: {
4697
+ array: [
4698
+ "u8",
4699
+ 32
4700
+ ]
4701
+ }
4702
+ },
4703
+ {
4704
+ name: "user",
4705
+ type: "pubkey"
4706
+ },
4707
+ {
4708
+ name: "user_id",
4709
+ type: "string"
4710
+ },
4711
+ {
4712
+ name: "amount",
4713
+ type: "u64"
4714
+ },
4715
+ {
4716
+ name: "index",
4717
+ type: "u32"
4718
+ },
4719
+ {
4720
+ name: "timestamp",
4721
+ type: "u64"
4722
+ },
4723
+ {
4724
+ name: "token_address",
4725
+ type: "pubkey"
4726
+ }
4727
+ ]
4728
+ }
4729
+ },
4730
+ {
4731
+ name: "RERecord",
4732
+ type: {
4733
+ kind: "struct",
4734
+ fields: [
4735
+ {
4736
+ name: "id",
4737
+ docs: [
4738
+ "Red envelope ID"
4739
+ ],
4740
+ type: {
4741
+ array: [
4742
+ "u8",
4743
+ 32
4744
+ ]
4745
+ }
4746
+ },
4747
+ {
4748
+ name: "token_type",
4749
+ docs: [
4750
+ "Token type (ERC20 / NATIVE)"
4751
+ ],
4752
+ type: "u32"
4753
+ },
4754
+ {
4755
+ name: "re_type",
4756
+ docs: [
4757
+ "Red envelope type"
4758
+ ],
4759
+ type: "u32"
4760
+ },
4761
+ {
4762
+ name: "number",
4763
+ docs: [
4764
+ "Number of recipients"
4765
+ ],
4766
+ type: "u32"
4767
+ },
4768
+ {
4769
+ name: "remaining_number",
4770
+ docs: [
4771
+ "Remaining recipients"
4772
+ ],
4773
+ type: "u32"
4774
+ },
4775
+ {
4776
+ name: "timestamp",
4777
+ docs: [
4778
+ "Timestamp sent"
4779
+ ],
4780
+ type: "u64"
4781
+ },
4782
+ {
4783
+ name: "token_address",
4784
+ docs: [
4785
+ "Token address"
4786
+ ],
4787
+ type: "pubkey"
4788
+ },
4789
+ {
4790
+ name: "re_sender",
4791
+ docs: [
4792
+ "Sender address"
4793
+ ],
4794
+ type: "pubkey"
4795
+ },
4796
+ {
4797
+ name: "check_contract",
4798
+ docs: [
4799
+ "Eligibility check contract"
4800
+ ],
4801
+ type: "pubkey"
4802
+ },
4803
+ {
4804
+ name: "amount",
4805
+ docs: [
4806
+ "Total amount"
4807
+ ],
4808
+ type: "u64"
4809
+ },
4810
+ {
4811
+ name: "remaining_amount",
4812
+ docs: [
4813
+ "Remaining amount"
4814
+ ],
4815
+ type: "u64"
4816
+ },
4817
+ {
4818
+ name: "check_params",
4819
+ docs: [
4820
+ "Eligibility check params"
4821
+ ],
4822
+ type: {
4823
+ defined: {
4824
+ name: "CheckParams"
4825
+ }
4826
+ }
4827
+ },
4828
+ {
4829
+ name: "empty_ratio",
4830
+ docs: [
4831
+ "Empty red envelope ratio, 0\u2013100"
4832
+ ],
4833
+ type: "u8"
4834
+ },
4835
+ {
4836
+ name: "record_data",
4837
+ docs: [
4838
+ "RE Record account, refer to Account<RERecordData>"
4839
+ ],
4840
+ type: "pubkey"
4841
+ }
4842
+ ]
4843
+ }
4844
+ },
4845
+ {
4846
+ name: "RERecordData",
4847
+ type: {
4848
+ kind: "struct",
4849
+ fields: [
4850
+ {
4851
+ name: "id",
4852
+ docs: [
4853
+ "Red envelope ID"
4854
+ ],
4855
+ type: {
4856
+ array: [
4857
+ "u8",
4858
+ 32
4859
+ ]
4860
+ }
4861
+ },
4862
+ {
4863
+ name: "amounts",
4864
+ docs: [
4865
+ "Red envelope amount array, containing 0 amounts."
4866
+ ],
4867
+ type: {
4868
+ vec: "u64"
4869
+ }
4870
+ },
4871
+ {
4872
+ name: "re_claimed",
4873
+ type: {
4874
+ vec: {
4875
+ array: [
4876
+ "u8",
4877
+ 8
4878
+ ]
4879
+ }
4880
+ }
4881
+ }
4882
+ ]
4883
+ }
4884
+ },
4885
+ {
4886
+ name: "RESWithdrawEvent",
4887
+ type: {
4888
+ kind: "struct",
4889
+ fields: [
4890
+ {
4891
+ name: "re_id",
4892
+ type: {
4893
+ array: [
4894
+ "u8",
4895
+ 32
4896
+ ]
4897
+ }
4898
+ },
4899
+ {
4900
+ name: "sender",
4901
+ type: "pubkey"
4902
+ },
4903
+ {
4904
+ name: "amount",
4905
+ type: "u64"
4906
+ },
4907
+ {
4908
+ name: "remaining_number",
4909
+ type: "u32"
4910
+ },
4911
+ {
4912
+ name: "timestamp",
4913
+ type: "u64"
4914
+ }
4915
+ ]
4916
+ }
4917
+ },
4918
+ {
4919
+ name: "RESendEvent",
4920
+ type: {
4921
+ kind: "struct",
4922
+ fields: [
4923
+ {
4924
+ name: "id",
4925
+ type: {
4926
+ array: [
4927
+ "u8",
4928
+ 32
4929
+ ]
4930
+ }
4931
+ },
4932
+ {
4933
+ name: "re_sender",
4934
+ type: "pubkey"
4935
+ },
4936
+ {
4937
+ name: "token_type",
4938
+ type: "u32"
4939
+ },
4940
+ {
4941
+ name: "token_address",
4942
+ type: "pubkey"
4943
+ },
4944
+ {
4945
+ name: "amount",
4946
+ type: "u64"
4947
+ },
4948
+ {
4949
+ name: "re_type",
4950
+ type: "u32"
4951
+ },
4952
+ {
4953
+ name: "number",
4954
+ type: "u32"
4955
+ },
4956
+ {
4957
+ name: "timestamp",
4958
+ type: "u64"
4959
+ },
4960
+ {
4961
+ name: "check_params",
4962
+ type: {
4963
+ defined: {
4964
+ name: "CheckParams"
4965
+ }
4966
+ }
4967
+ },
4968
+ {
4969
+ name: "empty_ratio",
4970
+ type: "u8"
4971
+ }
4972
+ ]
4973
+ }
4974
+ },
4975
+ {
4976
+ name: "RESendParam",
4977
+ type: {
4978
+ kind: "struct",
4979
+ fields: [
4980
+ {
4981
+ name: "re_type",
4982
+ docs: [
4983
+ "Red envelope type: 0 = random, 1 = average"
4984
+ ],
4985
+ type: "u32"
4986
+ },
4987
+ {
4988
+ name: "number",
4989
+ docs: [
4990
+ "Number of recipients"
4991
+ ],
4992
+ type: "u32"
4993
+ },
4994
+ {
4995
+ name: "amount",
4996
+ docs: [
4997
+ "Total amount, the smallest unit"
4998
+ ],
4999
+ type: "u64"
5000
+ },
5001
+ {
5002
+ name: "check_contract",
5003
+ docs: [
5004
+ "Eligibility check contract"
5005
+ ],
5006
+ type: "pubkey"
5007
+ },
5008
+ {
5009
+ name: "check_params",
5010
+ docs: [
5011
+ "Params passed to check_contract"
5012
+ ],
5013
+ type: {
5014
+ defined: {
5015
+ name: "CheckParams"
5016
+ }
5017
+ }
5018
+ },
5019
+ {
5020
+ name: "empty_ratio",
5021
+ docs: [
5022
+ "Empty red envelope ratio, 0\u2013100"
5023
+ ],
5024
+ type: "u8"
5025
+ }
5026
+ ]
5027
+ }
5028
+ },
5029
+ {
5030
+ name: "RedEnvelopeState",
5031
+ type: {
5032
+ kind: "struct",
5033
+ fields: [
5034
+ {
5035
+ name: "owner",
5036
+ type: "pubkey"
5037
+ },
5038
+ {
5039
+ name: "id_counter",
5040
+ type: "u128"
5041
+ },
5042
+ {
5043
+ name: "primus_zktls",
5044
+ type: "pubkey"
5045
+ },
5046
+ {
5047
+ name: "claim_fee",
5048
+ type: "u64"
5049
+ },
5050
+ {
5051
+ name: "fee_recipient",
5052
+ type: "pubkey"
5053
+ },
5054
+ {
5055
+ name: "withdraw_delay",
5056
+ type: "u64"
5057
+ },
5058
+ {
5059
+ name: "bump",
5060
+ type: "u8"
5061
+ }
5062
+ ]
5063
+ }
5064
+ },
5065
+ {
5066
+ name: "TipToken",
5067
+ type: {
5068
+ kind: "struct",
5069
+ fields: [
5070
+ {
5071
+ name: "token_type",
5072
+ docs: [
5073
+ "tokenType is erc20, native or nft. 0 means erc20, 1 means native and 2 means nft."
5074
+ ],
5075
+ type: "u32"
5076
+ },
5077
+ {
5078
+ name: "token_address",
5079
+ docs: [
5080
+ "Token address"
5081
+ ],
5082
+ type: "pubkey"
5083
+ }
5084
+ ]
5085
+ }
5086
+ }
5087
+ ]
5088
+ };
5089
+
5090
+ // src/config/zktlsIdl.json
5091
+ var zktlsIdl_default = {
5092
+ address: "3qG9pUbAHfizoqnvj9GxnTPaVgkyb7Ry6Q5vozMYdVAA",
5093
+ metadata: {
5094
+ name: "primus_zktls",
5095
+ version: "0.1.0",
5096
+ spec: "0.1.0",
5097
+ description: "Created with Anchor"
5098
+ },
5099
+ instructions: [
5100
+ {
5101
+ name: "initialize",
5102
+ discriminator: [
5103
+ 175,
5104
+ 175,
5105
+ 109,
5106
+ 31,
5107
+ 13,
5108
+ 152,
5109
+ 155,
5110
+ 237
5111
+ ],
5112
+ accounts: [
5113
+ {
5114
+ name: "state",
5115
+ writable: true,
5116
+ pda: {
5117
+ seeds: [
5118
+ {
5119
+ kind: "const",
5120
+ value: [
5121
+ 112,
5122
+ 114,
5123
+ 105,
5124
+ 109,
5125
+ 117,
5126
+ 115,
5127
+ 95,
5128
+ 115,
5129
+ 116,
5130
+ 97,
5131
+ 116,
5132
+ 101
5133
+ ]
5134
+ }
5135
+ ]
5136
+ }
5137
+ },
5138
+ {
5139
+ name: "owner",
5140
+ writable: true,
5141
+ signer: true
5142
+ },
5143
+ {
5144
+ name: "system_program",
5145
+ address: "11111111111111111111111111111111"
5146
+ }
5147
+ ],
5148
+ args: [
5149
+ {
5150
+ name: "default_addr",
5151
+ type: {
5152
+ array: [
5153
+ "u8",
5154
+ 20
5155
+ ]
5156
+ }
5157
+ }
5158
+ ]
5159
+ },
5160
+ {
5161
+ name: "remove_attestor",
5162
+ discriminator: [
5163
+ 108,
5164
+ 232,
5165
+ 239,
5166
+ 229,
5167
+ 84,
5168
+ 249,
5169
+ 29,
5170
+ 22
5171
+ ],
5172
+ accounts: [
5173
+ {
5174
+ name: "state",
5175
+ writable: true
5176
+ },
5177
+ {
5178
+ name: "owner",
5179
+ writable: true,
5180
+ signer: true,
5181
+ relations: [
5182
+ "state"
5183
+ ]
5184
+ }
5185
+ ],
5186
+ args: [
5187
+ {
5188
+ name: "target_addr",
5189
+ type: {
5190
+ array: [
5191
+ "u8",
5192
+ 20
5193
+ ]
5194
+ }
5195
+ }
5196
+ ]
5197
+ },
5198
+ {
5199
+ name: "set_attestor",
5200
+ discriminator: [
5201
+ 95,
5202
+ 11,
5203
+ 236,
5204
+ 157,
5205
+ 234,
5206
+ 146,
5207
+ 163,
5208
+ 237
5209
+ ],
5210
+ accounts: [
5211
+ {
5212
+ name: "state",
5213
+ writable: true
5214
+ },
5215
+ {
5216
+ name: "owner",
5217
+ writable: true,
5218
+ signer: true,
5219
+ relations: [
5220
+ "state"
5221
+ ]
5222
+ },
5223
+ {
5224
+ name: "system_program",
5225
+ address: "11111111111111111111111111111111"
5226
+ }
5227
+ ],
5228
+ args: [
5229
+ {
5230
+ name: "attestor",
5231
+ type: {
5232
+ defined: {
5233
+ name: "Attestor"
5234
+ }
5235
+ }
5236
+ }
5237
+ ]
5238
+ },
5239
+ {
5240
+ name: "store_chunk",
5241
+ discriminator: [
5242
+ 100,
5243
+ 147,
5244
+ 78,
5245
+ 157,
5246
+ 82,
5247
+ 197,
5248
+ 253,
5249
+ 165
5250
+ ],
5251
+ accounts: [
5252
+ {
5253
+ name: "data_buffer",
5254
+ writable: true
5255
+ },
5256
+ {
5257
+ name: "user",
5258
+ signer: true,
5259
+ relations: [
5260
+ "data_buffer"
5261
+ ]
5262
+ }
5263
+ ],
5264
+ args: [
5265
+ {
5266
+ name: "chunk",
5267
+ type: "bytes"
5268
+ }
5269
+ ]
5270
+ },
5271
+ {
5272
+ name: "store_close",
5273
+ discriminator: [
5274
+ 231,
5275
+ 65,
5276
+ 66,
5277
+ 193,
5278
+ 128,
5279
+ 236,
5280
+ 61,
5281
+ 11
5282
+ ],
5283
+ accounts: [
5284
+ {
5285
+ name: "data_buffer",
5286
+ writable: true
5287
+ },
5288
+ {
5289
+ name: "user",
5290
+ signer: true,
5291
+ relations: [
5292
+ "data_buffer"
5293
+ ]
5294
+ }
5295
+ ],
5296
+ args: []
5297
+ },
5298
+ {
5299
+ name: "store_initialize",
5300
+ docs: [
5301
+ "DataBuffer Store"
5302
+ ],
5303
+ discriminator: [
5304
+ 58,
5305
+ 143,
5306
+ 215,
5307
+ 232,
5308
+ 184,
5309
+ 29,
5310
+ 233,
5311
+ 116
5312
+ ],
5313
+ accounts: [
5314
+ {
5315
+ name: "data_buffer",
5316
+ writable: true,
5317
+ signer: true
5318
+ },
5319
+ {
5320
+ name: "user",
5321
+ writable: true,
5322
+ signer: true
5323
+ },
5324
+ {
5325
+ name: "system_program",
5326
+ address: "11111111111111111111111111111111"
5327
+ }
5328
+ ],
5329
+ args: [
5330
+ {
5331
+ name: "data_length",
5332
+ type: "u32"
5333
+ }
5334
+ ]
5335
+ },
5336
+ {
5337
+ name: "verify_attestation",
5338
+ discriminator: [
5339
+ 144,
5340
+ 30,
5341
+ 116,
5342
+ 186,
5343
+ 33,
5344
+ 176,
5345
+ 35,
5346
+ 60
5347
+ ],
5348
+ accounts: [
5349
+ {
5350
+ name: "state",
5351
+ writable: true
5352
+ },
5353
+ {
5354
+ name: "user",
5355
+ signer: true,
5356
+ relations: [
5357
+ "data_buffer"
5358
+ ]
5359
+ },
5360
+ {
5361
+ name: "data_buffer",
5362
+ writable: true,
5363
+ optional: true
5364
+ }
5365
+ ],
5366
+ args: [
5367
+ {
5368
+ name: "_att",
5369
+ type: {
5370
+ option: {
5371
+ defined: {
5372
+ name: "Attestation"
5373
+ }
5374
+ }
5375
+ }
5376
+ }
5377
+ ]
5378
+ }
5379
+ ],
5380
+ accounts: [
5381
+ {
5382
+ name: "DataBuffer",
5383
+ discriminator: [
5384
+ 235,
5385
+ 220,
5386
+ 51,
5387
+ 248,
5388
+ 56,
5389
+ 77,
5390
+ 241,
5391
+ 89
5392
+ ]
5393
+ },
5394
+ {
5395
+ name: "PrimusState",
5396
+ discriminator: [
5397
+ 200,
5398
+ 136,
5399
+ 35,
5400
+ 84,
5401
+ 173,
5402
+ 237,
5403
+ 163,
5404
+ 179
5405
+ ]
5406
+ }
5407
+ ],
5408
+ events: [
5409
+ {
5410
+ name: "AddAttestorEvent",
5411
+ discriminator: [
5412
+ 36,
5413
+ 104,
5414
+ 4,
5415
+ 119,
5416
+ 98,
5417
+ 31,
5418
+ 220,
5419
+ 145
5420
+ ]
5421
+ },
5422
+ {
5423
+ name: "DelAttestorEvent",
5424
+ discriminator: [
5425
+ 103,
5426
+ 73,
5427
+ 88,
5428
+ 10,
5429
+ 15,
5430
+ 78,
5431
+ 23,
5432
+ 49
5433
+ ]
5434
+ }
5435
+ ],
5436
+ errors: [
5437
+ {
5438
+ code: 6e3,
5439
+ name: "Unauthorized",
5440
+ msg: "Unauthorized"
5441
+ },
5442
+ {
5443
+ code: 6001,
5444
+ name: "AttestationExpired",
5445
+ msg: "Attestation expired"
5446
+ },
5447
+ {
5448
+ code: 6002,
5449
+ name: "AttestorLimitReached",
5450
+ msg: "Attestor limit reached"
5451
+ },
5452
+ {
5453
+ code: 6003,
5454
+ name: "AttestorNotFound",
5455
+ msg: "Attestor not found"
5456
+ },
5457
+ {
5458
+ code: 6004,
5459
+ name: "InvalidSignatureLength",
5460
+ msg: "Invalid signature length"
5461
+ },
5462
+ {
5463
+ code: 6005,
5464
+ name: "InvalidSignatureVValue",
5465
+ msg: "Invalid signature v value"
5466
+ },
5467
+ {
5468
+ code: 6006,
5469
+ name: "InvalidSignature",
5470
+ msg: "Invalid signature"
5471
+ },
5472
+ {
5473
+ code: 6007,
5474
+ name: "TooLarge",
5475
+ msg: "Too Large"
5476
+ },
5477
+ {
5478
+ code: 6008,
5479
+ name: "DeserializationFailed",
5480
+ msg: "Deserialization Failed"
5481
+ },
5482
+ {
5483
+ code: 6009,
5484
+ name: "OutOfBounds",
5485
+ msg: "Out Of Bounds"
5486
+ }
5487
+ ],
5488
+ types: [
5489
+ {
5490
+ name: "AddAttestorEvent",
5491
+ type: {
5492
+ kind: "struct",
5493
+ fields: [
5494
+ {
5495
+ name: "address",
5496
+ type: {
5497
+ array: [
5498
+ "u8",
5499
+ 20
5500
+ ]
5501
+ }
5502
+ },
5503
+ {
5504
+ name: "attestor",
5505
+ type: {
5506
+ defined: {
5507
+ name: "Attestor"
5508
+ }
5509
+ }
5510
+ }
5511
+ ]
5512
+ }
5513
+ },
5514
+ {
5515
+ name: "AttNetworkRequest",
5516
+ type: {
5517
+ kind: "struct",
5518
+ fields: [
5519
+ {
5520
+ name: "url",
5521
+ type: "string"
5522
+ },
5523
+ {
5524
+ name: "header",
5525
+ type: "string"
5526
+ },
5527
+ {
5528
+ name: "method",
5529
+ type: "string"
5530
+ },
5531
+ {
5532
+ name: "body",
5533
+ type: "string"
5534
+ }
5535
+ ]
5536
+ }
5537
+ },
5538
+ {
5539
+ name: "AttNetworkResponseResolve",
5540
+ type: {
5541
+ kind: "struct",
5542
+ fields: [
5543
+ {
5544
+ name: "key_name",
5545
+ type: "string"
5546
+ },
5547
+ {
5548
+ name: "parse_type",
5549
+ type: "string"
5550
+ },
5551
+ {
5552
+ name: "parse_path",
5553
+ type: "string"
5554
+ }
5555
+ ]
5556
+ }
5557
+ },
5558
+ {
5559
+ name: "Attestation",
5560
+ type: {
5561
+ kind: "struct",
5562
+ fields: [
5563
+ {
5564
+ name: "recipient",
5565
+ type: {
5566
+ array: [
5567
+ "u8",
5568
+ 32
5569
+ ]
5570
+ }
5571
+ },
5572
+ {
5573
+ name: "request",
5574
+ type: {
5575
+ defined: {
5576
+ name: "AttNetworkRequest"
5577
+ }
5578
+ }
5579
+ },
5580
+ {
5581
+ name: "response_resolve",
5582
+ type: {
5583
+ vec: {
5584
+ defined: {
5585
+ name: "AttNetworkResponseResolve"
5586
+ }
5587
+ }
5588
+ }
5589
+ },
5590
+ {
5591
+ name: "data",
5592
+ type: "string"
5593
+ },
5594
+ {
5595
+ name: "att_conditions",
5596
+ type: "string"
5597
+ },
5598
+ {
5599
+ name: "timestamp",
5600
+ type: "u64"
5601
+ },
5602
+ {
5603
+ name: "addition_params",
5604
+ type: "string"
5605
+ },
5606
+ {
5607
+ name: "attestors",
5608
+ type: {
5609
+ vec: {
5610
+ defined: {
5611
+ name: "Attestor"
5612
+ }
5613
+ }
5614
+ }
5615
+ },
5616
+ {
5617
+ name: "signatures",
5618
+ type: {
5619
+ vec: "bytes"
5620
+ }
5621
+ }
5622
+ ]
5623
+ }
5624
+ },
5625
+ {
5626
+ name: "Attestor",
5627
+ type: {
5628
+ kind: "struct",
5629
+ fields: [
5630
+ {
5631
+ name: "attestor_addr",
5632
+ type: {
5633
+ array: [
5634
+ "u8",
5635
+ 20
5636
+ ]
5637
+ }
5638
+ },
5639
+ {
5640
+ name: "url",
5641
+ type: "string"
5642
+ }
5643
+ ]
5644
+ }
5645
+ },
5646
+ {
5647
+ name: "DataBuffer",
5648
+ type: {
5649
+ kind: "struct",
5650
+ fields: [
5651
+ {
5652
+ name: "user",
5653
+ type: "pubkey"
5654
+ },
5655
+ {
5656
+ name: "length",
5657
+ type: "u32"
5658
+ },
5659
+ {
5660
+ name: "data",
5661
+ type: "bytes"
5662
+ }
5663
+ ]
5664
+ }
5665
+ },
5666
+ {
5667
+ name: "DelAttestorEvent",
5668
+ type: {
5669
+ kind: "struct",
5670
+ fields: [
5671
+ {
5672
+ name: "address",
5673
+ type: {
5674
+ array: [
5675
+ "u8",
5676
+ 20
5677
+ ]
5678
+ }
5679
+ }
5680
+ ]
5681
+ }
5682
+ },
5683
+ {
5684
+ name: "PrimusState",
5685
+ type: {
5686
+ kind: "struct",
5687
+ fields: [
5688
+ {
5689
+ name: "owner",
5690
+ type: "pubkey"
5691
+ },
5692
+ {
5693
+ name: "attestors",
5694
+ type: {
5695
+ vec: {
5696
+ defined: {
5697
+ name: "Attestor"
5698
+ }
5699
+ }
5700
+ }
5701
+ },
5702
+ {
5703
+ name: "bump",
5704
+ type: "u8"
5705
+ }
5706
+ ]
5707
+ }
5708
+ }
5709
+ ]
5710
+ };
5711
+
5712
+ // src/classes/solana/sdk.ts
5713
+ import * as anchor2 from "@coral-xyz/anchor";
5714
+ import {
5715
+ PublicKey as PublicKey3,
5716
+ SystemProgram,
5717
+ Transaction,
5718
+ Keypair
5719
+ } from "@solana/web3.js";
5720
+
5721
+ // src/classes/solana/attestation_schema.ts
5722
+ import * as borsh2 from "borsh";
5723
+ var { serialize } = borsh2;
5724
+ var Attestor = class {
5725
+ attestorAddr;
5726
+ url;
5727
+ constructor(fields) {
5728
+ this.attestorAddr = fields.attestorAddr;
5729
+ this.url = fields.url;
5730
+ }
5731
+ };
5732
+ var AttNetworkRequest = class {
5733
+ url;
5734
+ header;
5735
+ method;
5736
+ body;
5737
+ constructor(fields) {
5738
+ this.url = fields.url;
5739
+ this.header = fields.header;
5740
+ this.method = fields.method;
5741
+ this.body = fields.body;
5742
+ }
5743
+ };
5744
+ var AttNetworkResponseResolve = class {
5745
+ keyName;
5746
+ parseType;
5747
+ parsePath;
5748
+ constructor(fields) {
5749
+ this.keyName = fields.keyName;
5750
+ this.parseType = fields.parseType;
5751
+ this.parsePath = fields.parsePath;
5752
+ }
5753
+ };
5754
+ var Attestation = class {
5755
+ recipient;
5756
+ request;
5757
+ responseResolve;
5758
+ data;
5759
+ attConditions;
5760
+ timestamp;
5761
+ additionParams;
5762
+ attestors;
5763
+ signatures;
5764
+ constructor(fields) {
5765
+ this.recipient = fields.recipient;
5766
+ this.request = new AttNetworkRequest(fields.request);
5767
+ this.responseResolve = fields.responseResolve.map((x) => new AttNetworkResponseResolve(x));
5768
+ this.data = fields.data;
5769
+ this.attConditions = fields.attConditions;
5770
+ this.timestamp = fields.timestamp;
5771
+ this.additionParams = fields.additionParams;
5772
+ this.attestors = fields.attestors.map((x) => new Attestor(x));
5773
+ this.signatures = fields.signatures;
5774
+ }
5775
+ };
5776
+ var schema = /* @__PURE__ */ new Map([
5777
+ [Attestor, {
5778
+ kind: "struct",
5779
+ fields: [
5780
+ ["attestorAddr", [20]],
5781
+ ["url", "string"]
5782
+ ]
5783
+ }],
5784
+ [AttNetworkRequest, {
5785
+ kind: "struct",
5786
+ fields: [
5787
+ ["url", "string"],
5788
+ ["header", "string"],
5789
+ ["method", "string"],
5790
+ ["body", "string"]
5791
+ ]
5792
+ }],
5793
+ [AttNetworkResponseResolve, {
5794
+ kind: "struct",
5795
+ fields: [
5796
+ ["keyName", "string"],
5797
+ ["parseType", "string"],
5798
+ ["parsePath", "string"]
5799
+ ]
5800
+ }],
5801
+ [Attestation, {
5802
+ kind: "struct",
5803
+ fields: [
5804
+ ["recipient", [32]],
5805
+ ["request", AttNetworkRequest],
5806
+ ["responseResolve", [AttNetworkResponseResolve]],
5807
+ ["data", "string"],
5808
+ ["attConditions", "string"],
5809
+ ["timestamp", "u64"],
5810
+ ["additionParams", "string"],
5811
+ ["attestors", [Attestor]],
5812
+ ["signatures", [["u8"]]]
5813
+ ]
5814
+ }]
5815
+ ]);
5816
+ function normalizeAttestationInput(obj) {
5817
+ return new Attestation({
5818
+ ...obj,
5819
+ request: new AttNetworkRequest(obj.request),
5820
+ responseResolve: obj.responseResolve.map((x) => new AttNetworkResponseResolve(x)),
5821
+ attestors: obj.attestors.map((x) => new Attestor(x))
5822
+ });
5823
+ }
5824
+ function serializeAttestation(attObj) {
5825
+ const borshObj = normalizeAttestationInput(attObj);
5826
+ console.log("attObj", attObj, "serializeAttestation-borshObj", borshObj);
5827
+ const buffer = serialize(schema, borshObj);
5828
+ console.log("attObj=buffer", buffer);
5829
+ return buffer;
5830
+ }
5831
+
5832
+ // src/classes/solana/pda.ts
5833
+ import {
5834
+ PublicKey as PublicKey2
5835
+ } from "@solana/web3.js";
5836
+ var SEED_PRIMUS_STATE = new TextEncoder().encode("primus_state");
5837
+ var SEED_PRIMUS_RE_STATE = new TextEncoder().encode("red_envelope");
5838
+ var SEED_PRIMUS_RE_RECORD = new TextEncoder().encode("re_record");
5839
+ function getPrimusZktlsPda({
5840
+ programId
5841
+ }) {
5842
+ return PublicKey2.findProgramAddressSync(
5843
+ [SEED_PRIMUS_STATE],
5844
+ programId
5845
+ );
5846
+ }
5847
+ function getPrimusRedEnvelopePda({
5848
+ programId
5849
+ }) {
5850
+ return PublicKey2.findProgramAddressSync(
5851
+ [SEED_PRIMUS_RE_STATE],
5852
+ programId
5853
+ );
5854
+ }
5855
+ function getPrimusRERecordPda({
5856
+ programId,
5857
+ reId
5858
+ }) {
5859
+ return PublicKey2.findProgramAddressSync(
5860
+ [SEED_PRIMUS_RE_RECORD, reId],
5861
+ programId
5862
+ );
5863
+ }
5864
+
5865
+ // src/classes/solana/sdk.ts
5866
+ import { utils } from "ethers";
5867
+ import { getAssociatedTokenAddress } from "@solana/spl-token";
5868
+ var ERC20_TYPE = 0;
5869
+ var CHUNK_SIZE = 960;
5870
+ var VERBOSE = 0;
5871
+ var RE_USERID_LEN = 8;
5872
+ var NATIVETOKENATTBUFFERMAXLEN = 718;
5873
+ var ERC20TOKENATTBUFFERMAXLEN = 622;
5874
+ async function waitForTransactionConfirmation(provider, tx, retries = 5, delayMs = 1e3) {
5875
+ for (let i = 0; i < retries; i++) {
5876
+ const txDetails = await provider.connection.getTransaction(tx, {
5877
+ maxSupportedTransactionVersion: 0,
5878
+ commitment: "confirmed"
5879
+ });
5880
+ if (txDetails) {
5881
+ console.log("Transaction details:", txDetails);
5882
+ if (VERBOSE > 2) {
5883
+ console.log("Program logs:", txDetails.meta?.logMessages);
5884
+ }
5885
+ return txDetails;
5886
+ }
5887
+ await new Promise((res) => setTimeout(res, delayMs));
5888
+ }
5889
+ console.warn(`Transaction ${tx} not found after ${retries} retries.`);
5890
+ return null;
5891
+ }
5892
+ async function reSend({
5893
+ redEnvelopeProgram,
5894
+ userKey,
5895
+ provider,
5896
+ tipToken,
5897
+ reSendParam,
5898
+ payer = null
5899
+ }) {
5900
+ return new Promise(async (resolve, reject) => {
5901
+ let signatureStr;
5902
+ try {
5903
+ const spaceAccount = Keypair.generate();
5904
+ const space = 8 + 32 + 4 + 8 * reSendParam.number + 4 + RE_USERID_LEN * reSendParam.number;
5905
+ if (space > 10 * 1024 * 1024 - 256) {
5906
+ throw "Cannot make so large space[" + space.toString() + "]";
5907
+ }
5908
+ const lamports = await provider.connection.getMinimumBalanceForRentExemption(space);
5909
+ console.log("spaceAccount:", spaceAccount.publicKey.toBase58(), "space:", space, "minimum rent:", lamports / 1e9, "SOL");
5910
+ const createIx = SystemProgram.createAccount({
5911
+ fromPubkey: userKey,
5912
+ newAccountPubkey: spaceAccount.publicKey,
5913
+ lamports,
5914
+ space,
5915
+ programId: redEnvelopeProgram.programId
5916
+ });
5917
+ const reRecordDataInitIx = await redEnvelopeProgram.methods.reRecordDataInit().accounts({
5918
+ reRecordData: spaceAccount.publicKey,
5919
+ sender: userKey
5920
+ }).signers([spaceAccount]).instruction();
5921
+ const [redEnvelopePda] = getPrimusRedEnvelopePda({ programId: redEnvelopeProgram.programId });
5922
+ const redEnvelopeState = await redEnvelopeProgram.account.redEnvelopeState.fetch(redEnvelopePda);
5923
+ console.log("idCounter", redEnvelopeState.idCounter.toString());
5924
+ const idCounter = new anchor2.BN(redEnvelopeState.idCounter);
5925
+ const idCounterBytes = idCounter.toArrayLike(Buffer, "le", 16);
5926
+ const reId = Buffer.from(utils.arrayify(utils.keccak256(idCounterBytes)));
5927
+ const [reRecordPda] = getPrimusRERecordPda({ programId: redEnvelopeProgram.programId, reId });
5928
+ let mint = null;
5929
+ let fromTokenAccount = null;
5930
+ let toTokenAccount = null;
5931
+ if (tipToken.tokenType == ERC20_TYPE) {
5932
+ mint = tipToken.tokenAddress;
5933
+ fromTokenAccount = await getAssociatedTokenAddress(mint, userKey);
5934
+ toTokenAccount = await getAssociatedTokenAddress(mint, redEnvelopePda, true);
5935
+ }
5936
+ const reSendIx = await redEnvelopeProgram.methods.reSend(Array.from(reId), tipToken, reSendParam).accounts({
5937
+ state: redEnvelopePda,
5938
+ reRecord: reRecordPda,
5939
+ reRecordData: spaceAccount.publicKey,
5940
+ sender: userKey,
5941
+ // SPL
5942
+ fromTokenAccount,
5943
+ toTokenAccount,
5944
+ mint
5945
+ }).instruction();
5946
+ const tx = new Transaction().add(createIx).add(reRecordDataInitIx).add(reSendIx);
5947
+ tx.feePayer = userKey;
5948
+ tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
5949
+ tx.partialSign(spaceAccount);
5950
+ const signedTx = await provider.wallet.signTransaction(tx);
5951
+ signatureStr = getTxSigStrFromTx(signedTx);
5952
+ const isOnChain = await getTxIsOnChain(signatureStr, provider.connection);
5953
+ if (isOnChain) {
5954
+ console.log("reSend done, reId: ", reId.toString("hex"), signatureStr);
5955
+ return resolve(signatureStr);
5956
+ } else {
5957
+ const serializeSignedTx = signedTx.serialize();
5958
+ console.log("signedTx", signedTx, serializeSignedTx, tx.recentBlockhash);
5959
+ signatureStr = await provider.connection.sendRawTransaction(serializeSignedTx);
5960
+ console.log("reSend done, reId: ", reId.toString("hex"), signatureStr);
5961
+ return resolve(signatureStr);
5962
+ }
5963
+ } catch (err) {
5964
+ if (getTxIsOnProcess(err)) {
5965
+ console.log("reSenderWithdraw done");
5966
+ return resolve(signatureStr);
5967
+ } else {
5968
+ console.error("reSend error:", err);
5969
+ const formatErr = formatErrFn(err);
5970
+ return reject(formatErr);
5971
+ }
5972
+ } finally {
5973
+ }
5974
+ });
5975
+ }
5976
+ async function reClaim({
5977
+ redEnvelopeProgram,
5978
+ userKey,
5979
+ provider,
5980
+ zktlsProgram,
5981
+ reId,
5982
+ attObj
5983
+ }) {
5984
+ return new Promise(async (resolve, reject) => {
5985
+ const [redEnvelopePda] = getPrimusRedEnvelopePda({ programId: redEnvelopeProgram.programId });
5986
+ const [reRecordPda] = getPrimusRERecordPda({ programId: redEnvelopeProgram.programId, reId });
5987
+ const [primusZktlsPda] = getPrimusZktlsPda({ programId: zktlsProgram.programId });
5988
+ console.log("primusZktlsPda:", primusZktlsPda.toBase58());
5989
+ console.log("reRecordPda:", reRecordPda.toBase58());
5990
+ const attRecipient = new PublicKey3(attObj.recipient);
5991
+ const redEnvelopeState = await redEnvelopeProgram.account.redEnvelopeState.fetch(redEnvelopePda);
5992
+ console.log("redEnvelopeState.feeRecipient", redEnvelopeState.feeRecipient.toBase58());
5993
+ const feeRecipient = redEnvelopeState.feeRecipient;
5994
+ const reRecord = await redEnvelopeProgram.account.reRecord.fetch(reRecordPda);
5995
+ let tx;
5996
+ let signatureStr;
5997
+ const dataBuffer = anchor2.web3.Keypair.generate();
5998
+ const dataBufferKey = dataBuffer.publicKey;
5999
+ const attBuffer = serializeAttestation(attObj);
6000
+ console.log(`attBuffer.length=${attBuffer.length}`);
6001
+ let storeInitialized = false;
6002
+ let useStoreVersion = false;
6003
+ if (reRecord.tokenType == ERC20_TYPE && attBuffer.length > ERC20TOKENATTBUFFERMAXLEN || reRecord.tokenType != ERC20_TYPE && attBuffer.length > NATIVETOKENATTBUFFERMAXLEN) {
6004
+ useStoreVersion = true;
6005
+ }
6006
+ try {
6007
+ if (useStoreVersion) {
6008
+ const txStoreInitialize = await zktlsProgram.methods.storeInitialize(attBuffer.length).accounts({ dataBuffer: dataBufferKey, user: userKey }).signers([dataBuffer]).rpc();
6009
+ await waitForTransactionConfirmation(provider, txStoreInitialize);
6010
+ storeInitialized = true;
6011
+ console.log("storeInitialize done");
6012
+ for (let offset = 0; offset < attBuffer.length; offset += CHUNK_SIZE) {
6013
+ const chunk = attBuffer.slice(offset, offset + CHUNK_SIZE);
6014
+ const txStoreChunk = await zktlsProgram.methods.storeChunk(Buffer.from(chunk)).accounts({ dataBuffer: dataBufferKey, user: userKey }).rpc();
6015
+ await waitForTransactionConfirmation(provider, txStoreChunk);
6016
+ }
6017
+ console.log("storeChunk done");
6018
+ }
6019
+ const reRecordData2 = await redEnvelopeProgram.account.reRecordData.fetch(reRecord.recordData);
6020
+ console.log("reRecordData2:", reRecordData2);
6021
+ console.log("reRecord.tokenType:", reRecord.tokenType);
6022
+ const reRecordData = reRecord.recordData;
6023
+ console.log("reRecord.recordData", reRecord.recordData.toBase58());
6024
+ let mint = null;
6025
+ let fromTokenAccount = null;
6026
+ let toTokenAccount = null;
6027
+ if (reRecord.tokenType == ERC20_TYPE) {
6028
+ console.log("reRecord.tokenAddress:", reRecord.tokenAddress);
6029
+ mint = reRecord.tokenAddress;
6030
+ fromTokenAccount = await getAssociatedTokenAddress(mint, redEnvelopePda, true);
6031
+ toTokenAccount = await getAssociatedTokenAddress(mint, attRecipient);
6032
+ }
6033
+ let _att = attObj;
6034
+ let _dataBufferKey = null;
6035
+ if (useStoreVersion) {
6036
+ _att = null;
6037
+ _dataBufferKey = dataBufferKey;
6038
+ }
6039
+ tx = await redEnvelopeProgram.methods.reClaim(reId, _att).accounts({
6040
+ state: redEnvelopePda,
6041
+ reRecord: reRecordPda,
6042
+ reRecordData,
6043
+ claimer: userKey,
6044
+ primusZktlsProgram: zktlsProgram.programId.toBase58(),
6045
+ primusZktlsState: primusZktlsPda,
6046
+ feeRecipient,
6047
+ attRecipient,
6048
+ dataBuffer: _dataBufferKey,
6049
+ // SPL
6050
+ fromTokenAccount,
6051
+ toTokenAccount,
6052
+ mint
6053
+ }).transaction();
6054
+ tx.feePayer = userKey;
6055
+ tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
6056
+ const signedTx = await provider.wallet.signTransaction(tx);
6057
+ signatureStr = getTxSigStrFromTx(signedTx);
6058
+ const isOnChain = await getTxIsOnChain(signatureStr, provider.connection);
6059
+ if (isOnChain) {
6060
+ console.log("reClaim done", signatureStr);
6061
+ return resolve(signatureStr);
6062
+ } else {
6063
+ const serializeSignedTx = signedTx.serialize();
6064
+ signatureStr = await provider.connection.sendRawTransaction(serializeSignedTx);
6065
+ console.log("reClaim done ", signatureStr);
6066
+ return resolve(signatureStr);
6067
+ }
6068
+ } catch (err) {
6069
+ if (getTxIsOnProcess(err)) {
6070
+ console.log("reClaim done");
6071
+ } else {
6072
+ console.error("reClaim error:", err);
6073
+ const formatErr = formatErrFn(err);
6074
+ return reject(formatErr);
6075
+ }
6076
+ } finally {
6077
+ if (useStoreVersion && storeInitialized) {
6078
+ try {
6079
+ const txStoreClose = await zktlsProgram.methods.storeClose().accounts({ dataBuffer: dataBufferKey, user: userKey }).rpc();
6080
+ await waitForTransactionConfirmation(provider, txStoreClose);
6081
+ console.log("storeClose done");
6082
+ return resolve(signatureStr);
6083
+ } catch (closeErr) {
6084
+ console.error("Failed to close dataBuffer:", closeErr);
6085
+ }
6086
+ } else {
6087
+ return resolve(signatureStr);
6088
+ }
6089
+ }
6090
+ });
6091
+ }
6092
+ async function reSenderWithdraw({
6093
+ redEnvelopeProgram,
6094
+ userKey,
6095
+ provider,
6096
+ reId
6097
+ }) {
6098
+ return new Promise(async (resolve, reject) => {
6099
+ let tx;
6100
+ let signatureStr;
6101
+ try {
6102
+ const [redEnvelopePda] = getPrimusRedEnvelopePda({ programId: redEnvelopeProgram.programId });
6103
+ const [reRecordPda] = getPrimusRERecordPda({ programId: redEnvelopeProgram.programId, reId });
6104
+ const reRecord = await redEnvelopeProgram.account.reRecord.fetch(reRecordPda);
6105
+ console.log("reRecord.tokenType:", reRecord.tokenType);
6106
+ let mint = null;
6107
+ let fromTokenAccount = null;
6108
+ let toTokenAccount = null;
6109
+ if (reRecord.tokenType == ERC20_TYPE) {
6110
+ console.log("reRecord.tokenAddress:", reRecord.tokenAddress);
6111
+ mint = reRecord.tokenAddress;
6112
+ fromTokenAccount = await getAssociatedTokenAddress(mint, redEnvelopePda, true);
6113
+ toTokenAccount = await getAssociatedTokenAddress(mint, userKey);
6114
+ }
6115
+ tx = await redEnvelopeProgram.methods.reSenderWithdraw(reId).accounts({
6116
+ state: redEnvelopePda,
6117
+ reRecord: reRecordPda,
6118
+ reSender: userKey,
6119
+ // SPL
6120
+ fromTokenAccount,
6121
+ toTokenAccount,
6122
+ mint
6123
+ }).transaction();
6124
+ tx.feePayer = userKey;
6125
+ tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
6126
+ const signedTx = await provider.wallet.signTransaction(tx);
6127
+ signatureStr = getTxSigStrFromTx(signedTx);
6128
+ const isOnChain = await getTxIsOnChain(signatureStr, provider.connection);
6129
+ if (isOnChain) {
6130
+ console.log("reSenderWithdraw done", signatureStr);
6131
+ return resolve(signatureStr);
6132
+ } else {
6133
+ const serializeSignedTx = signedTx.serialize();
6134
+ signatureStr = await provider.connection.sendRawTransaction(serializeSignedTx);
6135
+ console.log("reSenderWithdraw done", signatureStr);
6136
+ return resolve(signatureStr);
6137
+ }
6138
+ } catch (err) {
6139
+ if (getTxIsOnProcess(err)) {
6140
+ console.log("reSenderWithdraw done");
6141
+ return resolve(signatureStr);
6142
+ } else {
6143
+ console.error("reSenderWithdraw error:", err);
6144
+ const formatErr = formatErrFn(err);
6145
+ return reject(formatErr);
6146
+ }
6147
+ }
6148
+ });
6149
+ }
6150
+ async function getREInfo({
6151
+ redEnvelopeProgram,
6152
+ reId
6153
+ }) {
6154
+ return new Promise(async (resolve, reject) => {
6155
+ try {
6156
+ const [reRecordPda] = getPrimusRERecordPda({ programId: redEnvelopeProgram.programId, reId });
6157
+ const reRecord = await redEnvelopeProgram.account.reRecord.fetch(reRecordPda);
6158
+ console.log("getREInfo done", reRecord);
6159
+ return resolve(reRecord);
6160
+ } catch (err) {
6161
+ console.error("getREInfo error:", err);
6162
+ const formatErr = formatErrFn(err);
6163
+ return reject(formatErr);
6164
+ }
6165
+ });
6166
+ }
6167
+
6168
+ // src/classes/FundOnSolanaForRedPacket.ts
6169
+ import { PublicKey as PublicKey4 } from "@solana/web3.js";
6170
+ var FundOnSolanaForRedPacket = class {
6171
+ fundContract;
6172
+ provider;
6173
+ constructor() {
6174
+ }
6175
+ async init(provider, chainId) {
6176
+ return new Promise(async (resolve, reject) => {
6177
+ try {
6178
+ this.fundContract = getProgram(redPacketIdl_default, provider);
6179
+ this.provider = provider;
6180
+ resolve("success");
6181
+ } catch (error) {
6182
+ return reject(error);
6183
+ }
6184
+ });
6185
+ }
6186
+ async fund(tokenInfo, sendParam) {
6187
+ return new Promise(async (resolve, reject) => {
6188
+ try {
6189
+ let decimals = 9;
6190
+ let amountOnChain;
6191
+ let formatTokenInfo = { ...tokenInfo };
6192
+ if (tokenInfo.tokenType === 1) {
6193
+ formatTokenInfo.tokenAddress = anchor3.web3.PublicKey.default;
6194
+ amountOnChain = toTokenAmount(sendParam.amount, decimals);
6195
+ } else if (tokenInfo.tokenType === 0) {
6196
+ decimals = await getTokenDecimals(tokenInfo.tokenAddress, this.provider.connection);
6197
+ amountOnChain = toTokenAmount(sendParam.amount, decimals);
6198
+ formatTokenInfo.tokenAddress = new PublicKey4(tokenInfo.tokenAddress);
6199
+ }
6200
+ const reSendParam = {
6201
+ ...sendParam,
6202
+ amount: amountOnChain,
6203
+ checkContract: sendParam.checkContract || anchor3.web3.PublicKey.default
6204
+ };
6205
+ const result = await reSend({
6206
+ redEnvelopeProgram: this.fundContract,
6207
+ userKey: this.provider.publicKey,
6208
+ provider: this.provider,
6209
+ tipToken: formatTokenInfo,
6210
+ reSendParam
6211
+ });
6212
+ resolve(result);
6213
+ } catch (error) {
6214
+ return reject(error);
6215
+ }
6216
+ });
6217
+ }
6218
+ async claim(redPacketId, attestation) {
6219
+ return new Promise(async (resolve, reject) => {
6220
+ try {
6221
+ const zktlsProgram = getProgram(zktlsIdl_default, this.provider);
6222
+ const attObj = formatAttestation(attestation);
6223
+ let formatReId = hexToUint8Array(redPacketId);
6224
+ const result = await reClaim({
6225
+ redEnvelopeProgram: this.fundContract,
6226
+ userKey: this.provider.publicKey,
6227
+ provider: this.provider,
6228
+ zktlsProgram,
6229
+ reId: formatReId,
6230
+ attObj
6231
+ });
6232
+ return resolve(result);
6233
+ } catch (error) {
6234
+ return reject(error);
6235
+ }
6236
+ });
6237
+ }
6238
+ async withdraw(redPacketId) {
6239
+ return new Promise(async (resolve, reject) => {
6240
+ try {
6241
+ let formatReId = hexToUint8Array(redPacketId);
6242
+ const result = await reSenderWithdraw({
6243
+ redEnvelopeProgram: this.fundContract,
6244
+ userKey: this.provider.publicKey,
6245
+ provider: this.provider,
6246
+ reId: formatReId
6247
+ });
6248
+ return resolve(result);
6249
+ } catch (error) {
6250
+ return reject(error);
6251
+ }
6252
+ });
6253
+ }
6254
+ async getRedPacketInfo(redPacketId) {
6255
+ return new Promise(async (resolve, reject) => {
6256
+ try {
6257
+ let formatReId = hexToUint8Array(redPacketId);
6258
+ const result = await getREInfo({ redEnvelopeProgram: this.fundContract, reId: formatReId });
6259
+ const redpacketInfo = { ...result, id: redPacketId };
6260
+ return resolve(redpacketInfo);
6261
+ } catch (error) {
6262
+ return reject(error);
6263
+ }
6264
+ });
6265
+ }
6266
+ async decodeReSendEvent(eventData) {
6267
+ return await decodeReSendEvent(eventData);
6268
+ }
6269
+ async decodeClaimEvent(eventData) {
6270
+ return await decodeClaimEvent(eventData);
6271
+ }
6272
+ };
6273
+
6274
+ // src/classes/ZktlsSdk.ts
6275
+ import { PrimusZKTLS } from "@primuslabs/zktls-js-sdk";
6276
+ var ZktlsSdk = class {
6277
+ zkTlsSdk;
6278
+ constructor() {
6279
+ }
6280
+ getZkTlsSdk() {
6281
+ return this.zkTlsSdk;
6282
+ }
6283
+ async init(appId) {
6284
+ return new Promise(async (resolve, reject) => {
6285
+ try {
6286
+ this.zkTlsSdk = new PrimusZKTLS();
6287
+ let platformDevice = "pc";
6288
+ const isIpad = () => {
6289
+ const userAgent = navigator.userAgent.toLowerCase();
6290
+ const isTabletSize = window.innerWidth > 768 && window.innerWidth < 1366;
6291
+ return /ipad/.test(userAgent) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 0 && isTabletSize;
6292
+ };
6293
+ if (navigator.userAgent.toLocaleLowerCase().includes("android")) {
6294
+ platformDevice = "android";
6295
+ } else if (navigator.userAgent.toLocaleLowerCase().includes("iphone") || isIpad()) {
6296
+ platformDevice = "ios";
6297
+ }
6298
+ console.log("init appId", appId, platformDevice);
6299
+ const extensionVersion = await this.zkTlsSdk.init(
6300
+ appId,
6301
+ "",
6302
+ { platform: platformDevice }
6303
+ );
6304
+ resolve(extensionVersion);
6305
+ } catch (error) {
6306
+ return reject(error);
6307
+ }
6308
+ });
6309
+ }
6310
+ async attest(attestParams, signFn, backUrl) {
6311
+ return new Promise(async (resolve, reject) => {
6312
+ console.log("this.zkTlsSdk", this.zkTlsSdk);
6313
+ const { socialPlatform, userIdentifier, address } = attestParams;
6314
+ const { id: templateId, field } = DATASOURCETEMPLATESMAP[socialPlatform];
6315
+ const attRequest = this.zkTlsSdk.generateRequestParams(
6316
+ templateId,
6317
+ address
6318
+ );
6319
+ if (backUrl) {
6320
+ attRequest.setBackUrl(backUrl);
6321
+ }
6322
+ console.log(`attRequest: ${JSON.stringify(attRequest)}`);
6323
+ attRequest.setAttConditions([
6324
+ [
6325
+ {
6326
+ field,
6327
+ op: "STREQ",
6328
+ value: userIdentifier
6329
+ }
6330
+ ]
6331
+ ]);
6332
+ const signParams = attRequest.toJsonString();
6333
+ const signature = await signFn(signParams);
6334
+ if (!signature) {
6335
+ return reject(`appSignature is empty!`);
6336
+ }
6337
+ try {
6338
+ const formatAttestParams = {
6339
+ attRequest: {
6340
+ ...JSON.parse(signParams)
6341
+ },
6342
+ appSignature: signature
6343
+ };
6344
+ const attestation = await this.zkTlsSdk.startAttestation(
6345
+ JSON.stringify(formatAttestParams)
6346
+ );
6347
+ return resolve(attestation);
6348
+ } catch (error) {
6349
+ return reject(error);
6350
+ }
6351
+ });
6352
+ }
6353
+ async attestCommon(attestParams) {
6354
+ const { templateId, address, signFn, conditions, additionParams, backUrl } = attestParams;
6355
+ return new Promise(async (resolve, reject) => {
6356
+ console.log("this.zkTlsSdk", this.zkTlsSdk);
6357
+ const attRequest = this.zkTlsSdk.generateRequestParams(
6358
+ templateId,
6359
+ address
6360
+ );
6361
+ if (backUrl) {
6362
+ attRequest.setBackUrl(backUrl);
6363
+ }
6364
+ console.log(`attRequest: ${JSON.stringify(attRequest)}`);
6365
+ if (conditions) {
6366
+ attRequest.setAttConditions(conditions);
6367
+ }
6368
+ if (additionParams) {
6369
+ console.log("setAdditionParams--", additionParams);
6370
+ attRequest.setAdditionParams(additionParams);
6371
+ }
6372
+ const signParams = attRequest.toJsonString();
6373
+ const signature = await signFn(signParams);
6374
+ if (!signature) {
6375
+ return reject(`appSignature is empty!`);
6376
+ }
6377
+ try {
6378
+ const formatAttestParams = {
6379
+ attRequest: {
6380
+ ...JSON.parse(signParams)
6381
+ },
6382
+ appSignature: signature
6383
+ };
6384
+ const attestation = await this.zkTlsSdk.startAttestation(
6385
+ JSON.stringify(formatAttestParams)
6386
+ );
6387
+ return resolve(attestation);
6388
+ } catch (error) {
6389
+ return reject(error);
6390
+ }
6391
+ });
6392
+ }
6393
+ };
6394
+
6395
+ // src/index.ts
6396
+ console.log("SUPPORTEDCHAINIDS444", SUPPORTEDCHAINIDS);
6397
+ var PrimusFund = class {
6398
+ supportedChainIds = SUPPORTEDCHAINIDS;
6399
+ supportedSocialPlatforms = SUPPORTEDSOCIALPLATFORMS;
6400
+ provider;
6401
+ _fund;
6402
+ _fundForRedPacket;
6403
+ _fundOnSolanaForRedPacket;
6404
+ // TODO
6405
+ _zkTlsSdk;
6406
+ static utils = {
6407
+ decodeReSendEvent,
6408
+ decodeClaimEvent
6409
+ };
6410
+ async init(provider, chainId, appId) {
6411
+ return new Promise(async (resolve, reject) => {
6412
+ try {
6413
+ if (!this.supportedChainIds.includes(chainId) && !SUPPORTEDSOLANACHAINIDS.includes(chainId)) {
6414
+ return reject("chainId is not supported");
6415
+ }
6416
+ if (this.supportedChainIds.includes(chainId)) {
6417
+ let formatProvider;
6418
+ let signer;
6419
+ if (provider instanceof ethers5.providers.JsonRpcProvider) {
6420
+ formatProvider = provider;
6421
+ } else {
6422
+ formatProvider = new ethers5.providers.Web3Provider(provider);
6423
+ signer = formatProvider.getSigner();
6424
+ }
6425
+ await formatProvider.ready;
6426
+ const network = await formatProvider.getNetwork();
6427
+ const providerChainId = network.chainId;
6428
+ console.log("init provider", provider, network);
6429
+ console.log("init providerChainId", providerChainId, chainId);
6430
+ if (providerChainId !== chainId) {
6431
+ return reject(`Please connect to the chain with ID ${chainId} first.`);
6432
+ }
6433
+ this.provider = signer ?? formatProvider;
6434
+ this._fund = new Fund();
6435
+ await this._fund.init(this.provider, chainId);
6436
+ this._fundForRedPacket = new FundForRedPacket();
6437
+ await this._fundForRedPacket.init(this.provider, chainId);
6438
+ } else if (SUPPORTEDSOLANACHAINIDS.includes(chainId)) {
6439
+ this.provider = provider;
6440
+ this._fundOnSolanaForRedPacket = new FundOnSolanaForRedPacket();
6441
+ this._fundOnSolanaForRedPacket.init(provider, chainId);
6442
+ }
6443
+ if (appId) {
6444
+ this._zkTlsSdk = new ZktlsSdk();
6445
+ await this._zkTlsSdk.init(appId);
6446
+ }
6447
+ return resolve(true);
6448
+ } catch (error) {
6449
+ return reject(error);
6450
+ }
6451
+ });
6452
+ }
6453
+ async fund(fundParam) {
6454
+ return new Promise(async (resolve, reject) => {
6455
+ try {
6456
+ const { tokenInfo, recipientInfos } = fundParam;
6457
+ if (!recipientInfos || recipientInfos.length === 0) {
6458
+ return reject("recipientInfos is empty");
6459
+ }
6460
+ const hasUnsupportedSocialPlatforms = recipientInfos.some((i) => !this.supportedSocialPlatforms.includes(i.socialPlatform.toLowerCase()));
6461
+ if (hasUnsupportedSocialPlatforms) {
6462
+ return reject("socialPlatform is not supported");
6463
+ }
6464
+ if (tokenInfo.tokenType === 1) {
6465
+ tokenInfo.tokenAddress = ethers5.constants.AddressZero;
6466
+ }
6467
+ const newFundRecipientInfos = recipientInfos.map((i) => {
6468
+ const formatSocialPlatform = i.socialPlatform.toLowerCase();
6469
+ let formatUserIdentifier = i.userIdentifier;
6470
+ if (i.socialPlatform === "x" && i.userIdentifier.startsWith("@")) {
6471
+ formatUserIdentifier = i.userIdentifier.slice(1);
6472
+ }
6473
+ return {
6474
+ nftIds: i.nftIds ?? [],
6475
+ socialPlatform: formatSocialPlatform,
6476
+ userIdentifier: formatUserIdentifier,
6477
+ tokenAmount: i.tokenAmount
6478
+ };
6479
+ });
6480
+ if (recipientInfos.length === 1) {
6481
+ const result = await this._fund?.fund(tokenInfo, newFundRecipientInfos[0]);
6482
+ return resolve(result);
6483
+ } else if (recipientInfos.length > 1) {
6484
+ const result = await this._fund?.fundBatch(tokenInfo, newFundRecipientInfos);
6485
+ return resolve(result);
6486
+ }
6487
+ } catch (error) {
6488
+ return reject(error);
6489
+ }
6490
+ });
6491
+ }
6492
+ async approve(fundParam) {
6493
+ return new Promise(async (resolve, reject) => {
6494
+ try {
6495
+ const { tokenInfo, recipientInfos } = fundParam;
6496
+ if (!recipientInfos || recipientInfos.length === 0) {
6497
+ return reject("recipientInfos is empty");
6498
+ }
6499
+ const hasUnsupportedSocialPlatforms = recipientInfos.some((i) => !this.supportedSocialPlatforms.includes(i.socialPlatform.toLowerCase()));
6500
+ if (hasUnsupportedSocialPlatforms) {
6501
+ return reject("socialPlatform is not supported");
6502
+ }
6503
+ if (tokenInfo.tokenType === 1) {
6504
+ tokenInfo.tokenAddress = ethers5.constants.AddressZero;
6505
+ }
6506
+ const newFundRecipientInfos = recipientInfos.map((i) => {
6507
+ const formatSocialPlatform = i.socialPlatform.toLowerCase();
6508
+ let formatUserIdentifier = i.userIdentifier;
6509
+ if (i.socialPlatform === "x" && i.userIdentifier.startsWith("@")) {
6510
+ formatUserIdentifier = i.userIdentifier.slice(1);
6511
+ }
6512
+ return {
6513
+ nftIds: i.nftIds ?? [],
6514
+ socialPlatform: formatSocialPlatform,
6515
+ userIdentifier: formatUserIdentifier,
6516
+ tokenAmount: i.tokenAmount
6517
+ };
6518
+ });
2953
6519
  const result = await this._fund?.approve(tokenInfo, newFundRecipientInfos);
2954
6520
  return resolve(result);
2955
6521
  } catch (error) {
@@ -3188,10 +6754,15 @@ var PrimusFund = class {
3188
6754
  }
3189
6755
  });
3190
6756
  }
3191
- async getRedPacketInfo(redPacketId) {
6757
+ async getRedPacketInfo(redPacketId, chainId) {
3192
6758
  return new Promise(async (resolve, reject) => {
3193
6759
  try {
3194
- const result = await this._fundForRedPacket?.getRedPacketInfo(redPacketId);
6760
+ let result;
6761
+ if (chainId && typeof chainId === "string") {
6762
+ result = await this._fundOnSolanaForRedPacket?.getRedPacketInfo(redPacketId);
6763
+ } else {
6764
+ result = await this._fundForRedPacket?.getRedPacketInfo(redPacketId);
6765
+ }
3195
6766
  return resolve(result);
3196
6767
  } catch (error) {
3197
6768
  return reject(error);
@@ -3229,6 +6800,52 @@ var PrimusFund = class {
3229
6800
  }
3230
6801
  });
3231
6802
  }
6803
+ async fundonSolanaForRedPacket(fundParam) {
6804
+ return new Promise(async (resolve, reject) => {
6805
+ try {
6806
+ const { tokenInfo, sendParam } = fundParam;
6807
+ const result = await this._fundOnSolanaForRedPacket?.fund(tokenInfo, sendParam);
6808
+ return resolve(result);
6809
+ } catch (error) {
6810
+ return reject(error);
6811
+ }
6812
+ });
6813
+ }
6814
+ async claimOnSolanaForRedPacket(redPacketId, attestation) {
6815
+ return new Promise(async (resolve, reject) => {
6816
+ try {
6817
+ let formatAttestation2 = { ...attestation, responseResolve: attestation.reponseResolve };
6818
+ delete formatAttestation2.reponseResolve;
6819
+ const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2);
6820
+ return resolve(result);
6821
+ } catch (error) {
6822
+ return reject(error);
6823
+ }
6824
+ });
6825
+ }
6826
+ async withdrawOnSolanaForRedPacket(redPacketId) {
6827
+ return new Promise(async (resolve, reject) => {
6828
+ try {
6829
+ const result = await this._fundOnSolanaForRedPacket?.withdraw(redPacketId);
6830
+ return resolve(result);
6831
+ } catch (error) {
6832
+ return reject(error);
6833
+ }
6834
+ });
6835
+ }
6836
+ // async testReSend(params: any) {
6837
+ // const p = getProgram(redPacketIdl, params.provider)
6838
+ // await testReSend({ redEnvelopeProgram: p, ...params })
6839
+ // }
6840
+ // async testReClaim(params: any) {
6841
+ // const resPacketP = getProgram(redPacketIdl, params.provider)
6842
+ // const zktlsP = getProgram(zktlsIdl, params.provider)
6843
+ // await testReClaim({ redEnvelopeProgram: resPacketP, zktlsProgram: zktlsP, ...params })
6844
+ // }
6845
+ // async testReSenderWithdraw(params: any) {
6846
+ // const resPacketP = getProgram(redPacketIdl, params.provider)
6847
+ // await testReSenderWithdraw({ redEnvelopeProgram: resPacketP, ...params })
6848
+ // }
3232
6849
  };
3233
6850
  export {
3234
6851
  PrimusFund