metaplex umi updateAuthority Error: Update Authority given does not match
metaplex umi updateAuthority Error: Update Authority given does not match
Loading saved threads...
Leo Loki · External communityPost link
External question — Solana Stack Exchange
Author: Leo Loki
Original post: https://solana.stackexchange.com/questions/16090
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
BACKEND:
const wallet_pubkey = new PublicKey(wallet_pubkey_string);
const wallet2 = Keypair.fromSecretKey(bs58.decode(wallet2_key));
const amount = 0.5;
const signer_wallet = createNoopSigner(fromWeb3JsPublicKey(wallet_pubkey));
const update_auth = createNoopSigner(fromWeb3JsPublicKey(wallet2_key.publicKey));
const umi = createUmi(rpcUrl);
umi.use(mplTokenMetadata());
umi.use(signerIdentity(signer_wallet))
const umiMintSigner = generateSigner(umi);
const nftData = {
mint: umiMintSigner,
updateAuthority: update_auth, //the problem is in this line
isMutable: true,
name: 'test',
symbol: 'test',
uri: url,
sellerFeeBasisPoints: percentAmount(10,2),
creators: creators,
tokenOwner: fromWeb3JsPublicKey(wallet_pubkey),
};
const transferData = {
destination: fromWeb3JsPublicKey(wallet2.publicKey),
amount: sol(amount),
};
let transaction = await transactionBuilder()
.add(createNft(umi, nftData))
.add(transferSol(umi, transferData))
.setFeePayer(signer_wallet)
.useV0()
.buildWithLatestBlockhash(umi);
const web3jsVersionedTransaction = toWeb3JsTransaction(transaction);
web3jsVersionedTransaction.sign([Keypair.fromSecretKey(umiMintSigner.secretKey), Keypair.fromSecretKey(wallet2.secretKey)]);
const web3jsVersionedTransactionSerialized = web3jsVersionedTransaction.serialize()
const transaction_serialize_string = Buffer.from(web3jsVersionedTransactionSerialized).toString('base64');
FRONTEND:
On the frontend, the transaction is signed by the wallet
wallet_pubkey
.
if (window.solana && window.solana.isPhantom) {
try {
const connection = new Connection(url, "confirmed");
const transaction_array = Buffer.from(transactionBuildValue, 'base64');
const decodedTransaction = VersionedTransaction.deserialize(transaction_array);
const { blockhash } = await connection.getLatestBlockhash();
decodedTransaction.recentBlockhash = blockhash;
const signedTransaction = await window.solana.signTransaction(decodedTransaction);
const signature = await connection.sendRawTransaction(signedTransaction.serialize());
await connection.confirmTransaction(signature, 'processed');
return { success: true, signature };
console.log(signature);
} catch (error) {
console.error(error);
}
}
I get an error when trying to confirm a transaction via wallet.
Error:
Error: Simulation failed. Message: Transaction simulation failed:
Error processing Instruction 2: custom program error: 0x7.
Logs: [
"Program log: Instruction: SetAuthority",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3250 of 692177 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s consumed 117798 of 799706 compute units", "Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s success",
"Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s invoke [1]",
"Program log: IX: Mint",
"Program log: Update Authority given does not match",
"Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s consumed 31390 of 681908 compute units",
"Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s failed: custom program error: 0x7"
].
If I don't use the string
updateAuthority: update_auth
in
nftData
and i don't use
Keypair.fromSecretKey(wallet2.secretKey)
in
web3jsVersionedTransaction.sign
then the problem doesn't occur and the code works correctly.
How to fix the problem and add
updateAuthority
correctly?
Quote
Report
Jimii · External communityPost link
External answer — Solana Stack Exchange
Author: Jimii
Original post: https://solana.stackexchange.com/a/16092
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
Try setting the update auth in a new instruction
async function updateUpdateAuthority() {
const mint = publicKey(""); // update with mint address
await updateV1(umi, {
mint,
authority: umi.identity,
newUpdateAuthority: publicKey(""), // new update auth
primarySaleHappened: true,
isMutable: true,
}).sendAndConfirm(umi);
}
updateUpdateAuthority().then().catch();
Quote
Report
Post Reply
Quoted from Forex.com.bd-Editorial External question — Solana Stack Exchange Author: Leo Loki Source score (net votes, not local likes): 0 Original post: https://solana.stackexchange.com/questions/16090 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. BACKEND: const wallet_pubkey = new PublicKey(wallet_pubkey_string); const wallet2 = Keypair.fromSecretKey(bs58.decode(wallet2_key)); const amount = 0.5; const signer_wallet = createNoopSigner(fromWeb3JsPublicKey(wallet_pubkey)); const update_auth = createNoopSigner(fromWeb3JsPublicKey(wallet2_key.publicKey)); const umi = createUmi(rpcUrl); umi.use(mplTokenMetadata()); umi.use(signerIdentity(signer_wallet)) const umiMintSigner = generateSigner(umi); const nftData = { mint: umiMintSigner, updateAuthority: update_auth, //the problem is in this line isMutable: true, name: 'test', symbol: 'test', uri: url, sellerFeeBasisPoints: percentAmount(10,2), creators: creators, tokenOwner: fromWeb3JsPublicKey(wallet_pubkey), }; const transferData = { destination: fromWeb3JsPublicKey(wallet2.publicKey), amount: sol(amount), }; let transaction = await transactionBuilder() .add(createNft(umi, nftData)) .add(transferSol(umi, transferData)) .setFeePayer(signer_wallet) .useV0() .buildWithLatestBlockhash(umi); const web3jsVersionedTransaction = toWeb3JsTransaction(transaction); web3jsVersionedTransaction.sign([Keypair.fromSecretKey(umiMintSigner.secretKey), Keypair.fromSecretKey(wallet2.secretKey)]); const web3jsVersionedTransactionSerialized = web3jsVersionedTransaction.serialize() const transaction_serialize_string = Buffer.from(web3jsVersionedTransactionSerialized).toString('base64'); FRONTEND: On the frontend, the transaction is signed by the wallet wallet_pubkey . if (window.solana && window.solana.isPhantom) { try { const connection = new Connection(url, "confirmed"); const transaction_array = Buffer.from(transactionBuildValue, 'base64'); const decodedTransaction = VersionedTransaction.deserialize(transaction_array); const { blockhash } = await connection.getLatestBlockhash(); decodedTransaction.recentBlockhash = blockhash; const signedTransaction = await window.solana.signTransaction(decodedTransaction); const signature = await connection.sendRawTransaction(signedTransaction.serialize()); await connection.confirmTransaction(signature, 'processed'); return { success: true, signature }; console.log(signature); } catch (error) { console.error(error); } } I get an error when trying to confirm a transaction via wallet. Error: Error: Simulation failed. Message: Transaction simulation failed: Error processing Instruction 2: custom program error: 0x7. Logs: [ "Program log: Instruction: SetAuthority", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3250 of 692177 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s consumed 117798 of 799706 compute units", "Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s success", "Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s invoke [1]", "Program log: IX: Mint", "Program log: Update Authority given does not match", "Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s consumed 31390 of 681908 compute units", "Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s failed: custom program error: 0x7" ]. If I don't use the string updateAuthority: update_auth in nftData and i don't use Keypair.fromSecretKey(wallet2.secretKey) in web3jsVersionedTransaction.sign then the problem doesn't occur and the code works correctly. How to fix the problem and add updateAuthority correctly?
Checking account access…