我如何在Solana上获取程序作者?

3

我想知道是否有办法获取solana智能合约的作者。对于solidity,我在构造函数中使用save msg.sender来保留合约所有者地址。

contract KeepOwner {
    address private _owner;
    constructor() {
        _owner = msg.sender;
    }

    function isOwner(address likeOwner) public view returns (bool) {
        return likeOwner == _owner;
    }
}

但是我找不到任何方法来保存和获取在Solana上发送部署交易的作者(公钥)。

我尝试从Solana程序的AccountInfo中获取信息,但没有成功。

2个回答

1
将所有者的私人信息硬编码到程序中是不安全的,因此我们应该使用另一种方法来验证一个账户是否为所有者。我们可以使用SPL代币来表示程序的所有权。
以下是具体步骤:
  • 创建一个只有1个供应量的SPL代币。
  • 将该代币的公钥硬编码到程序中。
  • 部署你的程序。
当然,你需要检查账户是否拥有硬编码的代币余额,以确定该账户是否为程序的所有者。你可以通过转移SPL代币来转移所有权,并可以扩展SPL代币的功能。

0

根据您所需的具体内容,有两种方法可以实现:

您可以使用https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturesforaddress查看涉及程序地址的所有过去交易签名,然后对每个签名使用https://docs.solana.com/developing/clients/jsonrpc-api#gettransaction。任何针对BPF可升级加载器(BPFLoaderUpgradeab1e11111111111111111111111)或BPF加载器2(BPFLoader2111111111111111111111111111111111)程序的指令都可能由程序作者签署。
如果该程序与可升级加载器(BPFLoaderUpgradeab1e11111111111111111111111)相关联,则可能存在一个“升级权限”,可以升级该程序。这可能是程序“作者”的良好代理。如果您在浏览器中查看股份池程序,您将看到4SnSuUtJGKvk2GYpBwmEsWG53zTurVM8yXGsoiZQyMJn是升级权限:https://explorer.solana.com/address/SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接