Skip to content

Commit 86a3bb9

Browse files
authored
Fix for token entangler royalties (metaplex-foundation#1272)
1 parent 0871d91 commit 86a3bb9

File tree

3 files changed

+40
-37
lines changed

3 files changed

+40
-37
lines changed

js/packages/cli/src/token-entangler-cli.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ programCommand('swap')
281281
const tokenBEscrow = result[2];
282282
const transferAuthority = web3.Keypair.generate();
283283
const paymentTransferAuthority = web3.Keypair.generate();
284-
const tokenMetadata = await getMetadata(tokenMint);
284+
const replacementTokenMetadata = await getMetadata(replacementTokenMint);
285285
const signers = [transferAuthority];
286286

287287
//@ts-ignore
@@ -297,7 +297,7 @@ programCommand('swap')
297297
const remainingAccounts = [];
298298

299299
const metadataObj = await anchorProgram.provider.connection.getAccountInfo(
300-
tokenMetadata,
300+
replacementTokenMetadata,
301301
);
302302
const metadataDecoded: Metadata = decodeMetadata(
303303
Buffer.from(metadataObj.data),
@@ -332,7 +332,7 @@ programCommand('swap')
332332
transferAuthority: transferAuthority.publicKey,
333333
paymentTransferAuthority: paymentTransferAuthority.publicKey,
334334
token,
335-
tokenMetadata,
335+
replacementTokenMetadata,
336336
replacementToken,
337337
replacementTokenMint,
338338
tokenAEscrow,

js/packages/token-entangler/src/utils/entangler.ts

+31-29
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ export const swapEntanglement = async (
335335
const tokenBEscrow = result[2];
336336
const transferAuthority = Keypair.generate();
337337
const paymentTransferAuthority = Keypair.generate();
338-
const tokenMetadata = await getMetadata(tokenMint);
338+
const replacementTokenMetadata = await getMetadata(replacementTokenMint);
339339
const signers = [transferAuthority];
340340

341341
//@ts-ignore
@@ -345,13 +345,13 @@ export const swapEntanglement = async (
345345
const paymentAccount = isNative
346346
? anchorWallet.publicKey
347347
: //@ts-ignore
348-
(await getAtaForMint(epObj.treasuryMint, anchorWallet.publicKey))[0];
348+
(await getAtaForMint(epObj.treasuryMint, anchorWallet.publicKey))[0];
349349

350350
if (!isNative) signers.push(paymentTransferAuthority);
351351
const remainingAccounts = [];
352352

353353
const metadataObj = await anchorProgram.provider.connection.getAccountInfo(
354-
tokenMetadata,
354+
replacementTokenMetadata,
355355
);
356356
const metadataDecoded: Metadata = decodeMetadata(
357357
//@ts-ignore
@@ -394,7 +394,7 @@ export const swapEntanglement = async (
394394
transferAuthority: transferAuthority.publicKey,
395395
paymentTransferAuthority: paymentTransferAuthority.publicKey,
396396
token,
397-
tokenMetadata,
397+
replacementTokenMetadata,
398398
replacementToken,
399399
replacementTokenMint,
400400
tokenAEscrow,
@@ -425,16 +425,16 @@ export const swapEntanglement = async (
425425
),
426426
...(!isNative
427427
? [
428-
Token.createApproveInstruction(
429-
TOKEN_PROGRAM_ID,
430-
paymentAccount,
431-
paymentTransferAuthority.publicKey,
432-
anchorWallet.publicKey,
433-
[],
434-
//@ts-ignore
435-
epObj.price.toNumber(),
436-
),
437-
]
428+
Token.createApproveInstruction(
429+
TOKEN_PROGRAM_ID,
430+
paymentAccount,
431+
paymentTransferAuthority.publicKey,
432+
anchorWallet.publicKey,
433+
[],
434+
//@ts-ignore
435+
epObj.price.toNumber(),
436+
),
437+
]
438438
: []),
439439
instruction,
440440
Token.createRevokeInstruction(
@@ -445,13 +445,13 @@ export const swapEntanglement = async (
445445
),
446446
...(!isNative
447447
? [
448-
Token.createRevokeInstruction(
449-
TOKEN_PROGRAM_ID,
450-
paymentAccount,
451-
anchorWallet.publicKey,
452-
[],
453-
),
454-
]
448+
Token.createRevokeInstruction(
449+
TOKEN_PROGRAM_ID,
450+
paymentAccount,
451+
anchorWallet.publicKey,
452+
[],
453+
),
454+
]
455455
: []),
456456
];
457457
const txnResult = await ContextConnection.sendTransactionWithRetry(
@@ -487,7 +487,6 @@ export const searchEntanglements = async (
487487
const searchMint = new PublicKey(mint);
488488
const searchAuthority = new PublicKey(authority);
489489

490-
491490
const searchMintAAccounts =
492491
await anchorProgram.provider.connection.getProgramAccounts(
493492
TOKEN_ENTANGLEMENT_PROGRAM_ID,
@@ -505,7 +504,7 @@ export const searchEntanglements = async (
505504
offset: 8 + 160,
506505
bytes: searchAuthority.toString(),
507506
},
508-
}
507+
},
509508
],
510509
},
511510
);
@@ -526,7 +525,7 @@ export const searchEntanglements = async (
526525
offset: 8 + 160,
527526
bytes: searchAuthority.toString(),
528527
},
529-
}
528+
},
530529
],
531530
},
532531
);
@@ -535,10 +534,8 @@ export const searchEntanglements = async (
535534
...searchMintAAccounts,
536535
...searchMintBAccounts,
537536
];
538-
const entanglements = entanglementsAccounts.map(
539-
account =>
540-
anchorProgram.account.entangledPair
541-
.fetch(account.pubkey)
537+
const entanglements = entanglementsAccounts.map(account =>
538+
anchorProgram.account.entangledPair.fetch(account.pubkey),
542539
);
543540
// console.log('Found', mint, entanglements.length, 'entanglements');
544541
return Promise.all(entanglements);
@@ -558,7 +555,12 @@ export const getOwnedNFTMints = async (
558555
anchorWallet.publicKey,
559556
{ programId: TOKEN_PROGRAM_ID },
560557
);
561-
const NFTMints = TokenAccounts.value.map(val => val.account.data.parsed).filter(val => val.info.tokenAmount.amount != 0 && val.info.tokenAmount.decimals === 0);
558+
const NFTMints = TokenAccounts.value
559+
.map(val => val.account.data.parsed)
560+
.filter(
561+
val =>
562+
val.info.tokenAmount.amount != 0 && val.info.tokenAmount.decimals === 0,
563+
);
562564

563565
return NFTMints;
564566
};

