调试发送程序指令时“事务模拟失败”(Solana Solidity)

2023-11-29

当尝试调用编译的程序时@solana/solidity,我收到以下错误:

Transaction simulation failed: Error processing Instruction 0: Program failed to complete 
    Program jdN1wZjg5P4xi718DG2HraGuxVx1mM7ebjXpxbJ5R3N invoke [1]
    Program log: pxKTQePwHC9MiR52J5AYaRtSLAtkVfcoGS3GaLD24YX
    Program log: sender account missing from transaction
    Program jdN1wZjg5P4xi718DG2HraGuxVx1mM7ebjXpxbJ5R3N consumed 200000 of 200000 compute units
    Program failed to complete: BPF program Panicked in solana.c at 285:0
    Program jdN1wZjg5P4xi718DG2HraGuxVx1mM7ebjXpxbJ5R3N failed: Program failed to complete

jdN1wZjg5P4xi718DG2HraGuxVx1mM7ebjXpxbJ5R3N是程序的公钥并且pxKTQePwHC9MiR52J5AYaRtSLAtkVfcoGS3GaLD24YX是发送者的公钥。

我在用着@solana/solidity 库的一个分支这暴露了Transaction对象,以便可以对其进行签名和发送幻影钱包在前端。导致错误的代码如下:

// Generate the transaction
const transaction = contract.transactions.send(...args);

// Add recent blockhash and fee payer
const recentBlockhash = (await connection.getRecentBlockhash()).blockhash;
transaction.recentBlockhash = recentBlockhash;
transaction.feePayer = provider.publicKey;

// Sign and send the transaction (throws an error)
const res = await provider.signAndSendTransaction(transaction);

我会尝试自己进一步调试,但我不知道从哪里开始。查找错误消息没有产生任何结果,并且错误消息的描述性不强。我不确定此错误是否发生在程序执行本身中,或者是否是事务对象的组成存在问题。如果这是程序执行中的问题,有没有办法将日志添加到我的 Solidity 代码中?如果是交易对象的问题,可能会遗漏什么?如何更好地调试此类问题?

感谢您的任何帮助。

编辑:尽管我没有更改任何提供的代码,但我现在遇到了不同的错误。错误消息现在如下:

Phantom - RPC Error: Transaction creation failed. {code: -32003, message: 'Transaction creation failed.'}

不幸的是,这条错误消息的帮助甚至不如上一条。我不确定 Phantom Wallet 是否已更新,或者项目依赖项是否在某个时刻已更新,但考虑到这两个错误消息的模糊性质以及我的代码都没有更改的事实,我相信它们是由导致的由同一个问题。再次强调,任何帮助或调试提示都是值得赞赏的。


我能够解决这个问题,虽然我遇到了另一个问题,但它与这个问题的内容无关,所以我将单独发布。

关于我的编辑,我发现错误消息之间的差异取决于我发送交易的方式。起初,我尝试用 Phantom 发送.signAndSendTransaction()方法,它产生了第二条错误消息(在我的编辑下列出)。然后我尝试手动签名并发送交易,如下所示:

const signed = await provider.request({
  method: 'signTransaction',
  params: {
    message: bs58.encode(transaction.serializeMessage()),
  },
});

const signature = bs58.decode(signed.signature);
transaction.addSignature(provider.publicKey, signature);

await connection.sendRawTransaction(transaction.serialize())

这产生了我原来的帖子中包含的更详细的错误。一旦我意识到要查找什么,该错误消息确实很有帮助——发送帐户的公钥从keys场上的TransactionInstruction on the Transaction。我把它添加到我的@solana/solidity 分支图书馆和错误消失了。

简而言之,我能够调试这个的方法是

  1. Using provider.request({ method: 'signTransaction' }) and connection.sendRawTransaction(transaction)而不是幻影的provider.signAndSendTransaction()获取更详细错误消息的方法
  2. 记录交易对象并仔细检查指令

