合约 Program
Solana 合约分为两类,一类是普通合约,英文称为"On Chain Program";另一类是系统合约,英文称为""Native Program"。
它们从本质上来说,类似其他公链上所说的合约。
1. 系统合约
系统合约是由节点在部署的时候生成的,普通用户无法更新,他们像普通合约一样,可以被其他合约或者RPC进行调用。
系统合约的种类包括:
- System Program
用于创建账号,转账等作用。
- BPF Loader Program
用于部署和更新合约。
- Vote program
用于创建并管理用户POS代理投票的状态和奖励。
2. 普通合约
一般我们说的合约都是普通合约,或者叫 "On Chain Program"。
普通合约是由用户开发并部署,Solana官方也有 一些官方开发的合约,如Token、ATA账号等合约。
当用户通过"BPF Loader Program"部署一个新合约的时候,新合约Account中的被标记为true,表示他是一个可以 被执行的合约账号。不同于有些公链,Solana上的合约是可以被更新的,也可以被销毁。并且当销毁的时候,用于存储 代码的账号所消耗的资源也会归还给部署者。
3. 合约与账户
在Account结构中,有个owner的成员,这个就表示这个Account是被哪个合约管理的,或者说哪个 合约可以对这个Account进行读写,类似Linux操作系统中,文件属于哪个用户。
比如,一般合约,他的Owner都是BPF Loader:
存放我们代币余额的内容的ower都是Token合约:
对应的代币为: