Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
DaviRain-Su committed Aug 13, 2023
1 parent 90fd211 commit da268e8
Show file tree
Hide file tree
Showing 13 changed files with 100 additions and 157 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ npm i

这是一个普通的 Next.js 应用程序,安装了一些模板组件和一些 Solana 依赖项,以帮助您节省时间。那里有一些模拟评论,请查看各个组件以感受该应用程序。

您会注意到我们已将钱包上下文提供程序从 `_app.tsx` 移至其自己的组件。它的工作原理是一样的,只是将其与更大的应用程序分开,性能更高。应用程序现在所做的就是将您的评论记录到控制台中,我们将在 `Form.tsx` 中设置 `handleTransactionSubmit` 函数。我们走吧呜呜呜呜
您会注意到我们已将钱包上下文提供程序从 `_app.tsx` 移至其自己的组件。它的工作原理是一样的,只是将其与更大的应用程序分开,性能更高。应用程序现在所做的就是将您的评论记录到控制台中,我们将在 `Form.tsx` 中设置 `handleTransactionSubmit` 函数。我们走吧呜呜呜呜

## 🗺 定义架构

Expand All @@ -37,7 +37,7 @@ npm i
npm install @project-serum/borsh --force
```

接下来前往 `Movie.ts` 导入 `borsh` 并在 Movie 类中添加架构(不要复制粘贴此内容):
接下来前往 `Movie.ts` 导入 `borsh` 并在 `Movie` 类中添加架构(不要复制粘贴此内容):

```ts
// We're importing borsh
Expand Down Expand Up @@ -74,7 +74,7 @@ export class Movie {

## 🌭 创建serialize方法

现在我们知道数据是什么样子,我们需要编写将其序列化的方法。将其添加到 Movie 类中架构的正下方:
现在我们知道数据是什么样子,我们需要编写将其序列化的方法。将其添加到 `Movie `类中架构的正下方:

```ts
serialize(): Buffer {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
sidebar_position: 9
sidebar_label: Anchor 合约框架实现 <hello, World>
sidebar_label: Anchor 合约框架实现 - hello, World
sidebar_class_name: green
---

# Anchor 合约框架实现 <hello, World>
# Anchor 合约框架实现 - hello, World

让我们通过构建和部署 `Hello World!` 程序来进行练习。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ sidebar_class_name: green
本地开发的基本流程如下

1. 安装 [Rust](https://www.rust-lang.org/tools/install)[Solana CLI](https://docs.solana.com/cli/install-solana-cli-tools)
2. 使用Solana CLI,您可以使用**solana-test-validator**命令运行本地测试验证器,初始化账户等基本操作
2. 使用`Solana CLI`,您可以使用**solana-test-validator**命令运行本地测试验证器,初始化账户等基本操作
3. 使用 `cargo build-sbf``solana program deploy` 命令在本地构建和部署程序
4. 使用 `solana logs` 命令查看程序日志

Expand Down Expand Up @@ -80,28 +80,28 @@ sh -c "$(curl -sSfL https://release.solana.com/v1.16.6/install)"

## Solana CLI基础

Solana CLI是一个命令行界面工具,提供了一系列命令,用于与Solana集群进行交互。
`Solana CLI`是一个命令行界面工具,提供了一系列命令,用于与Solana集群进行交互。

在本课程中,我们将介绍一些最常见的命令,但您始终可以通过运行`solana --help`来查看所有可能的Solana CLI命令列表
在本课程中,我们将介绍一些最常见的命令,但您始终可以通过运行`solana --help`来查看所有可能的`Solana CLI`命令列表

### Solana CLI 配置

Solana CLI存储了一些配置设置,这些设置会影响某些命令的行为。您可以使用以下命令查看当前的配置:
`Solana CLI`存储了一些配置设置,这些设置会影响某些命令的行为。您可以使用以下命令查看当前的配置:

```bash
solana config get
```

`solana config get`命令将返回以下内容:
- 配置文件 - Solana CLI所在的文件位于您的计算机上
- RPC URL - 您正在使用的端点,将您连接到本地主机、开发网络或主网络
- WebSocket URL - 监听来自目标集群的事件的WebSocket(在设置RPC URL时计算
- 密钥对路径 - 在运行Solana CLI子命令时使用的密钥对路径
- Commitment - 提供了网络确认的度量,并描述了一个区块在特定时间点上的最终性程度
- 配置文件 - `Solana CLI`所在的文件位于您的计算机上
- `RPC URL` - 您正在使用的端点,将您连接到本地主机、开发网络或主网络
- `WebSocket URL` - 监听来自目标集群的事件的`WebSocket`(在设置`RPC URL`时计算
- 密钥对路径 - 在运行`Solana CLI`子命令时使用的密钥对路径
- `Commitment` - 提供了网络确认的度量,并描述了一个区块在特定时间点上的最终性程度

您可以随时使用`solana config set`命令更改您的Solana CLI配置,然后跟上您想要更新的设置。
您可以随时使用`solana config set`命令更改您的`Solana CLI`配置,然后跟上您想要更新的设置。

最常见的更改将是您要定位的集群。使用`solana config set --url`命令更改RPC URL。
最常见的更改将是您要定位的集群。使用`solana config set --url`命令更改`RPC URL`

```bash
# localhost
Expand All @@ -115,7 +115,7 @@ solana config set --url devnet
solana config set --url mainnet-beta
```

同样地,您可以使用`solana config set --keypair`命令来更改密钥对路径。当运行命令时,Solana CLI将使用指定路径下的密钥对
同样地,您可以使用`solana config set --keypair`命令来更改密钥对路径。当运行命令时,`Solana CLI`将使用指定路径下的密钥对

```bash
solana config set --keypair ~/<FILE_PATH>
Expand All @@ -131,7 +131,7 @@ solana config set --keypair ~/<FILE_PATH>

通常在打开一个新的控制台并在测试验证器旁边运行`solana logs`命令会很有帮助。这将创建另一个持续进行的进程,用于流式传输与您配置的集群相关的日志。

如果您的CLI配置指向本地主机,则日志将始终与您创建的测试验证器相关联,但您也可以从其他集群(如Devnet和Mainnet Beta)流式传输日志。当从其他集群流式传输日志时,您需要在命令中包含一个程序ID,以限制您所看到的日志仅针对您的特定程序。
如果您的CLI配置指向本地主机,则日志将始终与您创建的测试验证器相关联,但您也可以从其他集群(`Devnet``Mainnet Beta`)流式传输日志。当从其他集群流式传输日志时,您需要在命令中包含一个程序`ID`,以限制您所看到的日志仅针对您的特定程序。


### 密钥相关
Expand All @@ -154,7 +154,7 @@ solana address
solana balance
```

要在Devnet或本地主机上进行SOL的空投,请使用`solana airdrop`命令。请注意,在Devnet上,每次空投限制为2个SOL。
要在`Devnet``localhost`上进行SOL的空投,请使用`solana airdrop`命令。请注意,`Devnet`,每次空投限制为2个SOL。

```bash
solana airdrop 2
Expand All @@ -168,69 +168,13 @@ solana airdrop 2

到目前为止,我们已经介绍了一些CLI命令,这些命令应该能帮助您快速解决那些问题。

## 在您的本地环境中开发Solana程序

### 创建一个新项目

要创建一个新的Rust包来编写Solana程序,您可以使用`cargo new --lib`命令,并指定您想要创建的新目录的名称。

```bash
cargo new --lib <PROJECT_DIRECTORY_NAME>
```

这个命令将在命令的末尾创建一个以您指定的名称命名的新目录。这个新目录将包含一个描述包的`Cargo.toml`清单文件。

清单文件包含元数据,如名称、版本和依赖项(包)。要编写Solana程序,您需要更新`Cargo.toml`文件,将`solana-program`作为依赖项包括进去。您可能还需要添加下面显示的`[lib]``crate-type`行。

```toml
[package]
name = "<PROJECT_DIRECTORY_NAME>"
version = "0.1.0"
edition = "2021"

[features]
no-entrypoint = []

[dependencies]
solana-program = "~1.8.14"

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

在那个时候,你可以开始在src文件夹中编写你的程序。


### 构建和部署

当你准备构建你的Solana程序时,你可以使用`cargo build-sbf`命令。

```bash
cargo build-sbf
```

这个命令的输出将包含部署程序的指令,大致如下:

```bash
To deploy this program:
$ solana program deploy /Users/James/Dev/Work/solana-hello-world-local/target/deploy/solana_hello_world_local.so
The program address will default to this keypair (override with --program-id):
/Users/James/Dev/Work/solana-hello-world-local/target/deploy/solana_hello_world_local-keypair.json
```

当您准备部署程序时,请使用从`cargo build-sbf`命令输出的`solana program deploy`命令。这将把您的程序部署到CLI配置中指定的集群。

```bash
solana program deploy <PATH>
```

### 挑战

现在轮到你独立构建一些东西了。尝试创建一个新的程序,将你自己的消息打印到程序日志中。这次将你的程序部署到Devnet而不是本地主机。

记得使用`solana config set --url`命令将你的RPC URL更新为Devnet
记得使用`solana config set --url`命令将你的`RPC URL`更新为`Devnet`

只要你将连接和Solana Explorer的URL更新为指向Devnet而不是localhost,你就可以使用与演示中相同的客户端脚本来调用该程序。
只要你将连接和[Solana Explorer](https://explorer.solana.com)`URL`更新为指向`Devnet`而不是`localhost`,你就可以使用与演示中相同的客户端脚本来调用该程序。

```ts
let connection = new web3.Connection(web3.clusterApiUrl("devnet"));
Expand All @@ -242,7 +186,7 @@ console.log(
);
```

您还可以打开一个单独的命令行窗口,并使用`solana logs | grep " invoke" -A`在Devnet上使用`solana logs`时,您必须指定程序ID。否则,`solana logs`命令将返回来自Devnet的持续日志流。例如,您可以按照以下步骤监视对Token程序的调用,并显示每个调用的前5行日志:
您还可以打开一个单独的命令行窗口,并使用`solana logs | grep " invoke" -A``Devnet`上使用`solana logs`时,您必须指定程序`ID`。否则,`solana logs`命令将返回来自`Devnet`的持续日志流。例如,您可以按照以下步骤监视对`Token`程序的调用,并显示每个调用的前5行日志:

```bash
solana logs | grep "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke" -A 5
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
sidebar_position: 8
sidebar_label: 原始Solana合约实现 <hello, World>
sidebar_label: Native Solana合约实现 - hello, World
sidebar_class_name: green
---

# 原始Solana合约实现 <hello, World>
# Native Solana合约实现 - hello, World

让我们通过构建和部署 `Hello World!` 程序来进行练习。

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
sidebar_position: 10
sidebar_label: 使用Solang编译器编译solidity合约实现 <hello, World>
sidebar_label: Solang solidity合约实现 - hello, World
sidebar_class_name: green
---

# 使用`Solang`编译器编译solidity合约实现 <hello, World>
# Solang solidity合约实现 - hello, World

欢迎来到Solana入门指南!`Solang`是一个Solidity编译器,它允许您使用Solidity编程语言编写Solana程序,其他区块链中称为“智能合约”。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ sidebar_class_name: green

# 🥩 使用Anchor进行质押

是时候将NFT质押计划和用户界面转换为Anchor了!你一直在努力开发的buildoor项目已经很棒了,但是如果将其转移到Anchor上,以后的工作会更简单。继续运用你所学的知识,完成以下任务:
是时候将NFT质押计划和用户界面转换为`Anchor`!你一直在努力开发的buildoor项目已经很棒了,但是如果将其转移到Anchor上,以后的工作会更简单。继续运用你所学的知识,完成以下任务:

- 使用Anchor从头开始重写程序
- 使用`Anchor`从头开始重写程序
- 增加一些可靠的测试覆盖率,以确保您不会让安全风险从中溜走
- 用Anchor方法构建器替换复杂的UI代码
- `Anchor`方法构建器替换复杂的UI代码

你应该花一些时间独立尝试做这件事。这不是一项简单的任务,但你能行。如果几个小时后你感到困惑,可以随时观看我们解决方案的视频演示。

让我们来完成这个任务并检查已发货的产品。我们将完善我们一直在努力开发的质押计划,但不是添加新功能,而是将其全部替换为Anchor
让我们来完成这个任务并检查已发货的产品。我们将完善我们一直在努力开发的质押计划,但不是添加新功能,而是将其全部替换为`Anchor`

让我们通过运行 `anchor init anchor-nft-staking` 来创建一个新项目,或者选择一个你自己的名字。进入 `Anchor.toml` 文件,并将种子设置为 `true` ,集群设置为 `devnet`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ sidebar_class_name: green

# 🐹 Anchor到Typescript

要使用前端与程序进行交互,我们需要创建一个 Anchor `Program` 对象。
要使用前端与程序进行交互,我们需要创建一个 `Anchor` `Program` 对象。

`Program` 对象提供了一个自定义的API,通过结合程序 `IDL``Provider` 来与特定程序进行交互。
`Program` 对象提供了一个自定义的`API`,通过结合程序 `IDL``Provider` 来与特定程序进行交互。

创建 `Program` 对象,我们需要以下内容:

Expand Down Expand Up @@ -60,11 +60,11 @@ sidebar_class_name: green
}
]
}
```
```