我希望这对将来的其他人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试发送程序指令时“事务模拟失败”(Solana Solidity) 的相关文章

  • Solidity:源文件结构

    Solidity 源文件结构 SPDX License Identifier 如果源代码可用 则可以更好地建立对智能合约的信任 由于提供源代码总是涉及版权方面的法律问题 Solidity编译器鼓励使用机器可读的SPDX License Id
  • 如何在opensea批量发布NFT(Goerli测试网)

    一 生成NFT图象 hashlips art engine HashLips Art Engine 是一种用于根据提供的图层创建多个不同的艺术作品实例的工具 1 安装 npm install or yarn install 2 使用 在 l
  • 玩以太坊链上项目的必备技能(类型-引用类型-Solidity之旅三)

    在前文我们讲述了值类型 也就说再修改值类型的时候 每次都有一个独立的副本 如 string 类型的状态变量 其值是无法修改 而是拷贝出一份该状态的变量 将新值存起来 对于处理稍微复杂地值类型时 拷贝将变得愈发大了 也正是介于此 才考虑到将数
  • 安全保护策略:iOS应用程序代码保护的关键步骤和技巧

    转载 怎么保护苹果手机移动应用程序ios ipa文件中的代码 目录 转载 怎么保护苹果手机移动应用程序ios ipa文件中的代码 代码混淆步骤 1 选择要混淆保护的ipa文件 2 选择要混淆的类名称 3 选择要混淆保护的函数 方法 4 配置
  • uniswap 程序集 create2 功能如何工作?

    我正在查看 uniswap 代码 试图理解代码 其中大部分内容都非常清楚 但我确实有一些问题 在这个函数中 function createPair address tokenA address tokenB external returns
  • 调试发送程序指令时“事务模拟失败”(Solana Solidity)

    当尝试调用编译的程序时 solana solidity 我收到以下错误 Transaction simulation failed Error processing Instruction 0 Program failed to compl
  • 如何从秘密短语(助记符)SOLANA 生成密钥对

    我正在使用 Solana 和幻影钱包 我有一个带有公钥的钱包 我有它的由 12 个单词组成的秘密短语 当我从我使用的秘密短语生成密钥对时 const getKeyPair mnemomic gt const seed bip39 mnemo
  • Solidity 中的动态数组

    我想声明一个简单的数组 动态列表 一个set函数推入一个字符串和一个get函数返回动态数组中保存的所有字符串 我搜索了很多但找不到这个简单的东西 这是我的解决方案 你需要experimental ABIEncoderV2返回字符串数组 pr
  • 调用另一个合约中的函数 - Solidity

    我需要使用 Truffle 调用另一个合约中的函数 这是我的合同样本 类别 sol contract Category notice Check if category exists function isCategoryExists ui
  • 如何使用 chainlink oracle 读取 JSON 文件

    我改变了链环API消费者示例 https docs chain link docs make a http get request 读取一个 JSON 文件 其中包含我希望带入并存储在智能合约中的数据 pragma solidity 0 6
  • 不支持的方法:eth_sendTransaction。 Alchemy 不持有用户的私钥

    我无法通过 Alchemy 从前端执行智能合约的发送交易方法 我是一个初学者 我正在尝试从我的前端执行一个方法 将交易发送到区块链 但我从 alchemy 收到一个错误 说该交易需要使用我的私钥签名 但我不知道如何执行此操作我在互联网上没有
  • Solidity如何使用元组(嵌套abi)进行函数签名?

    struct Test uint ui string s function test Test t public emit Log t ui t s 我对ABI有一些了解 我使用实验性 ABIEncoderV2 选项签订了这份合同 总之 这
  • 将三个整数编码为单个整数

    我必须将 3 个数字编码为同一个整数 我有这 3 个测量值 uint256 carLength uint256 carWidth uint256 carDepth 我想将这 3 个数字编码为同一个整数 并且可以解码 我的问题是我在这么低的水
  • Chainlink节点:交易待处理时该怎么办?

    我有一个 chainlink 节点 并且有些交易似乎被卡住了 如何修复待处理的传出确认 大多数情况下 您没有使用 Gas 为您的 chainlink 节点账户提供资金 转到您的配置并获取ACCOUNT ADDRESS并将 ETH 发送到该地
  • Solidity - 输入 JSON 描述的 Solidity 代码

    我想编译我的以太坊 HelloWorld sol 智能合约 在所有教程中 您都是这样做的 var solc require solc var compiledContract solc compile fs readFileSync Hel
  • Solidity有HTTP请求功能吗?

    我正在使用以太坊制作一个项目 在这个项目中 我正在签订一份名为 A 的合同 当我向 A 发送消息时 我希望 A 发出网络请求 Solidity 是否可以使用 http 请求 方法 GET POST 以太坊区块链无法与外界交互 否则它将不再是
  • 通过python3计算uniswap 3.0池(对)地址

    我遇到了一个关于如何计算的问题 新的 uniswap 版本 3 池 早期版本称为pair 地址基于1 https github com Uniswap v3 sdk blob aeb1b09 src utils computePoolAdd
  • ERROR 发送和传输仅适用于应付地址类型的对象,不适用于地址

    function finalizeRequest uint index public restricted Request storage request requests index require request approvalCou
  • ERC20:津贴不足

    我创建了两个代币 YAY e sYAY 和一个 StakeRewards 智能合约 代码如下 SPDX License Identifier MIT pragma solidity 0 8 0 import openzeppelin con
  • 在 Solidity 中初始化一个大的固定长度数组

    我正在以太坊上构建一个游戏作为我的第一个项目 但我面临着存储和天然气限制 我想在区块链上存储一个存储智能合约 以便在部署后查询 我确实需要使用手动插入的常量值来初始化固定长度数组 我的情况如下 contract A some states

随机推荐