Solana/账户模型/所有权和权限控制
在我们讲解 solana 的账户数据结构的时候, 我们得知每一个账户都拥有一个 owner
字段, 该字段指向一个程序账户, 作为该账户的所有者. 只有所有者程序可以:
- 更改账户的 data 字段.
- 从账户余额中扣除余额.
大部分 solana 账户的所有者都是一个程序账户. 这些程序能够控制和管理账户内的数据. 例如, 普通钱包账户的所有者是 solana 系统程序, 能够管理账户余额和转账等功能. Solana 账户的实际功能依赖于账户所有者设定的规则, 我们以现实中的银行系统进行类比:
Ada 在泰国汇商银行(siam commercial bank)开设了一个银行账户, 并在账户中存入了一些资金. 在这个场景下:
- Ada 拥有账户内资金的所有权和有限使用权.
- Ada 账户的所有权仍归属银行. 银行账户是依附于银行的工具, 是银行的附属和延伸.
- Ada 只允许执行银行允许其执行的操作, 例如转账, 汇款等. Ada 无法销毁账户内的资金, 因为银行不允许她这么做.
因此我们再次强调一遍: 每个 solana 账户都与一个程序账户相关联, 而该程序的设计会定义账户如何被访问和操作. 所有者程序账户可以是系统账户, 也可以是用户自己部署的智能合约, 这种设计下使得 solana 非常灵活, 可以实现针对账户非常细粒度的控制.