首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用@ solana /web3.js构建solana托管行时接收"Phantom - RPC错误:事务创建失败“

在使用@ solana /web3.js构建solana托管行时接收"Phantom - RPC错误:事务创建失败“
EN

Stack Overflow用户
提问于 2022-03-09 11:36:43
回答 2查看 1.3K关注 0票数 0

我正在尝试复制https://github.com/dboures/solana-random-number-betting-game,尽管当我尝试启动托管时,我会收到以下错误:

代码语言:javascript
复制
Phantom - RPC Error: Transaction creation failed.
Uncaught (in promise) {code: -32003, message: 'Transaction creation failed.'}

我正在使用幻影钱包与索拉纳RPC。

代码语言:javascript
复制
const transaction = new Transaction({ feePayer: initializerKey })
  let recentBlockHash = await connection.getLatestBlockhash();
  transaction.recentBlockhash = await recentBlockHash.blockhash;
  
  const tempTokenAccount = Keypair.generate();

  // Create Temp Token X Account
  transaction.add(
    SystemProgram.createAccount({
      programId: TOKEN_PROGRAM_ID,
      fromPubkey: initializerKey,
      newAccountPubkey: tempTokenAccount.publicKey,
      space: AccountLayout.span,
      lamports: await connection.getMinimumBalanceForRentExemption(AccountLayout.span )
    })
  );

  const { signature } = await wallet.signAndSendTransaction(transaction);
  let txid = await connection.confirmTransaction(signature);
  console.log(txid);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-10 06:08:00

通过使用以下代码,我能够解决问题:

代码语言:javascript
复制
const signed = await wallet.request({
    method: "signTransaction",
    params: {
      message: bs58.encode(transaction.serializeMessage())
    }
  });
  const signature = bs58.decode(signed.signature)
  transaction.addSignature(initializerKey, signature);
  transaction.partialSign(...[tempTokenAccount]);

  await connection.sendRawTransaction(transaction.serialize())

而不是:

代码语言:javascript
复制
await wallet.signAndSendTransaction(transaction, {signers: [tempTokenAccount]})

基本上,一开始我使用一个简单的函数来执行上述所有步骤,但是,由于某种原因,它无法工作并抛出所受的错误。当我使用这个分解代码时,它起了作用!这个错误的原因对我来说仍然是神秘的。

谢谢。

票数 0
EN

Stack Overflow用户

发布于 2022-03-09 16:21:14

您正在尝试创建一个帐户,而不与该帐户的键盘签名,以证明所有权。

您必须将键盘添加为这样的签名者:

代码语言:javascript
复制
await wallet.signAndSendTransaction(transaction, {signers: [tempTokenAccount]})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71408715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档