rust/token-entangler/src/lib.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const PREFIX: &str = "token_entangler";
1919
const ESCROW: &str = "escrow";
2020
const A_NAME: &str = "A";
2121
const B_NAME: &str = "B";
22+
#[program]
2223
pub mod token_entangler {
2324
use super::*;
2425

@@ -153,7 +154,7 @@ pub mod token_entangler {
153154
let payment_account = &ctx.accounts.payment_account;
154155
let payment_transfer_authority = &ctx.accounts.payment_transfer_authority;
155156
let token = &ctx.accounts.token;
156-
let token_metadata = &ctx.accounts.token_metadata;
157+
let replacement_token_metadata = &ctx.accounts.replacement_token_metadata;
157158
let replacement_token = &ctx.accounts.replacement_token;
158159
let replacement_token_mint = &ctx.accounts.replacement_token_mint;
159160
let transfer_authority = &ctx.accounts.transfer_authority;
@@ -201,11 +202,11 @@ pub mod token_entangler {
201202
if token.mint == entangled_pair.mint_a {
202203
swap_from_escrow = token_a_escrow;
203204
swap_to_escrow = token_b_escrow;
204-
assert_metadata_valid(token_metadata, None, &entangled_pair.mint_a)?;
205+
assert_metadata_valid(replacement_token_metadata, None, &entangled_pair.mint_b)?;
205206
} else if token.mint == entangled_pair.mint_b {
206207
swap_from_escrow = token_b_escrow;
207208
swap_to_escrow = token_a_escrow;
208-
assert_metadata_valid(token_metadata, None, &entangled_pair.mint_b)?;
209+
assert_metadata_valid(replacement_token_metadata, None, &entangled_pair.mint_a)?;
209210
} else {
210211
return Err(ErrorCode::InvalidMint.into());
211212
}
@@ -256,7 +257,7 @@ pub mod token_entangler {
256257
if !entangled_pair.paid || entangled_pair.pays_every_time {
257258
pay_creator_fees(
258259
&mut ctx.remaining_accounts.iter(),
259-
&token_metadata,
260+
&replacement_token_metadata,
260261
&payment_account,
261262
&payment_transfer_authority,
262263
&payer,
@@ -323,7 +324,7 @@ pub struct Swap<'info> {
323324
payment_transfer_authority: UncheckedAccount<'info>,
324325
#[account(mut)]
325326
token: Account<'info, TokenAccount>,
326-
token_metadata: UncheckedAccount<'info>,
327+
replacement_token_metadata: UncheckedAccount<'info>,
327328
/// Set to unchecked to avoid stack size limits
328329
replacement_token_mint: UncheckedAccount<'info>,
329330
#[account(mut)]

0 commit comments

Comments
 (0)