了解以太坊和 Solana 智能合约之间的区别。

您可以在 Solana 区块链上编写和部署程序。 程序(在其他协议中也称为智能合约)是从 DeFi 和 NFT 到社交媒体和游戏等链上活动的基础。

  • 程序处理从用户或其他程序收到的指令。
  • 所有程序都不维护状态。换句话说,程序使用的数据通过指令发送到单独的账户。
  • 该程序本身存储在一个executable已检查的帐户中。
  • 所有程序均归 BPF Loader 所有,并由 Solana Runtime 执行。
  • 开发人员通常使用 Rust 或 C++ 编写程序。不过,任何针对 LLVM 和 BPF 后端的语言都可以选择。
  • 所有程序都有一个单独的入口点,在此进行指令处理(即process_instruction)。始终包含以下参数:
    • program_id: pubkey,
    • accounts: array,
    • instruction_data: byte array

与大多数其他区块链不同,Solana 将数据和代码完全分离。程序与之交互的所有数据都存储在单独的账户中,并通过指令进行调用。
这种模式允许综合单一程序通过各种帐户运行,而无需额外部署。这种模式的一个常见示例可以在 Native 和 SPL 程序之间看到。

本机程序和 Solana 程序库 (SPL)

Solana 有许多程序可作为链上交互的核心构建块。
这些程序分为本机程序和 Solana 程序库 (SPL) 程序。
原生程序提供运行验证器所需的基础功能。其中最著名的程序之一是System Program,负责管理新账户并在两个组之间转移 SOL。
SPL 程序支持各种链上活动,包括代币创建、兑换、借贷、权益池生成和链上名称服务。SPL 代币程序可以直接通过 CLI 调用。其他程序(如关联代币帐户程序)通常配置为自定义程序

编写程序

程序通常用 Rust 和 C++ 开发。但是,您可以使用任何针对 LLVM 和 BPF 后端的语言进行开发。Neon LabsSolang 最近的努力使 EVM 兼容性成为可能,允许开发人员用 Solidity 编写程序。

大多数基于 Rust 的程序遵循以下架构:

文件 描述
lib.rs 注册模块
entrypoint.rs 程序的入口点
instruction.rs 程序 API,指令数据(反)序列化
processor.rs 程序逻辑
state.rs 程序对象,(反)序列化状态
error.rs 程序特定错误

最近,Anchor 已成为一种程序开发框架。Anchor 减少了样板代码并简化了(反)序列化处理,类似于 Ruby on Rails,但适用于基于 Rust 的程序。程序通常在 Localhost 和 Devnet 环境中开发和测试,然后部署到 Testnet 和 Mainnet。

Solana 支持以下环境:

集群环境 RPC 连接 URL
主网测试版 https://api.mainnet-beta.solana.com
测试网 https://api.testnet.solana.com
开发网 https://api.devtnet.solana.com
本地主机 默认端口:8899(例如,http://localhost:8899

一旦部署到环境,客户端就可以通过与每个集群的 RPC 连接与链上程序进行交互。

部署程序

开发人员可以通过 CLI 部署程序,如下所示:

solana program deploy <PROGRAM_FILEPATH>

程序部署后,会被编译为 ELP 共享对象(包括 BPF 字节码)并上传到 Solana 集群。除非程序被标记为可执行并分配给 BPF 加载器,否则它们都存在于帐户内。帐户的地址用作 program_id在所有交易中引用程序的地址。

Solana 支持多个 BPF 加载器,包括最近的可升级 BPF 加载器。BPF 加载器负责管理程序帐户,并通过客户端的 program_id 实现这一点。
所有程序都有一个单独的入口点,在此进行指令处理(即 process_instruction)。参数始终包括:

  • program_id: pubkey
  • accounts: array
  • instruction_data: byte array

一旦调用,程序就会由 Solana Runtime 执行。

概括

  • Solana 中的程序对应于 Solana 区块链上的“可执行账户”。
  • 以太坊中的智能合约概念与 Solana 中的程序概念一致。
  • Solana 允许任何人发行代币,而无需部署额外的合约。

原文:https://solana.com/developers/evm-to-svm/smart-contracts