By: enze
Solana 是一种快速且高度可扩展的区块链协议,为去中心化应用(DApps) 提供了强大的基础设施。近期 Solana 生态复苏引发广泛关注,本文将介绍 Solana 账户、Token、交易,以及如何在这个生态中保障资产安全。
了解账户是保障资产安全的第一步。与以太坊中的账户不同,在 Solana 中,账户的主要作用是存储数据。
Solana 中的账户主要分为三种类型:
数据账户:用于存储数据。
程序账户:用于存储可执行程序。
原生账户:指 Solana 上的原生程序,例如 System、Stake 以及 Vote。
其中,数据账户可进一步分为两类:
系统所有账户:由 Solana 上的原生程序生成的账户。
程序派生账户(PDA):签名权限是程序的帐户,因此不像其他帐户那样受私钥控制。
每个账户都有一个地址(一般情况下是一个公钥)以及一个所有者(程序账户的地址)。前者与以太坊上的类似,后者可以简单理解为创建该账户的程序。
普通用户通过钱包生成的账户属于数据账户中的系统所有账户,默认的账户所有者是系统程序。我们可以简单理解为:用户通过系统程序生成了一个系统所有账户,这个账户存储了用户的基本信息和资产等数据,而这个账户拥有一个地址(也就是公钥)。
以 Solana Explorer 为例,普通用户使用的账户,即系统所有账户,在浏览器上的展示如下图:
Assigned Program Id 代表账户的所有者,Allocated Data Size 表示账户已存储的数据大小,Executable 表示账户是否可执行,通常只有程序账户是可执行的。普通用户只需关注账户的地址。
通过以上内容,我们已经对 Solana 账户有了初步的了解,接下来我们来认识下 Solana Token。
SPL-Token 代表 Solana 网络上的所有非本地代币,包括同质代币和非同质代币(NFT)。
与 ERC20 和 ERC721 代币类似,SPL 代币 在 Solana 上发行和交易,而其与以太坊的区别是:
接下来,让我们了解一下什么是 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 上,每笔交易都包含以下关键信息:
Instructions(指令):一个或多个指令,定义了交易中的操作,例如转账、程序交互、Token 转账等。
Blockhash(块哈希):包含了最新的块哈希值,用于确保交易在正确的块上执行。
Signatures(签名):一个或多个签名,表示交易的授权。每个签名对应着交易中的一个签名账户,确保只有授权的账户可以执行这笔交易。
Solana 上的一笔交易可以包含多个指令,这意味着可以在同一笔交易中执行多个不同的操作,例如用户可以将多笔转账指令打包到同一个交易中,这些指令将按顺序执行。如果交易中的任何一个指令失败,整个交易都将失败。
Solana 的交易记录与以太坊略有不同,我们来看下如何有效阅读 Solana 上的交易记录。
对于 Solana 上的交易记录,我们以 SOLSCAN 浏览器为例,关注以下主要信息:
Signature(签名):类似于交易哈希,在交易记录中将交易的第一个签名作为交易的索引。
Result(结果):交易的执行结果,表明交易是否成功。
Signer(签名者):执行交易的账户地址,即签名者的地址。
Main Actions(主要操作):交易中包含的主要操作指令,可以是转账,程序调用等。
Instruction Details(指令详情):交易中执行的具体操作指令。
我们在 Main Actions 中可以看到转账双方的账户地址。
在 Instruction Details 中,我们可以看到 SOL 转账交易的主要指令是 SOL Transfer,该指令旨在进行 SOL 的转账。通过详细查看该指令的详情,我们可以获得有关该指令调用的程序,以及涉及到的转账双方的账户地址等信息。
以下交易是 USDT 的转账,与 SOL 交易类似。
在 Instruction Details 部分,Token 交易通常首先调用 Create Associated Account 指令,为接收方创建一个 Token 账户(如果接收方尚未有相应账户),用于存储 USDT 余额等数据。
接着执行 Token Transfer 指令,完成 USDT 的转账。值得注意的是,与 SOL Transfer 指令不同,Token Transfer 指令中的 Source 和 Destination 不代表转账双方的直接账户地址,而是它们的 Token 账户(PDA 账户),这点需要特别注意。
下面是一笔 Swap 交易,用户将 USDT 兑换为 USDC。
在包含多个指令的 Solana 交易中,涉及 SOL 的转账、Swap 交易以及 Token 的转账等多个操作。
即便有多个指令,我们仍然能够通过 Instruction Details 查看交易执行的详细指令,了解每个步骤的具体操作。
俗话说,知己知彼,百战不殆。我们已经初步了解了 Solana 上的账户、Token 和交易。为规避资产被盗的风险,我们需要深入了解在使用 Solana 钱包时可能面临的风险。
根据慢雾区块链被黑档案库(https://hacked.slowmist.io) 统计,2023 年 9 起私钥泄露安全事件导致的损失就高达 8475 万美元。在慢雾 AML 团队处理的被盗案件中,私钥和助记词泄露导致资产被盗的事件占据了相当大的比例。因此,要保证 Solana 钱包上资产的安全,最重要的是管理好钱包私钥和助记词。
在钱包使用过程中,签名是最需要关注的安全风险之一,尤其需要特别注意在 Solana 上与项目互动时所签名的信息。
而且,Solana 允许将多笔转账打包成一个交易,也即只需一次签名即可将钱包中的所有资产一次性转移。
下面我们来看一个实际案例:
某位受害者在一个钓鱼网站上误操作,仅仅点击了一次确认,导致钱包中的所有资产被一次性转走。究竟是什么操作让受害者只是签了一次名就能让黑客将所有资产转走呢?
是的,黑客利用了上文提到的机制和钱包的一个特点:
受害者使用的是 Phantom Wallet,这款钱包能够将多笔转账指令打包成一个交易,仅需一次签名即可完成整个过程。恰恰是这一功能成为黑客利用的突破口,导致受害者在一次签名中失去了所有资产。在使用钱包时,请用户务必谨慎确认每一次签名的操作,以免遭受损失。
Phantom Wallet 的官方文档中也明确介绍了这一关键功能:
在本期 Solana 科普文章中,我们首先了解了 Solana 账户的基础知识;接着深入研究了 Solana Token 的基本概念;随后探讨了在 Solana 上进行交易的相关内容。在保障钱包资产安全的部分,我们强调了私钥和助记词的安全保存,建议用户阅读慢雾出品的《区块链黑暗森林自救手册》:https://github.com/slowmist/Blockchain-dark-forest-selfguard-handbook/blob/main/README_CN.md 以获取更多安全建议;在使用钱包时,请用户务必小心确认每一次签名的操作,避免遭受损失。此外,阅读钱包文档中的安全提示至关重要,时刻保持警惕是保障资产安全的关键。
往期回顾
慢雾导航
慢雾科技官网
https://www.slowmist.com/
慢雾区官网
https://slowmist.io/
慢雾 GitHub
https://github.com/slowmist
Telegram
https://t.me/slowmistteam
https://twitter.com/@slowmist_team
Medium
https://medium.com/@slowmist
知识星球
https://t.zsxq.com/Q3zNvvF