@primuslabs/fund-js-sdk 0.1.28 → 0.1.30
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 +72 -19
- package/dist/index.mjs +73 -21
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -176,6 +176,10 @@ var getErrArrFn = (error) => {
|
|
|
176
176
|
return curErrorStrArr;
|
|
177
177
|
};
|
|
178
178
|
var formatErrFn = (error) => {
|
|
179
|
+
try {
|
|
180
|
+
console.log("error:", JSON.stringify(error));
|
|
181
|
+
} catch {
|
|
182
|
+
}
|
|
179
183
|
let formatError = error;
|
|
180
184
|
const curErrorStrArr = getErrArrFn(error);
|
|
181
185
|
const userRejectErrStrArr = ["user rejected", "approval denied"];
|
|
@@ -2986,11 +2990,52 @@ var getTxIsOnProcess = (err) => {
|
|
|
2986
2990
|
const isOnProcess = hasErrorFlagFn(curErrorStrArr, strArr);
|
|
2987
2991
|
return isOnProcess;
|
|
2988
2992
|
};
|
|
2989
|
-
async function
|
|
2993
|
+
async function getSolanaBalance(connection, userPK) {
|
|
2990
2994
|
const balanceLamports = await connection.getBalance(userPK);
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2995
|
+
return balanceLamports;
|
|
2996
|
+
}
|
|
2997
|
+
async function isInsufficentSolanaBalance(connection, userPK, requireBalance) {
|
|
2998
|
+
const balanceLamports = await getSolanaBalance(connection, userPK);
|
|
2999
|
+
console.log("use balance:", balanceLamports);
|
|
3000
|
+
const BIBalance = BigInt(balanceLamports);
|
|
3001
|
+
const BIRequire = BigInt(requireBalance);
|
|
3002
|
+
return BIBalance < BIRequire;
|
|
3003
|
+
}
|
|
3004
|
+
var SOL_TO_LAMPORTS = 1e9;
|
|
3005
|
+
function solToLamports(sol) {
|
|
3006
|
+
return sol * SOL_TO_LAMPORTS;
|
|
3007
|
+
}
|
|
3008
|
+
function getPrimusFee() {
|
|
3009
|
+
return solToLamports(25e-4);
|
|
3010
|
+
}
|
|
3011
|
+
function getFee() {
|
|
3012
|
+
return solToLamports(1e-3);
|
|
3013
|
+
}
|
|
3014
|
+
async function checkIfATAExists(connection, ata, tokenProgram) {
|
|
3015
|
+
try {
|
|
3016
|
+
const accountInfo = await (0, import_spl_token.getAccount)(connection, ata, void 0, tokenProgram);
|
|
3017
|
+
console.log("ATA exists, balance:", Number(accountInfo.amount) / 10 ** 9);
|
|
3018
|
+
return true;
|
|
3019
|
+
} catch (e) {
|
|
3020
|
+
if (e.message.includes("TokenAccountNotFoundError")) {
|
|
3021
|
+
console.log("ATA not found");
|
|
3022
|
+
return false;
|
|
3023
|
+
} else {
|
|
3024
|
+
console.error("Unexpected error:", e);
|
|
3025
|
+
return false;
|
|
3026
|
+
}
|
|
3027
|
+
}
|
|
3028
|
+
}
|
|
3029
|
+
async function getRentExemption(connection, ata, tokenProgram) {
|
|
3030
|
+
const isExist = await checkIfATAExists(connection, ata, tokenProgram);
|
|
3031
|
+
if (!isExist) {
|
|
3032
|
+
const TOKEN_ACCOUNT_SIZE = 165;
|
|
3033
|
+
const rentExemption = await connection.getMinimumBalanceForRentExemption(TOKEN_ACCOUNT_SIZE);
|
|
3034
|
+
console.log(`Estimated rentExemption:: ${rentExemption} lamports (${rentExemption.toFixed(6)} SOL)`);
|
|
3035
|
+
return rentExemption;
|
|
3036
|
+
} else {
|
|
3037
|
+
return 0;
|
|
3038
|
+
}
|
|
2994
3039
|
}
|
|
2995
3040
|
|
|
2996
3041
|
// src/config/redPacketIdl.json
|
|
@@ -5857,7 +5902,8 @@ async function reClaim({
|
|
|
5857
5902
|
provider,
|
|
5858
5903
|
zktlsProgram,
|
|
5859
5904
|
reId,
|
|
5860
|
-
attObj
|
|
5905
|
+
attObj,
|
|
5906
|
+
walletName
|
|
5861
5907
|
}) {
|
|
5862
5908
|
return new Promise(async (resolve, reject) => {
|
|
5863
5909
|
const [redEnvelopePda] = getPrimusRedEnvelopePda({ programId: redEnvelopeProgram.programId });
|
|
@@ -5866,13 +5912,6 @@ async function reClaim({
|
|
|
5866
5912
|
console.log("primusZktlsPda:", primusZktlsPda.toBase58());
|
|
5867
5913
|
console.log("reRecordPda:", reRecordPda.toBase58());
|
|
5868
5914
|
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
5915
|
const redEnvelopeState = await redEnvelopeProgram.account.redEnvelopeState.fetch(redEnvelopePda);
|
|
5877
5916
|
console.log("redEnvelopeState.feeRecipient", redEnvelopeState.feeRecipient.toBase58());
|
|
5878
5917
|
const feeRecipient = redEnvelopeState.feeRecipient;
|
|
@@ -5949,8 +5988,23 @@ async function reClaim({
|
|
|
5949
5988
|
tx = new import_web33.Transaction().add(instruction);
|
|
5950
5989
|
tx.feePayer = userKey;
|
|
5951
5990
|
tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
|
|
5991
|
+
if (walletName?.toLowerCase() == "phantom") {
|
|
5992
|
+
let totalCost = reRecord.tokenType == ERC20_TYPE ? await getRentExemption(provider.connection, toTokenAccount, tokenProgram) : 0;
|
|
5993
|
+
totalCost += getPrimusFee();
|
|
5994
|
+
totalCost += getFee();
|
|
5995
|
+
const isInsufficent = await isInsufficentSolanaBalance(provider.connection, attRecipient, totalCost);
|
|
5996
|
+
if (isInsufficent) {
|
|
5997
|
+
const err = "insufficient";
|
|
5998
|
+
const formatErr = formatErrFn(err);
|
|
5999
|
+
reject(formatErr);
|
|
6000
|
+
return;
|
|
6001
|
+
}
|
|
6002
|
+
}
|
|
6003
|
+
signatureStr = await provider.sendAndConfirm(tx);
|
|
6004
|
+
return resolve(signatureStr);
|
|
5952
6005
|
console.log("UnSigned tx size:", tx.serialize({ requireAllSignatures: false, verifySignatures: false }).length, "bytes");
|
|
5953
6006
|
const signedTx = await provider.wallet.signTransaction(tx);
|
|
6007
|
+
signedTx.partialSign();
|
|
5954
6008
|
signatureStr = getTxSigStrFromTx(signedTx);
|
|
5955
6009
|
const isOnChain = await getTxIsOnChain(signatureStr, provider.connection);
|
|
5956
6010
|
if (isOnChain) {
|
|
@@ -5959,9 +6013,7 @@ async function reClaim({
|
|
|
5959
6013
|
} else {
|
|
5960
6014
|
const serializeSignedTx = signedTx.serialize();
|
|
5961
6015
|
console.log("Signed tx size:", serializeSignedTx.length, "bytes");
|
|
5962
|
-
|
|
5963
|
-
const rpcConnection = new import_web33.Connection(rpc);
|
|
5964
|
-
signatureStr = await rpcConnection.sendRawTransaction(serializeSignedTx);
|
|
6016
|
+
signatureStr = await provider.connection.sendRawTransaction(serializeSignedTx);
|
|
5965
6017
|
console.log("reClaim done ", signatureStr);
|
|
5966
6018
|
return resolve(signatureStr);
|
|
5967
6019
|
}
|
|
@@ -6115,7 +6167,7 @@ var FundOnSolanaForRedPacket = class {
|
|
|
6115
6167
|
}
|
|
6116
6168
|
});
|
|
6117
6169
|
}
|
|
6118
|
-
async claim(redPacketId, attestation) {
|
|
6170
|
+
async claim(redPacketId, attestation, walletName) {
|
|
6119
6171
|
return new Promise(async (resolve, reject) => {
|
|
6120
6172
|
try {
|
|
6121
6173
|
const zktlsProgram = getProgram(zktlsIdl_default, this.provider);
|
|
@@ -6127,7 +6179,8 @@ var FundOnSolanaForRedPacket = class {
|
|
|
6127
6179
|
provider: this.provider,
|
|
6128
6180
|
zktlsProgram,
|
|
6129
6181
|
reId: formatReId,
|
|
6130
|
-
attObj
|
|
6182
|
+
attObj,
|
|
6183
|
+
walletName
|
|
6131
6184
|
});
|
|
6132
6185
|
return resolve(result);
|
|
6133
6186
|
} catch (error) {
|
|
@@ -6714,12 +6767,12 @@ var PrimusFund = class {
|
|
|
6714
6767
|
}
|
|
6715
6768
|
});
|
|
6716
6769
|
}
|
|
6717
|
-
async claimOnSolanaForRedPacket(redPacketId, attestation) {
|
|
6770
|
+
async claimOnSolanaForRedPacket(redPacketId, attestation, walletName) {
|
|
6718
6771
|
return new Promise(async (resolve, reject) => {
|
|
6719
6772
|
try {
|
|
6720
6773
|
let formatAttestation2 = { ...attestation, responseResolve: attestation.reponseResolve };
|
|
6721
6774
|
delete formatAttestation2.reponseResolve;
|
|
6722
|
-
const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2);
|
|
6775
|
+
const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2, walletName);
|
|
6723
6776
|
return resolve(result);
|
|
6724
6777
|
} catch (error) {
|
|
6725
6778
|
return reject(error);
|
package/dist/index.mjs
CHANGED
|
@@ -142,6 +142,10 @@ var getErrArrFn = (error) => {
|
|
|
142
142
|
return curErrorStrArr;
|
|
143
143
|
};
|
|
144
144
|
var formatErrFn = (error) => {
|
|
145
|
+
try {
|
|
146
|
+
console.log("error:", JSON.stringify(error));
|
|
147
|
+
} catch {
|
|
148
|
+
}
|
|
145
149
|
let formatError = error;
|
|
146
150
|
const curErrorStrArr = getErrArrFn(error);
|
|
147
151
|
const userRejectErrStrArr = ["user rejected", "approval denied"];
|
|
@@ -2738,7 +2742,7 @@ import * as anchor3 from "@coral-xyz/anchor";
|
|
|
2738
2742
|
import { Program } from "@coral-xyz/anchor";
|
|
2739
2743
|
import * as anchor from "@coral-xyz/anchor";
|
|
2740
2744
|
import { PublicKey } from "@solana/web3.js";
|
|
2741
|
-
import { getMint, TOKEN_2022_PROGRAM_ID } from "@solana/spl-token";
|
|
2745
|
+
import { getMint, TOKEN_2022_PROGRAM_ID, getAccount } from "@solana/spl-token";
|
|
2742
2746
|
import { encode as encodeBase58 } from "micro-base58";
|
|
2743
2747
|
import * as borsh from "borsh";
|
|
2744
2748
|
var { deserialize } = borsh;
|
|
@@ -2952,11 +2956,52 @@ var getTxIsOnProcess = (err) => {
|
|
|
2952
2956
|
const isOnProcess = hasErrorFlagFn(curErrorStrArr, strArr);
|
|
2953
2957
|
return isOnProcess;
|
|
2954
2958
|
};
|
|
2955
|
-
async function
|
|
2959
|
+
async function getSolanaBalance(connection, userPK) {
|
|
2956
2960
|
const balanceLamports = await connection.getBalance(userPK);
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2961
|
+
return balanceLamports;
|
|
2962
|
+
}
|
|
2963
|
+
async function isInsufficentSolanaBalance(connection, userPK, requireBalance) {
|
|
2964
|
+
const balanceLamports = await getSolanaBalance(connection, userPK);
|
|
2965
|
+
console.log("use balance:", balanceLamports);
|
|
2966
|
+
const BIBalance = BigInt(balanceLamports);
|
|
2967
|
+
const BIRequire = BigInt(requireBalance);
|
|
2968
|
+
return BIBalance < BIRequire;
|
|
2969
|
+
}
|
|
2970
|
+
var SOL_TO_LAMPORTS = 1e9;
|
|
2971
|
+
function solToLamports(sol) {
|
|
2972
|
+
return sol * SOL_TO_LAMPORTS;
|
|
2973
|
+
}
|
|
2974
|
+
function getPrimusFee() {
|
|
2975
|
+
return solToLamports(25e-4);
|
|
2976
|
+
}
|
|
2977
|
+
function getFee() {
|
|
2978
|
+
return solToLamports(1e-3);
|
|
2979
|
+
}
|
|
2980
|
+
async function checkIfATAExists(connection, ata, tokenProgram) {
|
|
2981
|
+
try {
|
|
2982
|
+
const accountInfo = await getAccount(connection, ata, void 0, tokenProgram);
|
|
2983
|
+
console.log("ATA exists, balance:", Number(accountInfo.amount) / 10 ** 9);
|
|
2984
|
+
return true;
|
|
2985
|
+
} catch (e) {
|
|
2986
|
+
if (e.message.includes("TokenAccountNotFoundError")) {
|
|
2987
|
+
console.log("ATA not found");
|
|
2988
|
+
return false;
|
|
2989
|
+
} else {
|
|
2990
|
+
console.error("Unexpected error:", e);
|
|
2991
|
+
return false;
|
|
2992
|
+
}
|
|
2993
|
+
}
|
|
2994
|
+
}
|
|
2995
|
+
async function getRentExemption(connection, ata, tokenProgram) {
|
|
2996
|
+
const isExist = await checkIfATAExists(connection, ata, tokenProgram);
|
|
2997
|
+
if (!isExist) {
|
|
2998
|
+
const TOKEN_ACCOUNT_SIZE = 165;
|
|
2999
|
+
const rentExemption = await connection.getMinimumBalanceForRentExemption(TOKEN_ACCOUNT_SIZE);
|
|
3000
|
+
console.log(`Estimated rentExemption:: ${rentExemption} lamports (${rentExemption.toFixed(6)} SOL)`);
|
|
3001
|
+
return rentExemption;
|
|
3002
|
+
} else {
|
|
3003
|
+
return 0;
|
|
3004
|
+
}
|
|
2960
3005
|
}
|
|
2961
3006
|
|
|
2962
3007
|
// src/config/redPacketIdl.json
|
|
@@ -5531,7 +5576,6 @@ var zktlsIdl_default = {
|
|
|
5531
5576
|
import * as anchor2 from "@coral-xyz/anchor";
|
|
5532
5577
|
import {
|
|
5533
5578
|
PublicKey as PublicKey3,
|
|
5534
|
-
Connection as Connection2,
|
|
5535
5579
|
SystemProgram,
|
|
5536
5580
|
Transaction,
|
|
5537
5581
|
Keypair
|
|
@@ -5831,7 +5875,8 @@ async function reClaim({
|
|
|
5831
5875
|
provider,
|
|
5832
5876
|
zktlsProgram,
|
|
5833
5877
|
reId,
|
|
5834
|
-
attObj
|
|
5878
|
+
attObj,
|
|
5879
|
+
walletName
|
|
5835
5880
|
}) {
|
|
5836
5881
|
return new Promise(async (resolve, reject) => {
|
|
5837
5882
|
const [redEnvelopePda] = getPrimusRedEnvelopePda({ programId: redEnvelopeProgram.programId });
|
|
@@ -5840,13 +5885,6 @@ async function reClaim({
|
|
|
5840
5885
|
console.log("primusZktlsPda:", primusZktlsPda.toBase58());
|
|
5841
5886
|
console.log("reRecordPda:", reRecordPda.toBase58());
|
|
5842
5887
|
const attRecipient = new PublicKey3(attObj.recipient);
|
|
5843
|
-
const isEmptyWallet = await isSolanaBalanceZero(provider.connection, attRecipient);
|
|
5844
|
-
if (isEmptyWallet) {
|
|
5845
|
-
const err = "insufficient";
|
|
5846
|
-
const formatErr = formatErrFn(err);
|
|
5847
|
-
reject(formatErr);
|
|
5848
|
-
return;
|
|
5849
|
-
}
|
|
5850
5888
|
const redEnvelopeState = await redEnvelopeProgram.account.redEnvelopeState.fetch(redEnvelopePda);
|
|
5851
5889
|
console.log("redEnvelopeState.feeRecipient", redEnvelopeState.feeRecipient.toBase58());
|
|
5852
5890
|
const feeRecipient = redEnvelopeState.feeRecipient;
|
|
@@ -5923,8 +5961,23 @@ async function reClaim({
|
|
|
5923
5961
|
tx = new Transaction().add(instruction);
|
|
5924
5962
|
tx.feePayer = userKey;
|
|
5925
5963
|
tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
|
|
5964
|
+
if (walletName?.toLowerCase() == "phantom") {
|
|
5965
|
+
let totalCost = reRecord.tokenType == ERC20_TYPE ? await getRentExemption(provider.connection, toTokenAccount, tokenProgram) : 0;
|
|
5966
|
+
totalCost += getPrimusFee();
|
|
5967
|
+
totalCost += getFee();
|
|
5968
|
+
const isInsufficent = await isInsufficentSolanaBalance(provider.connection, attRecipient, totalCost);
|
|
5969
|
+
if (isInsufficent) {
|
|
5970
|
+
const err = "insufficient";
|
|
5971
|
+
const formatErr = formatErrFn(err);
|
|
5972
|
+
reject(formatErr);
|
|
5973
|
+
return;
|
|
5974
|
+
}
|
|
5975
|
+
}
|
|
5976
|
+
signatureStr = await provider.sendAndConfirm(tx);
|
|
5977
|
+
return resolve(signatureStr);
|
|
5926
5978
|
console.log("UnSigned tx size:", tx.serialize({ requireAllSignatures: false, verifySignatures: false }).length, "bytes");
|
|
5927
5979
|
const signedTx = await provider.wallet.signTransaction(tx);
|
|
5980
|
+
signedTx.partialSign();
|
|
5928
5981
|
signatureStr = getTxSigStrFromTx(signedTx);
|
|
5929
5982
|
const isOnChain = await getTxIsOnChain(signatureStr, provider.connection);
|
|
5930
5983
|
if (isOnChain) {
|
|
@@ -5933,9 +5986,7 @@ async function reClaim({
|
|
|
5933
5986
|
} else {
|
|
5934
5987
|
const serializeSignedTx = signedTx.serialize();
|
|
5935
5988
|
console.log("Signed tx size:", serializeSignedTx.length, "bytes");
|
|
5936
|
-
|
|
5937
|
-
const rpcConnection = new Connection2(rpc);
|
|
5938
|
-
signatureStr = await rpcConnection.sendRawTransaction(serializeSignedTx);
|
|
5989
|
+
signatureStr = await provider.connection.sendRawTransaction(serializeSignedTx);
|
|
5939
5990
|
console.log("reClaim done ", signatureStr);
|
|
5940
5991
|
return resolve(signatureStr);
|
|
5941
5992
|
}
|
|
@@ -6089,7 +6140,7 @@ var FundOnSolanaForRedPacket = class {
|
|
|
6089
6140
|
}
|
|
6090
6141
|
});
|
|
6091
6142
|
}
|
|
6092
|
-
async claim(redPacketId, attestation) {
|
|
6143
|
+
async claim(redPacketId, attestation, walletName) {
|
|
6093
6144
|
return new Promise(async (resolve, reject) => {
|
|
6094
6145
|
try {
|
|
6095
6146
|
const zktlsProgram = getProgram(zktlsIdl_default, this.provider);
|
|
@@ -6101,7 +6152,8 @@ var FundOnSolanaForRedPacket = class {
|
|
|
6101
6152
|
provider: this.provider,
|
|
6102
6153
|
zktlsProgram,
|
|
6103
6154
|
reId: formatReId,
|
|
6104
|
-
attObj
|
|
6155
|
+
attObj,
|
|
6156
|
+
walletName
|
|
6105
6157
|
});
|
|
6106
6158
|
return resolve(result);
|
|
6107
6159
|
} catch (error) {
|
|
@@ -6688,12 +6740,12 @@ var PrimusFund = class {
|
|
|
6688
6740
|
}
|
|
6689
6741
|
});
|
|
6690
6742
|
}
|
|
6691
|
-
async claimOnSolanaForRedPacket(redPacketId, attestation) {
|
|
6743
|
+
async claimOnSolanaForRedPacket(redPacketId, attestation, walletName) {
|
|
6692
6744
|
return new Promise(async (resolve, reject) => {
|
|
6693
6745
|
try {
|
|
6694
6746
|
let formatAttestation2 = { ...attestation, responseResolve: attestation.reponseResolve };
|
|
6695
6747
|
delete formatAttestation2.reponseResolve;
|
|
6696
|
-
const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2);
|
|
6748
|
+
const result = await this._fundOnSolanaForRedPacket?.claim(redPacketId, formatAttestation2, walletName);
|
|
6697
6749
|
return resolve(result);
|
|
6698
6750
|
} catch (error) {
|
|
6699
6751
|
return reject(error);
|