我正在尝试复制https://github.com/dboures/solana-random-number-betting-game,尽管当我尝试启动托管时,我会收到以下错误:
Phantom - RPC Error: Transaction creation failed.
Uncaught (in promise) {code: -32003, message: 'Transaction creation failed.'}我正在使用幻影钱包与索拉纳RPC。
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);发布于 2022-03-10 06:08:00
通过使用以下代码,我能够解决问题:
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())而不是:
await wallet.signAndSendTransaction(transaction, {signers: [tempTokenAccount]})基本上,一开始我使用一个简单的函数来执行上述所有步骤,但是,由于某种原因,它无法工作并抛出所受的错误。当我使用这个分解代码时,它起了作用!这个错误的原因对我来说仍然是神秘的。
谢谢。
发布于 2022-03-09 16:21:14
您正在尝试创建一个帐户,而不与该帐户的键盘签名,以证明所有权。
您必须将键盘添加为这样的签名者:
await wallet.signAndSendTransaction(transaction, {signers: [tempTokenAccount]})https://stackoverflow.com/questions/71408715
复制相似问题