@primuslabs/fund-js-sdk 0.1.29 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +80 -16
- package/dist/index.mjs +81 -17
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -59,6 +59,18 @@ var DATASOURCETEMPLATESMAP = {
|
|
|
59
59
|
};
|
|
60
60
|
var SUPPORTEDSOCIALPLATFORMS = Object.keys(DATASOURCETEMPLATESMAP);
|
|
61
61
|
var SUPPORTEDCHAINIDSMAP = {
|
|
62
|
+
143: {
|
|
63
|
+
chainId: 143,
|
|
64
|
+
chainName: "Monad Chain",
|
|
65
|
+
nativeCurrency: {
|
|
66
|
+
name: "MON",
|
|
67
|
+
symbol: "MON",
|
|
68
|
+
decimals: 18
|
|
69
|
+
},
|
|
70
|
+
contractAddress: "0xa2e0700a269Be3158c81E4739518b324d4398588",
|
|
71
|
+
redPacketContractAddress: "0x50bd377EB8D4236Bb587AB3FB1eeafd888AEeC58"
|
|
72
|
+
},
|
|
73
|
+
// monad mainnet
|
|
62
74
|
10143: {
|
|
63
75
|
chainId: 10143,
|
|
64
76
|
chainName: "Monad testnet",
|
|
@@ -176,6 +188,10 @@ var getErrArrFn = (error) => {
|
|
|
176
188
|
return curErrorStrArr;
|
|
177
189
|
};
|
|
178
190
|
var formatErrFn = (error) => {
|
|
191
|
+
try {
|
|
192
|
+
console.log("error:", JSON.stringify(error));
|
|
193
|
+
} catch {
|
|
194
|
+
}
|
|
179
195
|
let formatError = error;
|
|
180
196
|
const curErrorStrArr = getErrArrFn(error);
|
|
181
197
|
const userRejectErrStrArr = ["user rejected", "approval denied"];
|
|
@@ -2986,11 +3002,52 @@ var getTxIsOnProcess = (err) => {
|
|
|
2986
3002
|
const isOnProcess = hasErrorFlagFn(curErrorStrArr, strArr);
|
|
2987
3003
|
return isOnProcess;
|
|
2988
3004
|
};
|
|
2989
|
-
async function
|
|
3005
|
+
async function getSolanaBalance(connection, userPK) {
|
|
2990
3006
|
const balanceLamports = await connection.getBalance(userPK);
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
3007
|
+
return balanceLamports;
|
|
3008
|
+
}
|
|
3009
|
+
async function isInsufficentSolanaBalance(connection, userPK, requireBalance) {
|
|
3010
|
+
const balanceLamports = await getSolanaBalance(connection, userPK);
|
|
3011
|
+
console.log("use balance:", balanceLamports);
|
|
3012
|
+
const BIBalance = BigInt(balanceLamports);
|
|
3013
|
+
const BIRequire = BigInt(requireBalance);
|
|
3014
|
+
return BIBalance < BIRequire;
|
|
3015
|
+
}
|
|
3016
|
+
var SOL_TO_LAMPORTS = 1e9;
|
|
3017
|
+
function solToLamports(sol) {
|
|
3018
|
+
return sol * SOL_TO_LAMPORTS;
|
|
3019
|
+
}
|
|
3020
|
+
function getPrimusFee() {
|
|
3021
|
+
return solToLamports(25e-4);
|
|
3022
|
+
}
|
|
3023
|
+
function getFee() {
|
|
3024
|
+
return solToLamports(1e-3);
|
|
3025
|
+
}
|
|
3026
|
+
async function checkIfATAExists(connection, ata, tokenProgram) {
|
|
3027
|
+
try {
|
|
3028
|
+
const accountInfo = await (0, import_spl_token.getAccount)(connection, ata, void 0, tokenProgram);
|
|
3029
|
+
console.log("ATA exists, balance:", Number(accountInfo.amount) / 10 ** 9);
|
|
3030
|
+
return true;
|
|
3031
|
+
} catch (e) {
|
|
3032
|
+
if (e.message.includes("TokenAccountNotFoundError")) {
|
|
3033
|
+
console.log("ATA not found");
|
|
3034
|
+
return false;
|
|
3035
|
+
} else {
|
|
3036
|
+
console.error("Unexpected error:", e);
|
|
3037
|
+
return false;
|
|
3038
|
+
}
|
|
3039
|
+
}
|
|
3040
|
+
}
|
|
3041
|
+
async function getRentExemption(connection, ata, tokenProgram) {
|
|
3042
|
+
const isExist = await checkIfATAExists(connection, ata, tokenProgram);
|
|
3043
|
+
if (!isExist) {
|
|
3044
|
+
const TOKEN_ACCOUNT_SIZE = 165;
|
|
3045
|
+
const rentExemption = await connection.getMinimumBalanceForRentExemption(TOKEN_ACCOUNT_SIZE);
|
|
3046
|
+
console.log(`Estimated rentExemption:: ${rentExemption} lamports (${rentExemption.toFixed(6)} SOL)`);
|
|
3047
|
+
return rentExemption;
|
|
3048
|
+
} else {
|
|
3049
|
+
return 0;
|
|
3050
|
+
}
|
|
2994
3051
|
}
|
|
2995
3052
|
|
|
2996
3053
|
// src/config/redPacketIdl.json
|
|
@@ -5857,7 +5914,8 @@ async function reClaim({
|
|
|
5857
5914
|
provider,
|
|
5858
5915
|
zktlsProgram,
|
|
5859
5916
|
reId,
|
|
5860
|
-
attObj
|
|
5917
|
+
attObj,
|
|
5918
|
+
walletName
|
|
5861
5919
|
}) {
|
|
5862
5920
|
return new Promise(async (resolve, reject) => {
|
|
5863
5921
|
const [redEnvelopePda] = getPrimusRedEnvelopePda({ programId: redEnvelopeProgram.programId });
|
|
@@ -5866,13 +5924,6 @@ async function reClaim({
|
|
|
5866
5924
|
console.log("primusZktlsPda:", primusZktlsPda.toBase58());
|
|
5867
5925
|
console.log("reRecordPda:", reRecordPda.toBase58());
|
|
5868
5926
|
const attRecipient = new import_web33.PublicKey(attObj.recipient);
|
|
5869
|
-
const isEmptyWallet = await isSolanaBalanceZero(provider.connection, attRecipient);
|
|
5870
|
-
if (isEmptyWallet) {
|
|
5871
|
-
const err = "insufficient";
|
|
5872
|
-
const formatErr = formatErrFn(err);
|
|
5873
|
-
reject(formatErr);
|
|
5874
|
-
return;
|
|
5875
|
-
}
|
|
5876
5927
|
const redEnvelopeState = await redEnvelopeProgram.account.redEnvelopeState.fetch(redEnvelopePda);
|
|
5877
5928
|
console.log("redEnvelopeState.feeRecipient", redEnvelopeState.feeRecipient.toBase58());
|
|
5878
5929
|
const feeRecipient = redEnvelopeState.feeRecipient;
|
|
@@ -5949,6 +6000,18 @@ async function reClaim({
|
|
|
5949
6000
|
tx = new import_web33.Transaction().add(instruction);
|
|
5950
6001
|
tx.feePayer = userKey;
|
|
5951
6002
|
tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
|
|
6003
|
+
if (walletName?.toLowerCase() == "phantom") {
|
|
6004
|
+
let totalCost = reRecord.tokenType == ERC20_TYPE ? await getRentExemption(provider.connection, toTokenAccount, tokenProgram) : 0;
|
|
6005
|
+
totalCost += getPrimusFee();
|
|
6006
|
+
totalCost += getFee();
|
|
6007
|
+
const isInsufficent = await isInsufficentSolanaBalance(provider.connection, attRecipient, totalCost);
|
|
6008
|
+
if (isInsufficent) {
|
|
6009
|
+
const err = "insufficient";
|
|
6010
|
+
const formatErr = formatErrFn(err);
|
|
6011
|
+
reject(formatErr);
|
|
6012
|
+
return;
|
|
6013
|
+
}
|
|
6014
|
+
}
|
|
5952
6015
|
signatureStr = await provider.sendAndConfirm(tx);
|
|
5953
6016
|
return resolve(signatureStr);
|
|
5954
6017
|
console.log("UnSigned tx size:", tx.serialize({ requireAllSignatures: false, verifySignatures: false }).length, "bytes");
|
|
@@ -6116,7 +6179,7 @@ var FundOnSolanaForRedPacket = class {
|
|
|
6116
6179
|
}
|
|
6117
6180
|
});
|
|
6118
6181
|
}
|
|
6119
|
-
async claim(redPacketId, attestation) {
|
|
6182
|
+
async claim(redPacketId, attestation, walletName) {
|
|
6120
6183
|
return new Promise(async (resolve, reject) => {
|
|
6121
6184
|
try {
|
|
6122
6185
|
const zktlsProgram = getProgram(zktlsIdl_default, this.provider);
|
|
@@ -6128,7 +6191,8 @@ var FundOnSolanaForRedPacket = class {
|
|
|
6128
6191
|
provider: this.provider,
|
|
6129
6192
|
zktlsProgram,
|
|
6130
6193
|
reId: formatReId,
|
|
6131
|
-
attObj
|
|
6194
|
+
attObj,
|
|
6195
|
+
walletName
|
|
6132
6196
|
});
|
|
6133
6197
|
return resolve(result);
|
|
6134
6198
|
} catch (error) {
|
|
@@ -6715,12 +6779,12 @@ var PrimusFund = class {
|
|
|
6715
6779
|
}
|
|
6716
6780
|
});
|
|
6717
6781
|
}
|
|
6718
|
-
async claimOnSolanaForRedPacket(redPacketId, attestation) {
|
|
6782
|
+
async claimOnSolanaForRedPacket(redPacketId, attestation, walletName) {
|
|
6719
6783
|
return new Promise(async (resolve, reject) => {
|
|
6720
6784
|
try {
|
|
6721
6785
|
let formatAttestation2 = { ...attestation, responseResolve: attestation.reponseResolve };
|
|
6722
6786
|
delete formatAttestation2.reponseResolve;
|
|
6723
|
-
const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2);
|
|
6787
|
+
const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2, walletName);
|
|
6724
6788
|
return resolve(result);
|
|
6725
6789
|
} catch (error) {
|
|
6726
6790
|
return reject(error);
|
package/dist/index.mjs
CHANGED
|
@@ -25,6 +25,18 @@ var DATASOURCETEMPLATESMAP = {
|
|
|
25
25
|
};
|
|
26
26
|
var SUPPORTEDSOCIALPLATFORMS = Object.keys(DATASOURCETEMPLATESMAP);
|
|
27
27
|
var SUPPORTEDCHAINIDSMAP = {
|
|
28
|
+
143: {
|
|
29
|
+
chainId: 143,
|
|
30
|
+
chainName: "Monad Chain",
|
|
31
|
+
nativeCurrency: {
|
|
32
|
+
name: "MON",
|
|
33
|
+
symbol: "MON",
|
|
34
|
+
decimals: 18
|
|
35
|
+
},
|
|
36
|
+
contractAddress: "0xa2e0700a269Be3158c81E4739518b324d4398588",
|
|
37
|
+
redPacketContractAddress: "0x50bd377EB8D4236Bb587AB3FB1eeafd888AEeC58"
|
|
38
|
+
},
|
|
39
|
+
// monad mainnet
|
|
28
40
|
10143: {
|
|
29
41
|
chainId: 10143,
|
|
30
42
|
chainName: "Monad testnet",
|
|
@@ -142,6 +154,10 @@ var getErrArrFn = (error) => {
|
|
|
142
154
|
return curErrorStrArr;
|
|
143
155
|
};
|
|
144
156
|
var formatErrFn = (error) => {
|
|
157
|
+
try {
|
|
158
|
+
console.log("error:", JSON.stringify(error));
|
|
159
|
+
} catch {
|
|
160
|
+
}
|
|
145
161
|
let formatError = error;
|
|
146
162
|
const curErrorStrArr = getErrArrFn(error);
|
|
147
163
|
const userRejectErrStrArr = ["user rejected", "approval denied"];
|
|
@@ -2738,7 +2754,7 @@ import * as anchor3 from "@coral-xyz/anchor";
|
|
|
2738
2754
|
import { Program } from "@coral-xyz/anchor";
|
|
2739
2755
|
import * as anchor from "@coral-xyz/anchor";
|
|
2740
2756
|
import { PublicKey } from "@solana/web3.js";
|
|
2741
|
-
import { getMint, TOKEN_2022_PROGRAM_ID } from "@solana/spl-token";
|
|
2757
|
+
import { getMint, TOKEN_2022_PROGRAM_ID, getAccount } from "@solana/spl-token";
|
|
2742
2758
|
import { encode as encodeBase58 } from "micro-base58";
|
|
2743
2759
|
import * as borsh from "borsh";
|
|
2744
2760
|
var { deserialize } = borsh;
|
|
@@ -2952,11 +2968,52 @@ var getTxIsOnProcess = (err) => {
|
|
|
2952
2968
|
const isOnProcess = hasErrorFlagFn(curErrorStrArr, strArr);
|
|
2953
2969
|
return isOnProcess;
|
|
2954
2970
|
};
|
|
2955
|
-
async function
|
|
2971
|
+
async function getSolanaBalance(connection, userPK) {
|
|
2956
2972
|
const balanceLamports = await connection.getBalance(userPK);
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2973
|
+
return balanceLamports;
|
|
2974
|
+
}
|
|
2975
|
+
async function isInsufficentSolanaBalance(connection, userPK, requireBalance) {
|
|
2976
|
+
const balanceLamports = await getSolanaBalance(connection, userPK);
|
|
2977
|
+
console.log("use balance:", balanceLamports);
|
|
2978
|
+
const BIBalance = BigInt(balanceLamports);
|
|
2979
|
+
const BIRequire = BigInt(requireBalance);
|
|
2980
|
+
return BIBalance < BIRequire;
|
|
2981
|
+
}
|
|
2982
|
+
var SOL_TO_LAMPORTS = 1e9;
|
|
2983
|
+
function solToLamports(sol) {
|
|
2984
|
+
return sol * SOL_TO_LAMPORTS;
|
|
2985
|
+
}
|
|
2986
|
+
function getPrimusFee() {
|
|
2987
|
+
return solToLamports(25e-4);
|
|
2988
|
+
}
|
|
2989
|
+
function getFee() {
|
|
2990
|
+
return solToLamports(1e-3);
|
|
2991
|
+
}
|
|
2992
|
+
async function checkIfATAExists(connection, ata, tokenProgram) {
|
|
2993
|
+
try {
|
|
2994
|
+
const accountInfo = await getAccount(connection, ata, void 0, tokenProgram);
|
|
2995
|
+
console.log("ATA exists, balance:", Number(accountInfo.amount) / 10 ** 9);
|
|
2996
|
+
return true;
|
|
2997
|
+
} catch (e) {
|
|
2998
|
+
if (e.message.includes("TokenAccountNotFoundError")) {
|
|
2999
|
+
console.log("ATA not found");
|
|
3000
|
+
return false;
|
|
3001
|
+
} else {
|
|
3002
|
+
console.error("Unexpected error:", e);
|
|
3003
|
+
return false;
|
|
3004
|
+
}
|
|
3005
|
+
}
|
|
3006
|
+
}
|
|
3007
|
+
async function getRentExemption(connection, ata, tokenProgram) {
|
|
3008
|
+
const isExist = await checkIfATAExists(connection, ata, tokenProgram);
|
|
3009
|
+
if (!isExist) {
|
|
3010
|
+
const TOKEN_ACCOUNT_SIZE = 165;
|
|
3011
|
+
const rentExemption = await connection.getMinimumBalanceForRentExemption(TOKEN_ACCOUNT_SIZE);
|
|
3012
|
+
console.log(`Estimated rentExemption:: ${rentExemption} lamports (${rentExemption.toFixed(6)} SOL)`);
|
|
3013
|
+
return rentExemption;
|
|
3014
|
+
} else {
|
|
3015
|
+
return 0;
|
|
3016
|
+
}
|
|
2960
3017
|
}
|
|
2961
3018
|
|
|
2962
3019
|
// src/config/redPacketIdl.json
|
|
@@ -5830,7 +5887,8 @@ async function reClaim({
|
|
|
5830
5887
|
provider,
|
|
5831
5888
|
zktlsProgram,
|
|
5832
5889
|
reId,
|
|
5833
|
-
attObj
|
|
5890
|
+
attObj,
|
|
5891
|
+
walletName
|
|
5834
5892
|
}) {
|
|
5835
5893
|
return new Promise(async (resolve, reject) => {
|
|
5836
5894
|
const [redEnvelopePda] = getPrimusRedEnvelopePda({ programId: redEnvelopeProgram.programId });
|
|
@@ -5839,13 +5897,6 @@ async function reClaim({
|
|
|
5839
5897
|
console.log("primusZktlsPda:", primusZktlsPda.toBase58());
|
|
5840
5898
|
console.log("reRecordPda:", reRecordPda.toBase58());
|
|
5841
5899
|
const attRecipient = new PublicKey3(attObj.recipient);
|
|
5842
|
-
const isEmptyWallet = await isSolanaBalanceZero(provider.connection, attRecipient);
|
|
5843
|
-
if (isEmptyWallet) {
|
|
5844
|
-
const err = "insufficient";
|
|
5845
|
-
const formatErr = formatErrFn(err);
|
|
5846
|
-
reject(formatErr);
|
|
5847
|
-
return;
|
|
5848
|
-
}
|
|
5849
5900
|
const redEnvelopeState = await redEnvelopeProgram.account.redEnvelopeState.fetch(redEnvelopePda);
|
|
5850
5901
|
console.log("redEnvelopeState.feeRecipient", redEnvelopeState.feeRecipient.toBase58());
|
|
5851
5902
|
const feeRecipient = redEnvelopeState.feeRecipient;
|
|
@@ -5922,6 +5973,18 @@ async function reClaim({
|
|
|
5922
5973
|
tx = new Transaction().add(instruction);
|
|
5923
5974
|
tx.feePayer = userKey;
|
|
5924
5975
|
tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
|
|
5976
|
+
if (walletName?.toLowerCase() == "phantom") {
|
|
5977
|
+
let totalCost = reRecord.tokenType == ERC20_TYPE ? await getRentExemption(provider.connection, toTokenAccount, tokenProgram) : 0;
|
|
5978
|
+
totalCost += getPrimusFee();
|
|
5979
|
+
totalCost += getFee();
|
|
5980
|
+
const isInsufficent = await isInsufficentSolanaBalance(provider.connection, attRecipient, totalCost);
|
|
5981
|
+
if (isInsufficent) {
|
|
5982
|
+
const err = "insufficient";
|
|
5983
|
+
const formatErr = formatErrFn(err);
|
|
5984
|
+
reject(formatErr);
|
|
5985
|
+
return;
|
|
5986
|
+
}
|
|
5987
|
+
}
|
|
5925
5988
|
signatureStr = await provider.sendAndConfirm(tx);
|
|
5926
5989
|
return resolve(signatureStr);
|
|
5927
5990
|
console.log("UnSigned tx size:", tx.serialize({ requireAllSignatures: false, verifySignatures: false }).length, "bytes");
|
|
@@ -6089,7 +6152,7 @@ var FundOnSolanaForRedPacket = class {
|
|
|
6089
6152
|
}
|
|
6090
6153
|
});
|
|
6091
6154
|
}
|
|
6092
|
-
async claim(redPacketId, attestation) {
|
|
6155
|
+
async claim(redPacketId, attestation, walletName) {
|
|
6093
6156
|
return new Promise(async (resolve, reject) => {
|
|
6094
6157
|
try {
|
|
6095
6158
|
const zktlsProgram = getProgram(zktlsIdl_default, this.provider);
|
|
@@ -6101,7 +6164,8 @@ var FundOnSolanaForRedPacket = class {
|
|
|
6101
6164
|
provider: this.provider,
|
|
6102
6165
|
zktlsProgram,
|
|
6103
6166
|
reId: formatReId,
|
|
6104
|
-
attObj
|
|
6167
|
+
attObj,
|
|
6168
|
+
walletName
|
|
6105
6169
|
});
|
|
6106
6170
|
return resolve(result);
|
|
6107
6171
|
} catch (error) {
|
|
@@ -6688,12 +6752,12 @@ var PrimusFund = class {
|
|
|
6688
6752
|
}
|
|
6689
6753
|
});
|
|
6690
6754
|
}
|
|
6691
|
-
async claimOnSolanaForRedPacket(redPacketId, attestation) {
|
|
6755
|
+
async claimOnSolanaForRedPacket(redPacketId, attestation, walletName) {
|
|
6692
6756
|
return new Promise(async (resolve, reject) => {
|
|
6693
6757
|
try {
|
|
6694
6758
|
let formatAttestation2 = { ...attestation, responseResolve: attestation.reponseResolve };
|
|
6695
6759
|
delete formatAttestation2.reponseResolve;
|
|
6696
|
-
const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2);
|
|
6760
|
+
const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2, walletName);
|
|
6697
6761
|
return resolve(result);
|
|
6698
6762
|
} catch (error) {
|
|
6699
6763
|
return reject(error);
|