## Provider 供应商

在使用 `IDL` 创建`Program`对象之前,我们首先需要创建一个Anchor `Provider` 对象。
在使用 `IDL` 创建`Program`对象之前,我们首先需要创建一个`Anchor` `Provider` 对象。

`Provider` 对象代表了两个事物的组合:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sidebar_class_name: green

# 使用Anchor CPIs构建

回到未来。我们将以CPIs结束我们的电影评论节目,来个圆满收官。
回到未来。我们将以`CPIs`结束我们的电影评论节目,来个圆满收官。

这一次,让我们:

Expand All @@ -18,7 +18,7 @@ sidebar_class_name: green
**初始代码**

- 起始代码:[https://beta.solpg.io/63184c17bb7e0b5f4ca6dfa5](https://beta.solpg.io/63184c17bb7e0b5f4ca6dfa5?utm_source=buildspace.so&utm_medium=buildspace_project)
- 我们将在之前的PDA演示基础上进行扩展
- 我们将在之前的`PDA`演示基础上进行扩展

我们要做的第一件事是定义 `create_reward_mint` 指令:

Expand Down Expand Up @@ -71,7 +71,7 @@ pub fn create_reward_mint(
}
```

这个很长但非常简单!我们正在为`Token`元数据程序创建一个CPI到 `create_metadata_account_v2` 指令。
这个很长但非常简单!我们正在为`Token`元数据程序创建一个`CPI` `create_metadata_account_v2` 指令。

接下来,我们看到了 `CreateTokenReward` 上下文类型。

Expand Down Expand Up @@ -108,7 +108,7 @@ pub struct CreateTokenReward<'info> {
## 创建 ErrorCode

- 检查评级的错误代码
-Anchor处理了我们在原生版本中的其他检查
-`Anchor`处理了我们在原生版本中的其他检查

```rust
#[error_code]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ sidebar_class_name: green

# 使用Anchor PDA构建

在我们继续讨论CPI之前,让我们向世界展示一下这些PDA的功能。🎸
在我们继续讨论`CPI`之前,让我们向世界展示一下这些`PDA`的功能。🎸

我们将使用Anchor框架创建一个电影评论程序
我们将使用`Anchor`框架创建一个电影评论程序

该程序将允许用户:
- 使用PDA初始化一个新的电影评论账户,以存储评论
- 使用`PDA`初始化一个新的电影评论账户,以存储评论
- 更新现有的电影评论账户的内容
- 关闭现有的电影评论账户

Expand All @@ -33,7 +33,7 @@ pub mod movie_review {

## 🎥 MovieAccountState

我们首先要做的是定义State账户
我们首先要做的是定义`State`账户

```rust
use anchor_lang::prelude::*;
Expand Down Expand Up @@ -66,7 +66,7 @@ pub struct MovieAccountState {

## 🎬 添加电影评论

感谢 Anchor,可以跳过所有验证和安全性,直接添加 `add_move_review` 功能:
感谢 `Anchor`,可以跳过所有验证和安全性,直接添加 `add_move_review` 功能:

```rust
#[program]
Expand Down Expand Up @@ -127,9 +127,9 @@ pub struct AddMovieReview<'info> {
...
```

再次,我们正在以与本地相同的方式进行操作,但借助Anchor的魔力
再次,我们正在以与本地相同的方式进行操作,但借助`Anchor`的魔力

我们正在使用两个 seeds 初始化一个新的 `movie_review` 账户
我们正在使用两个 `seeds` 初始化一个新的 `movie_review` 账户

- `title` - 指令数据中的电影标题
- `initializer.key()` - 创建电影评论的 `initializer` 的公钥
Expand Down Expand Up @@ -201,7 +201,7 @@ pub struct UpdateMovieReview<'info> {
...
```

我们使用 `seeds``bump` 约束来验证 `movie_review` 账户。由于占用的空间可能会发生变化,我们使用 `realloc` 约束让Anchor根据更新的描述长度来处理账户空间和租金的重新分配
我们使用 `seeds``bump` 约束来验证 `movie_review` 账户。由于占用的空间可能会发生变化,我们使用 `realloc` 约束让`Anchor`根据更新的描述长度来处理账户空间和租金的重新分配

`realloc::payer` 约束规定了所需的额外`lamports`将来自或发送到初始化账户。

Expand Down Expand Up @@ -253,7 +253,7 @@ pub struct Close<'info> {

我们都完成了!试一下,它会像旧的本地电影评论程序一样运行。如果出现问题,你可以与[这里](https://beta.solpg.io/631b39c677ea7f12846aee8c?utm_source=buildspace.so&utm_medium=buildspace_project)的解决方案代码进行比较 :)

## 🚢 船舶挑战
## 🚢 Ship 挑战 (这个和build with solana Framework的内容重复了)

现在轮到你独立构建一些东西了。由于我们从非常简单的程序开始,你的程序将几乎与我们刚刚创建的程序完全相同。尽量达到能够独立编写代码而不参考之前的代码的程度,所以请尽量不要在这里复制粘贴。

Expand Down
Loading

0 comments on commit da268e8

Please sign in to comment.