高通CEO:生成式AI正在“非
Solana 科普:认识账户、Token、交易与资产安全
作者:enze,慢雾科技
Solana 是一种快速且高度可扩展的区块链协议,为去中心化应用(DApps) 提供了强大的基础设施。近期 Solana 生态复苏引发广泛关注,本文将介绍 Solana 账户、Token、交易,以及如何在这个生态中保障资产安全。
Solana 账户
了解账户是保障资产安全的第一步。与以太坊中的账户不同,在 Solana 中,账户的主要作用是存储数据。
Solana 中的账户主要分为三种类型:
数据账户:用于存储数据。
程序账户:用于存储可执行程序。
原生账户:指 Solana 上的原生程序,例如 System、Stake 以及 Vote。
其中,数据账户可进一步分为两类:
系统所有账户:由 Solana 上的原生程序生成的账户。
程序派生账户(PDA):签名权限是程序的帐户,因此不像其他帐户那样受私钥控制。
每个账户都有一个地址(一般情况下是一个公钥)以及一个所有者(程序账户的地址)。前者与以太坊上的类似,后者可以简单理解为创建该账户的程序。
普通用户通过钱包生成的账户属于数据账户中的系统所有账户,默认的账户所有者是系统程序。我们可以简单理解为:用户通过系统程序生成了一个系统所有账户,这个账户存储了用户的基本信息和资产等数据,而这个账户拥有一个地址(也就是公钥)。
以 Solana Explorer 为例,普通用户使用的账户,即系统所有账户,在浏览器上的展示如下图:
Assigned Program Id 代表账户的所有者,Allocated Data Size 表示账户已存储的数据大小,Executable 表示账户是否可执行,通常只有程序账户是可执行的。普通用户只需关注账户的地址。
通过以上内容,我们已经对 Solana 账户有了初步的了解,接下来我们来认识下 Solana Token。
Solana Token
SPL-Token 代表 Solana 网络上的所有非本地代币,包括同质代币和非同质代币(NFT)。
与 ERC20 和 ERC721 代币类似,SPL 代币 在 Solana 上发行和交易,而其与以太坊的区别是:
在 Solana 中,Token 的发行人通过 Solana 上的原生程序 token-program 创建一个 mint-account,并在这个账户中存储 Token 的基本信息。例如,Solana Explorer 上的 USDC 的 mint-account 地址为 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v。浏览器中显示了有关 USDC Token Mint 的详细信息,包括当前代币供应量、铸币和冻结权限的地址以及代币的小数精度。
接下来,让我们了解一下什么是 token-account。
在 Solana 上,每个 Token 持有者都有一个特定的 token-account,记录了该持有者特定 Token 的余额和相关信息。例如,Alice 同时拥有 USDT 和 USDC 两种 Token,她将分别拥有两个 token-account,其中一个记录 USDT 的余额,另一个记录 USDC 的余额。
那么如何查看自己的 token-account 呢?
我们可以使用 Solana Beach 浏览器,通过输入数据账户的地址,点击 Portfolio,就可以清晰地看到每个 token-account,每个账户记录着特定 Token 的余额。
通过 Solana Beach 浏览器,还能查看每个账户记录的 Token 信息,授权情况等详细信息。
Solana 交易
在 Solana 上,每笔交易都包含以下关键信息:
Instructions(指令):一个或多个指令,定义了交易中的操作,例如转账、程序交互、Token 转账等。
Blockhash(块哈希):包含了最新的块哈希值,用于确保交易在正确的块上执行。
Signatures(签名):一个或多个签名,表示交易的授权。每个签名对应着交易中的一个签名账户,确保只有授权的账户可以执行这笔交易。
Solana 上的一笔交易可以包含多个指令,这意味着可以在同一笔交易中执行多个不同的操作,例如用户可以将多笔转账指令打包到同一个交易中,这些指令将按顺序执行。如果交易中的任何一个指令失败,整个交易都将失败。
Solana 的交易记录与以太坊略有不同,我们来看下如何有效阅读 Solana 上的交易记录。
SOL 转账交易
对于 Solana 上的交易记录,我们以 SOLSCAN 浏览器为例,关注以下主要信息:
Signature(签名):类似于交易哈希,在交易记录中将交易的第一个签名作为交易的索引。
Result(结果):交易的执行结果,表明交易是否成功。
Signer(签名者):执行交易的账户地址,即签名者的地址。
Main Actions(主要操作):交易中包含的主要操作指令,可以是转账,程序调用等。
Instruction Details(指令详情):交易中执行的具体操作指令。
我们在 Main Actions 中可以看到转账双方的账户地址。