# 1.11.3[Intermediate]Solana in Footprint **Published by:** [Footprint Analytics](https://paragraph.com/@footprint-analytics-2/) **Published on:** 2023-02-01 **URL:** https://paragraph.com/@footprint-analytics-2/1-11-3-intermediate-solana-in-footprint ## Content 此文章是 #Web3 data 系列 的其中一个章节。什么是SolanaSolana 是一种网络规模的开源区块链协议,支持世界各地的开发人员和机构构建去中心化应用程序 (DApp) 和市场。Solana 的协议快速、安全且抗审查,它提供了构建大规模采用的应用程序所需的开放基础架构的灵活性。 这种高性能区块链提供了未来 DApp 和去中心化市场所需的完全去中心化、安全和高度可扩展的基础设施。它利用了一组突破性的计算技术,可以支持数千个节点,允许交易吞吐量与网络带宽成比例地扩展。 Solana 结合使用权益证明(PoS) 和历史证明 (PoH) 共识机制来提高吞吐量和可扩展性。因此,该网络声称支持每秒 50,000 笔交易 (TPS),使其成为世界上最快的区块链。Solana核心概念Solana 核心概念包括: accounts、program、transaction、rentaccounts(账户)如果程序需要在交易之间存储状态,它会使用 accounts来实现,Solana分为3种accounts类型:数据账户负责存储数据程序账户负责存储可执行程序原生账户,指Solana上的原生程序,例如"System","Stake",以及"Vote"数据账户分为两类:System owned accountsPDA (Program Derived Address) accounts每个账户拥有地址(public key)和一个owner,每个账户的字段列表如下:关于所有权,有几条重要的规则:只有账户的所有者才能改变账户中的数据,提取lamport任何人都可以向数据账户中存入lamport当账户中的数据被抹除之后,账户的所有者可以指定新的所有者PDA 存在另一种类型的帐户,称为程序派生帐户,通过算法从拥有该帐户的程序的公钥中派生出来的。我们将该地址称为程序派生地址或简称PDA。program(程序)Solana 的program,在其他区块链上通常被称为“smart contract“,是解释区块链上每笔交易内部发送的指令的可执行代码。 关键点program 本质上是标记为 executable(可执行)的特殊类型账户program 可以拥有其他账户program 只能更改他们拥有的数据或账户任何program都可以读取或存入另一账户程序被认为是无状态的,因为存储在program账户中的主要数据是编译后的BPF代码程序可以由其所有者owner升级program类型分为两种:on chain program (链上程序)on chain program 是用户编写的程序,直接部署到链上,供任何人交互和执行。on chain program 是没有直接融入Solana集群核心代码的 programnative programnative program 是直接构建到 Solana 核心代码中的程序。它们和on chain program 类似,可以被任何程序/账户调用。但它们只能作为作为链核心的一部分,和集群一起进行升级。 BPF loader 在链上部署、升级和执行程序。程序编号:BPFLoaderUpgradeab1e11111111111111111111111使用说明:LoaderInstructionBPF Upgradeable Loader 将自己标记为它创建的用于存储程序的可执行文件和程序数据帐户的所有者。当用户通过程序 ID 调用指令时,Solana 运行时将加载您的程序及其所有者 BPF Upgradeable Loader。运行时然后将您的程序传递给 BPF Upgradeable Loader 以处理指令。 Token program 该程序定义同质化和非同质化代笔的通用实现。每个token都有其metadata,其目的是把额外数据附加到 nft 和代币上。 Mint Account 负责存储 Token的全局信息,Token accounts 存储钱包和Mint Account 之间的关系。Metadata Account 可以通过PDA把自己附加到 Mint Account。Metadata包括供应量、symbol等信息。在Solana中的NFT具备以下特征的 Mint Accounts:它的供应量为 1,这意味着只有一个代币在流通。它有零位小数,这意味着不可能有 0.5 个标记这样的东西。它没有铸造权限,这意味着没有人可以铸造额外的代币。 Certified Collections 使 NFT 能够组合在一起并在链上验证该信息。因此需要先创建一个collection NFT,其目的是存储与该collection相关的任何元数据。在Solana中,NFT的collection本身就是一个NFT。transactions (事务)program 执行的开始伴随着一个 transaction 被提交到集群中。Solana 运行时将执行一个程序,按顺序执行每一个指令 instruction。每个 transaction 可包含多个指令,每个指令也可以包含多个内部指令(跨程序调用指令)inner instruction 。instruction 是 program 中最小的执行逻辑单元。 instruction 核心组成部分:accounts受此 instruction 影响的 accounts 地址数组。这可能是因为帐户将被读取、更改或两者兼而有之。请注意,此数组的顺序很重要,因为程序将根据其位置识别提供的帐户类型。program idinstruction 的program id 指定哪个程序执行指令。instruction data每条 instruction 都带有一个通用字节数组,该数组与帐户一起传递给程序,也叫做 Arguments。instruction data 的内容是特定于程序的,通常用于传达程序应执行的操作,以及这些操作可能需要的超出帐户包含内容的任何其他信息。 可通过 Anchor 对instruction data进行解码,需要准备 program 的 IDL 类似abi文件。python 封装的 anchorpy 比较好上手。Solana on Footprint基于对Solana的了解,我们现在来看看Footprint做了哪些应用:Solana account mapping在Solana的transfer指令中,source为token的发送账户,destination代表token的接收账户。但其并非实际的钱包地址,所以创建了solana_account_mapping解决这个问题;另外,Solana的NFT会频繁更换拥有者。表结构 solana_account_mapping字段描述:token_address:代币地址token_account:钱包对应不同代币生成的子账号,拥有者可随意控制该账户上的代币owner:token account的拥有者hold_end_time:该owner持有该token account的结束时间hold_start_time:该owner持有该token account的开始时间Solana marketplaceFootprint 解析了Solana上最大的两个NFT marketplace —- magic-eden和opensea 的sale数据,并使用统一的数据模型。抽象sale业务,把EVM链和非EVM链的业务数据组合在一起,形成标准化。其统一标准数据放在nft_transactions中。NFT indicator通过把Solana的NFT数据放入统一数据模型中,生产出统一标准的NFT指标。包括:collection市值,marketplace交易量,NFT持有时间,floor price等指标。数据存储在以下表中:nft_latest_statsnft_collection_daily_statsnft_collection_transfer_daily_statsmarketplace_nft_collection_daily_statsnft_collection_infonft_infonft_token_attritue由于NFT collection在Solana中比较特殊的存在,我们通过收集solscan上的collection id作为我们系统中的collection_contract_address。通过唯一collection_slug解决相同collection跨链的问题。GameFi结合gamefi的业务抽象,对Solana的数据进行提取和转化,放进统一的业务数据模型中。捕捉Solana中的钱包地址或账户与GameFi项目方账户进行交互的用户行为,统计出用户、资金流转等纬度的指标。可通过下表查看:protocol_daily_statsprotocol_active_addressprotocol_address_retention_dailyprotocol_address_retention_monthlyprotocol_address_retention_weekly ## Publication Information - [Footprint Analytics](https://paragraph.com/@footprint-analytics-2/): Publication homepage - [All Posts](https://paragraph.com/@footprint-analytics-2/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@footprint-analytics-2): Subscribe to updates