我正在构建一个程序来对solana上的事务进行联合签名。
签名机制是有效的,但现在我正试图从我收到的交易中提取账户数据长度,因为我想计算创建账户的成本。
我将这个交易从前端发送到后端以进行联合签名:
await program.value.transaction.sendTweet(topic, content, {
accounts: {
author: wallet.value.publicKey,
feePayer: company_account_pubkey,
tweet: tweet.publicKey,
systemProgram: web3.SystemProgram.programId,
}
});
合同是:
#[derive(Accounts)]
pub struct SendTweet<'info> {
#[account(init, payer = feePayer, space = 1372)]
pub tweet: Account<'info, Tweet>,
#[account(mut)]
pub author: Signer<'info>,
#[account(mut)]
pub feePayer: Signer<'info>,
#[account(address = system_program::ID)]
pub system_program: AccountInfo<'info>,
}
#[account]
pub struct Tweet {
pub author: Pubkey,
pub timestamp: i64,
pub topic: String,
pub content: String,
}
所以只要看一下合同,我就能理解所需的空间将是1372。
但我的服务将与许多其他程序交互,所以我希望能够根据我收到的交易提取账户数据长度。
在solana py上,我知道我可以用tx.instructions[0].data
获得数据,我知道用client.get_minimum_balance_for_rent_exemption(1372)
可以获得租金
但我不知道如何从交易本身中提取账户的规模。
我错过了什么?
我认为交易信息中不包括账户的大小。它可能隐藏在某个getTransaction
返回值中,但最有可能的是,您必须进行一个getAccountInfo调用,该调用将包括数据,并且您可以检查它返回的data
的长度。