主要参考:https://medium.com/@kklas/solana-for-non-smart-contract-developers-7ef4e419afef

一些名词

Program:程序,即智能合约。个人认为这个概念指定的比智能合约更好。 Account:账户 - 本质是就是一个全局 KV 容器。这里全局是指整条链路都能访问。- Key 是地址,地址是 Ed25519 密钥对的公钥 - Value 是账户数据。- 程序可以读或写 Value(账户数据) Client:客户端,一般指 Web 应用程序 - 客户端可以调用 Program 操作 Account - 在操作之前必须指定要访问的 Account 以及是读还是写

安全模型

Account Ownership

Account 是被 Program 所有的,且一个 Account 只能被一个 Program 所有。可以视为,一个 Account 有一个属性 owner,指向一个 Program(实际上会在 Account 的元数据中有存储)。

只有这个被指向的 Program 才能修改(写)Account 里面的数据。其它 Program 只能读。

Account Signatures

上面提到,客户端在调用程序的时候,需要传 Account 信息(指定 Account)。除此之外,还可以传账户签名(Account Signatures)。

通过账户签名,可以由 Program 实现所有权和授权功能。

授权功能比如,用来签署交易。

CPI calls

官方文档:https://solana.com/docs/core/cpi

CPI 是 cross-program invocation 的缩写,表示跨程序调用

CPI 调用类似于客户端程序调用。需要有以下元素

  • Program ID
  • 传入参数
  • 所需账户

个人理解,其类似与程序之间的 API,但不像平常的 CS 架构,这个更多是 P2P 架构。即程序之间可以互相调用。

限制:

  • 调用层级最大是4级

PDAs