合约 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合约:

对应的代币为: