@lightprotocol/compressed-token 0.7.0 → 0.9.0
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/cjs/browser/index.cjs +35 -13
- package/dist/cjs/browser/index.cjs.map +1 -1
- package/dist/cjs/node/index.cjs +35 -13
- package/dist/cjs/node/index.cjs.map +1 -1
- package/dist/es/browser/index.js +36 -14
- package/dist/es/browser/index.js.map +1 -1
- package/dist/types/index.d.ts +4 -3
- package/package.json +2 -2
package/dist/cjs/node/index.cjs
CHANGED
|
@@ -4834,15 +4834,34 @@ class CompressedTokenProgram {
|
|
|
4834
4834
|
*/
|
|
4835
4835
|
static async compress(params) {
|
|
4836
4836
|
const { payer, owner, source, toAddress, mint, outputStateTree } = params;
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
}
|
|
4845
|
-
|
|
4837
|
+
if (Array.isArray(params.amount) !== Array.isArray(params.toAddress)) {
|
|
4838
|
+
throw new Error('Both amount and toAddress must be arrays or both must be single values');
|
|
4839
|
+
}
|
|
4840
|
+
let tokenTransferOutputs;
|
|
4841
|
+
if (Array.isArray(params.amount) && Array.isArray(params.toAddress)) {
|
|
4842
|
+
if (params.amount.length !== params.toAddress.length) {
|
|
4843
|
+
throw new Error('Amount and toAddress arrays must have the same length');
|
|
4844
|
+
}
|
|
4845
|
+
tokenTransferOutputs = params.amount.map((amt, index) => {
|
|
4846
|
+
const amount = stateless_js.bn(amt);
|
|
4847
|
+
return {
|
|
4848
|
+
owner: params.toAddress[index],
|
|
4849
|
+
amount,
|
|
4850
|
+
lamports: stateless_js.bn(0),
|
|
4851
|
+
tlv: null,
|
|
4852
|
+
};
|
|
4853
|
+
});
|
|
4854
|
+
}
|
|
4855
|
+
else {
|
|
4856
|
+
tokenTransferOutputs = [
|
|
4857
|
+
{
|
|
4858
|
+
owner: toAddress,
|
|
4859
|
+
amount: stateless_js.bn(params.amount),
|
|
4860
|
+
lamports: stateless_js.bn(0),
|
|
4861
|
+
tlv: null,
|
|
4862
|
+
},
|
|
4863
|
+
];
|
|
4864
|
+
}
|
|
4846
4865
|
const { inputTokenDataWithContext, packedOutputTokenData, remainingAccountMetas, } = packCompressedTokenAccounts({
|
|
4847
4866
|
inputCompressedTokenAccounts: [],
|
|
4848
4867
|
outputStateTrees: outputStateTree,
|
|
@@ -4855,7 +4874,11 @@ class CompressedTokenProgram {
|
|
|
4855
4874
|
delegatedTransfer: null, // TODO: implement
|
|
4856
4875
|
inputTokenDataWithContext,
|
|
4857
4876
|
outputCompressedAccounts: packedOutputTokenData,
|
|
4858
|
-
compressOrDecompressAmount: amount
|
|
4877
|
+
compressOrDecompressAmount: Array.isArray(params.amount)
|
|
4878
|
+
? params.amount
|
|
4879
|
+
.map(amt => new anchor.BN(amt))
|
|
4880
|
+
.reduce((sum, amt) => sum.add(amt), new anchor.BN(0))
|
|
4881
|
+
: new anchor.BN(params.amount),
|
|
4859
4882
|
isCompress: true,
|
|
4860
4883
|
cpiContext: null,
|
|
4861
4884
|
lamportsChangeAccountMerkleTreeIndex: null,
|
|
@@ -4992,7 +5015,6 @@ async function approveAndMintTo(rpc, payer, mint, destination, authority, amount
|
|
|
4992
5015
|
* @return Signature of the confirmed transaction
|
|
4993
5016
|
*/
|
|
4994
5017
|
async function compress(rpc, payer, mint, amount, owner, sourceTokenAccount, toAddress, merkleTree, confirmOptions) {
|
|
4995
|
-
amount = stateless_js.bn(amount);
|
|
4996
5018
|
const compressIx = await CompressedTokenProgram.compress({
|
|
4997
5019
|
payer: payer.publicKey,
|
|
4998
5020
|
owner: owner.publicKey,
|
|
@@ -5038,7 +5060,7 @@ merkleTree, confirmOptions) {
|
|
|
5038
5060
|
const compressedTokenAccounts = await rpc.getCompressedTokenAccountsByOwner(owner.publicKey, {
|
|
5039
5061
|
mint,
|
|
5040
5062
|
});
|
|
5041
|
-
const [inputAccounts] = selectMinCompressedTokenAccountsForTransfer(compressedTokenAccounts, amount);
|
|
5063
|
+
const [inputAccounts] = selectMinCompressedTokenAccountsForTransfer(compressedTokenAccounts.items, amount);
|
|
5042
5064
|
const proof = await rpc.getValidityProof(inputAccounts.map(account => stateless_js.bn(account.compressedAccount.hash)));
|
|
5043
5065
|
const ix = await CompressedTokenProgram.transfer({
|
|
5044
5066
|
payer: payer.publicKey,
|
|
@@ -5110,7 +5132,7 @@ merkleTree, confirmOptions) {
|
|
|
5110
5132
|
mint,
|
|
5111
5133
|
});
|
|
5112
5134
|
/// TODO: consider using a different selection algorithm
|
|
5113
|
-
const [inputAccounts] = selectMinCompressedTokenAccountsForTransfer(compressedTokenAccounts, amount);
|
|
5135
|
+
const [inputAccounts] = selectMinCompressedTokenAccountsForTransfer(compressedTokenAccounts.items, amount);
|
|
5114
5136
|
const proof = await rpc.getValidityProof(inputAccounts.map(account => stateless_js.bn(account.compressedAccount.hash)));
|
|
5115
5137
|
const ix = await CompressedTokenProgram.decompress({
|
|
5116
5138
|
payer: payer.publicKey,
|