问题标签 [anchor-solana]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
typescript - 为 Solana 锚测试加载工作区 IDL 时出错
由于某种原因,我的 mocha 测试无法找到我的 IDL。我收到以下错误:
它已正确生成并保存在我的目标 IDL 文件夹 (../solana-anchor-reactjs-payment/target/idl/payment.json) 中,以下是 IDL 文件的内容:
调用此 IDL 的测试是以下测试 (../solana-anchor-reactjs-payment/tests/payment-test.ts):
测试可能无法访问 IDL 所在的文件夹。所以我什至将它物理复制到与测试相同的文件夹中,但这仍然没有成功。对此的任何帮助将不胜感激,在此先感谢您。
更新 这并不理想,但您可以通过解析 idl json 文件然后将其作为程序中的对象传递来解决此问题。您将添加以下行来设置程序:
rust - 如何避免我的锚程序抛出“堆栈帧中的访问冲突”?
我的 Anchor 程序有一个如下所示的指令结构:
当我尝试运行使用该结构的指令时,我得到一个奇怪的堆栈错误,如下所示:
是什么赋予了?
solana - Anchor 中的“无效帐户鉴别器”是什么意思?
我正在尝试从公钥中获取帐户:
但随后 Anchor 抛出一个错误说:
什么是帐户鉴别器?
web3js - 无法使用锚在 Solana 中向 PDA 签署交易
我正在使用 Anchor 学习 Solana 全栈。我在签署将 Sol 发送到我正在制作的程序所拥有的 PDA 的交易时遇到了问题。我无法为具有正确签名的函数调用 rpc。下面是我的代码:
我得到的错误是,我认为这与改变交易的问题有关。
Solana 计划的相关信息是:
任何帮助表示赞赏。谢谢你。
solana - Create SPL staking on Solana Ecosystem
I'm newbie in programming, so the questiong is: is there any guides how i can create staking pool on solana ecosystem for created token? And what is the steps?
rust - 如何计算链上 TVL?
我正在开发一个锚/solana 程序,该程序为多个池提供流动性,包括 saber.so 和 invariant.app。在交换期间,我需要计算 TVL,以公平的汇率提供代币。
我的问题是:计算链上 TVL 的最佳方法是什么?
以下是我想到的一些方法,每种方法都有其缺点:
(1) 计算链下计算,并将其作为预言机提供:
我们可以在链下计算 TVL,然后将该 TVL 作为预言机提供。缺点是:solana 上的 chainlink(一个预言机提供者)似乎不支持自定义数据馈送,就像以太坊一样。此外,该解决方案增加了应用程序的集中化,将它放在链上会很好。也可能存在耗尽协议储备的预言机攻击。
(2) 拥有大量流动性头寸:
另一种方法是跟踪我们作为协议提供流动性的所有流动性头寸。尽管这是可能的,但我相信这会(很快)达到 solana 的账户限制。
在这种情况下,我们将有一个巨大的“状态”帐户,它跟踪每个池的以下变量:
- token1_mint:公钥
- token2_mint:公钥
- token1_amount: u64
- token2_amount: u64
- token1_to_currency_pyth_feed_address:公钥
- token2_to_currency_pyth_feed_address:公钥
- 提供者:u8
鉴于我们有 4 * 32 + 2 * 64 字节 + 8 字节 = 264 字节,我们可以在任何给定时间点拥有大约 20 个可以存入的池(因为 solana 的帐户限制为 4KB)
第二种选择似乎是要走的路,第一种选择是脱链并且容易受到预言机攻击。然而,第二个选项似乎仍然有点 hacky,因为我必须在任何时候包含这个数据结构来计算总 TVL。
是否有任何其他的设计理念浮现在您的脑海或您已经看到,这将是合适的?
rust - 通过程序传输SOL的流程是什么?
我想编写一个程序,可用于将代币与 sol 交换(例如购买 nft 的操作)。我有一个针对令牌 B 的令牌 A 的工作示例。但我想用 SOL 替换令牌 B。本例使用anchor & escrow account(存储代币A,等待调用执行兑换)。
我的问题是:假设我有买家、卖家和托管账户。代币由托管账户持有。它可以从托管账户发送给买方,那部分是可以的。但是,我如何将溶胶从买方发送给卖方?我不知道流程是什么:
- 溶胶应该直接从买方到卖方吗?(购买似乎程序无法执行那种转账,因为它不拥有买方主帐户)
- 是否应该将 sol 从买方发送到程序拥有的帐户,然后由程序发送给买方?
感谢您的帮助,因为我无法在互联网上找到任何示例!(看起来很基本......)
solana - 通过经典 javascript 调用锚 (solana) 程序?自定义程序错误:0x64
我在 devnet 上部署了一个程序,当我运行锚测试时,一切运行良好。该程序需要 3 个键,然后返回 ok() (我评论了里面的所有内容)。
我试图在我的单页应用程序(带有幻像签名)中调用该程序,但出现以下错误:自定义程序错误:0x64
我认为问题很简单,但我不明白原因。
公钥来自 new PublicKey(...)
program_id 是我的程序的公钥(PublicKey())
我的程序中没有参数(我试图删除数据:{...} 但得到了同样的错误)。
当我使用 .ts 文件和锚点测试调用程序时,一切正常,代码如下:
我一定在某个地方遗漏了一些东西,但不知道在哪里,如果有人可以提供帮助,将不胜感激
rust - 锚:指令包装器中可变数量的帐户
如何为指令包装器设置可变数量的输入帐户?
即鉴于此:
当您想要引用数字资产的所有创建者(例如 NFT)时,这很有用,但您事先不知道有多少。