遇到问题尝试使用 Solana-py 创建程序派生地址 (PDA):“没有足够的值来解压(预期 2,得到 1)”
Posted
技术标签:
【中文标题】遇到问题尝试使用 Solana-py 创建程序派生地址 (PDA):“没有足够的值来解压(预期 2,得到 1)”【英文标题】:Falling into issues Trying to Create a Program Derived Address (PDA) with Solana-py: "not enough values to unpack (expected 2, got 1)" 【发布时间】:2022-01-24 03:45:24 【问题描述】: params = system_program.CreateAccountWithSeedParams(
base_pubkey = keypair.public_key,
from_pubkey = keypair.public_key,
lamports = 200,
new_account_pubkey = greeted,
program_id = program_id,
seed = 'hello',
space = 8
)
我正在获取输出
CreateAccountWithSeedParams(from_pubkey = 2ASw3tjK5bSxQxFEMsM6J3DnBozNh7drVErSwc7AtzJv,new_account_pubkey = BkuEamVXuHugbAAVurExanW1FGAejsEAa7hECYsP1j6o,base_pubkey = 2ASw3tjK5bSxQxFEMsM6J3DnBozNh7drVErSwc7AtzJv,种子= '你好',lamports = 200,空间= 8,program_id = TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) P>
当我使用时问题就来了
transaction_Params = system_program.create_account_with_seed(params)
我得到了一大堆错误,长话短说:没有足够的值来解包(预期 2,得到 1)
全文:
任何帮助都会得到更多的珍惜和赞赏,但也会得到大量的感谢欢呼 ????????????
【问题讨论】:
欢迎来到 SO,不要使用截图来分享代码或回溯——这对人们来说很难阅读。 【参考方案1】:看起来seed
提供的实际上应该是一个直接序列化为 Rust 字符串的 dict。这是一个测试:https://github.com/michaelhly/solana-py/blob/b507d4dfe16cdaccc754b1f2bac5ed9e258ea039/tests/unit/test_system_program.py#L64
另外,如果您尝试创建程序派生地址,您实际上需要在程序中使用invoke_signed
在程序中创建它。从外部创建程序派生地址是不可能的,因为您需要程序为程序派生地址“签名”。查看https://solanacookbook.com/recipes/accounts.html#program-derived-address 和https://solanacookbook.com/recipes/accounts.html#create-account-with-seed 之间的区别
【讨论】:
在这种情况下,为什么我要求 find_program_address 与我在 params 中使用的种子相同,在这种情况下,我将生成一个不在 ed25519 曲线上的地址,我只是看起来像一个PDA。顺便说一句,种子格式作为字典工作,谢谢,我不知道如何使种子在 find_program_address 和 create_account_with_seed 之间保持一致,因为我们输入的是字典与字节数组 抱歉,不是很清楚。您可以在客户端代码中离线生成 地址,但如果您想在该地址创建一个帐户,则需要传入种子,以便运行时可以验证程序 -派生地址。老实说,完全不用担心create_account_with_seed
,很少有情况需要它。
好的,谢谢。非常感谢。以上是关于遇到问题尝试使用 Solana-py 创建程序派生地址 (PDA):“没有足够的值来解压(预期 2,得到 1)”的主要内容,如果未能解决你的问题,请参考以下文章