让Solana程序支付交易费用



我不确定这是否可能,但我想做的是让程序支付交易成本,让用户免费使用程序。

在我看来这个过程是:

  1. 我发送一些Solana到程序的帐户以处理未来的交易。
  2. 用户与SaveData函数交互
  3. (在这个函数中,将来会有某种机制来检查用户是否可以在不付费的情况下与该函数交互)
  4. 程序将支付交易,所以用户甚至不需要支付一个Lamport。

我的代码是

#[derive(Accounts)]
pub struct SaveData<'info> {
#[account(init, payer = system_program, space = 8 + 50 + 32 )]
pub data_account: Account<'info, DataState>,
#[account(mut)]
pub authority: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct DataState {
pub authority: Pubkey,
content: String
}

我尝试将system_program设置为付款人,但如果我尝试使用anchor构建程序,它会给我这个错误:

error[E0599]: no method named `exit` found for struct `SaveData` in the current scope
--> programs/test-smart-contract/src/lib.rs:5:1
|
5  | #[program]
| ^^^^^^^^^^ method not found in `SaveData<'_>`
...
61 | pub struct SaveData<'info> {
| -------------------------- method `exit` not found for this

我怎样才能实现我想做的事?


更新为了解决这个问题,我开始开发这个服务:cowsigner.com

不幸的是,每笔交易都有一个指定的付款人,需要在交易上签名,并且是一个签名者帐户。

系统程序是Solana上的本地程序,你在你的案例中滥用了它。这是它的官方定义:

创建新帐户,分配帐户数据,将帐户分配给拥有的程序,从系统程序拥有的帐户中转移lamports并支付交易费用。

如果您希望支付费用,那么您需要一个专用帐户,该帐户指定为每笔交易的收费人,并在每笔交易上签名。

相关内容

  • 没有找到相关文章

最新更新