实现版本

solana movies 是 solana 开发教程上的一个案例。

它有如下实现版本:

  • rust-program 用 rust 写的智能合约,负责链上交互
  • front-end 用户看到的 dapp 界面,用于创建影评并提交
  • anchor-rust-program 用 anchor 框架重写智能合约
  • anchor-front-end 用 anchor 重写 dapp 界面
  • client 代替 dapp 界面,用 js 发起创建影评并提交

根据原始代码,我重新修改了依赖和部分代码,搞了个能跑起来的汇总版本

虽然大概意思能看懂,但是让我用 rust 重写一遍,我也不会。

rust 智能合约

用 rust 原生写智能合约时,要在 Cargo.toml 标记类型和特征

[features]
no-entrypoint = []

[lib]
crate-type = ["cdylib", "lib"]

基于 anchor 框架的智能合约

重点在于序列化和反序列化,以及排序和分页的偏移量计算。

client 代码

variant 变量是一个标志位,0 表示添加影评,1 表示更新影评。

dapp 前端代码

连接钱包和发送交易有 solana wallet adapter,但是也可以像 client 那样直接调用 @solana/web3.js 的接口,不使用现有的钱包UI和接口。