Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
DaviRain-Su committed Aug 10, 2023
1 parent 81c510a commit 84d59bc
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ sidebar_class_name: green

准备好戳一下Solana网络了吗?我们将编写一个脚本,生成一个密钥对,用`devnet` SOL资金进行充值,并与Solana网络上的现有程序进行交互。

这个程序是一个简单的“ping”计数器:我们击中它,它记录我们对它的ping,并增加一个计数器。我们以后会介绍Rust和我们自己的程序,现在我们将使用JS/TS。
这个程序是一个简单的“`ping`”计数器:我们击中它,它记录我们对它的`ping`,并增加一个计数器。我们以后会介绍Rust和我们自己的程序,现在我们将使用JS/TS。

## 🚧 在本地设置 Solana 客户端

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Solana 上有三种类型的账户
- 程序帐户 - 这些存储可执行程序(又称智能合约)
- 原生账户 - 这些用于核心区块链功能,例如权益、投票

本地账户(native account)是区块链运行所需的,我们稍后会详细介绍。现在,我们只需要处理数据和程序账户。
本地账户(`native account`)是区块链运行所需的,我们稍后会详细介绍。现在,我们只需要处理数据和程序账户。

在数据账户中,您还有两种进一步的类型

Expand All @@ -32,17 +32,17 @@ Solana 上有三种类型的账户

| FIELD | 描述 |
| --- | --- |
| lamports | 该账户拥有的lamports数量 |
| owner | 这个账户的所有者程序 |
| executable | 这个账户成是否可以处理指令 |
| data | 这个账户存储的数据的字节码 |
| rent_epoch | 下一个需要付租金的epoch(代) |
| `lamports` | 该账户拥有的lamports数量 |
| `owner` | 这个账户的所有者程序 |
| `executable` | 这个账户成是否可以处理指令 |
| `data` | 这个账户存储的数据的字节码 |
| `rent_epoch` | 下一个需要付租金的epoch(代) |

我们现在只关注我们需要了解的事情,所以如果有些东西不太明白,就继续前进吧 - 我们会边进行下去边填补空白。

`Lamport`是Solana的最小单位。如果你熟悉以太坊生态系统,这有点像Gwei。一个`Lamport`等于0.000000001 SOL,所以这个字段告诉我们账户拥有多少SOL。

每个账户都有一个公钥 - 它就像账户的地址。你知道你的钱包有一个地址,用来接收那些辣辣的NFT吗?同样的道理!Solana地址只是base58编码的字符串
每个账户都有一个公钥 - 它就像账户的地址。你知道你的钱包有一个地址,用来接收那些辣辣的NFT吗?同样的道理!Solana地址只是`base58`编码的字符串


`executable` 是一个布尔字段,告诉我们该帐户是否包含可执行数据。数据是存储在帐户中的内容,租金我们稍后会支付!
Expand Down Expand Up @@ -89,9 +89,9 @@ async function getBalanceUsingJSONRPC(address: string): Promise<number> {
}
```

这里发生了一堆事情。我们正在进行一个POST请求,请求体中有特定的参数告诉RPC要做什么。我们需要指定RPC的版本、id、方法,本例中是getBalance,以及该方法所需的参数,本例中只有address
这里发生了一堆事情。我们正在进行一个POST请求,请求体中有特定的参数告诉RPC要做什么。我们需要指定RPC的版本、id、方法,本例中是`getBalance`,以及该方法所需的参数,本例中只有`address`

我们有一堆针对一个非常简单的方法的样板代码,所以我们可以使用Solana的`Web3.js` SDK。以下是所需的内容:
我们有一堆针对一个非常简单的方法的样板代码,所以我们可以使用Solana的`Web3.js SDK`。以下是所需的内容:

```ts
async function getBalanceUsingWeb3(address: PublicKey): Promise<number> {
Expand All @@ -111,7 +111,7 @@ async function getBalanceUsingWeb3(address: PublicKey): Promise<number> {
在你的工作区域创建一个文件夹。我将我的放在桌面上。[克隆起始库](https://github.com/RustyCab/solana-intro-frontend.git)并进行设置:

```bash
git clone https://github.com/RustyCab/solana-intro-frontend.git
git clone https://github.com/CreatorsDAO/solana-intro-frontend
cd solana-intro-frontend
git checkout starter
npm i
Expand Down Expand Up @@ -166,7 +166,7 @@ const addressSubmittedHandler = (address: string) => {

- 我们正在使用 `key.toBase58` 设置地址。这是Solana地址的字符串编码。
- 我们正在连接到 `devnet` 网络。有三个网络 - 主网、测试网和开发网。我们将在开发网上进行所有操作。
- 我们正在将余额从Lamports转换为SOL - 余额以Lamports返回,而不是SOL。
- 我们正在将余额从`Lamports`转换为SOL - 余额以`Lamports`返回,而不是SOL。


我们完成了!如果你在这里粘贴一个地址,你就会看到余额。确保你的账户上有开发网络的 SOL!如果没有,你可以使用我的账户来测试你的应用 - `B1aLAAe4vW8nSQCetXnYqJfRxzTjnbooczwkUJAr7yMS`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ sidebar_class_name: green

为了理解交易及其工作原理,您需要知道什么是密钥对。顾名思义,这是一对密钥 - 一个是公共的,另一个是私有的。公钥指向网络上帐户的地址,每个公钥都有一个相应的私钥/秘密密钥。

Web3.js 库有几个用于处理密钥对的辅助函数。您可以生成密钥对并使用它们来获取公钥或私钥。
`Web3.js` 库有几个用于处理密钥对的辅助函数。您可以生成密钥对并使用它们来获取公钥或私钥。

```typescript
// Create a new keypair
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
---
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!”程序来进行练习。
让我们通过构建和部署 `Hello World!` 程序来进行练习。

我们将在本地完成所有操作,包括部署到本地测试验证器。在开始之前,请确保您已经安装了Rust和Solana CLI。如果您还没有安装,请参考概述中的说明进行设置。

## Anchor 安装

这里是anchor的[安装官方指南](https://www.anchor-lang.com/docs/installation).

需要你按照步骤安装好anchor
需要你按照步骤安装好 Anchor

安装完成后我们可以通过执行下面的命令,检测anchor是否安装完成✅。
安装完成后我们可以通过执行下面的命令,检测 Anchor 是否安装完成✅。

```bash
anchor --version
Expand All @@ -37,7 +37,7 @@ anchor init hello_world

#### 2. 编写你的程序

接下来,使用下面的Hello World!”程序更新hello_world/program/src/lib.rs。当程序被调用时,该程序会简单地将Hello, world!”打印到程序日志中。
接下来,使用下面的`Hello World!`程序更新`hello_world/program/src/lib.rs`。当程序被调用时,该程序会简单地将`Hello, world!`打印到程序日志中。

```rust
use anchor_lang::prelude::*;
Expand Down Expand Up @@ -72,7 +72,7 @@ solana config set --url localhost
solana config get
```

最后,运行本地测试验证器。在一个单独的终端窗口中运行`solana-test-validator`命令。只有当我们的RPC URL设置为localhost时才需要这样做
最后,运行本地测试验证器。在一个单独的终端窗口中运行`solana-test-validator`命令。只有当我们的`RPC URL`设置为`localhost`时才需要这样做

```bash
solana-test-validator
Expand Down Expand Up @@ -103,10 +103,10 @@ solana程序部署将输出您的程序的程序ID。您现在可以在[Solana E
solana logs <PROGRAM_ID>
```

或者也可以通过(Solana Exporer)[https://explorer.solana.com/?cluster=custom],查看产生的日志📔。
或者也可以通过[Solana Exporer](https://explorer.solana.com/?cluster=custom),查看产生的日志📔。

在测试验证器仍在运行时,尝试使用[此处](https://github.com/DaviRain-Su/all-in-one-solana/tree/main/code/contract/hello_world/app/hello-frontend)的客户端脚本调用您的程序。

这将返回一个Solana Explorer的URL(`Transaction https://explorer.solana.com/tx/${transactionSignature}?cluster=custom`)。将URL复制到浏览器中,在Solana Explorer上查找该交易,并检查程序日志中是否打印了Hello, world!。或者,您可以在运行`solana logs`命令的终端中查看程序日志。
这将返回一个Solana Explorer的URL(`Transaction https://explorer.solana.com/tx/${transactionSignature}?cluster=custom`)。将URL复制到浏览器中,在Solana Explorer上查找该交易,并检查程序日志中是否打印了`Hello, world!`。或者,您可以在运行`solana logs`命令的终端中查看程序日志。

就是这样!您刚刚在本地开发环境中创建并部署了您的第一个程序。
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
sidebar_position: 8
sidebar_label: 原始Solana合约实现hello, World
sidebar_label: 原始Solana合约实现 <hello, World>
sidebar_class_name: green
---

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

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

我们将在本地完成所有操作,包括部署到本地测试验证器。在开始之前,请确保您已经安装了Rust和Solana CLI。如果您还没有安装,请参考概述中的说明进行设置。

Expand All @@ -18,7 +18,7 @@ sidebar_class_name: green
cargo new --lib solana-hello-world-local
```

记得更新 cargo.toml 文件,将 `solana-program` 添加为依赖项,并检查 `crate-type` 是否已经存在。
记得更新 `Cargo.toml` 文件,将 `solana-program` 添加为依赖项,并检查 `crate-type` 是否已经存在。

```toml
[package]
Expand All @@ -35,7 +35,7 @@ crate-type = ["cdylib", "lib"]

## 2. 编写你的程序

接下来,使用下面的Hello World!”程序更新lib.rs。当程序被调用时,该程序会简单地将Hello, world!”打印到程序日志中。
接下来,使用下面的`Hello World!` 程序更新`lib.rs`。当程序被调用时,该程序会简单地将`Hello, world!` 打印到程序日志中。

```rust
use solana_program::{
Expand Down Expand Up @@ -73,7 +73,7 @@ solana config set --url localhost
solana config get
```

最后,运行本地测试验证器。在一个单独的终端窗口中运行`solana-test-validator`命令。只有当我们的RPC URL设置为localhost时才需要这样做
最后,运行本地测试验证器。在一个单独的终端窗口中运行`solana-test-validator`命令。只有当我们的`RPC URL`设置为`localhost`时才需要这样做

```bash
solana-test-validator
Expand Down Expand Up @@ -106,6 +106,6 @@ solana logs <PROGRAM_ID>

在测试验证器仍在运行时,尝试使用[此处](https://github.com/Unboxed-Software/solana-hello-world-client)的客户端脚本调用您的程序。

`index.ts`中用刚刚部署的程序ID替换掉原来的程序ID,然后运行`npm install`接着运行npm start。这将返回一个Solana Explorer的URL。将URL复制到浏览器中,在Solana Explorer上查找该交易,并检查程序日志中是否打印了Hello, world!。或者,您可以在运行`solana logs`命令的终端中查看程序日志。
`index.ts`中用刚刚部署的`PROGRAM ID`替换掉原来的`PROGRAM ID`,然后运行`npm install`接着运行`npm start`。这将返回一个Solana Explorer的`URL`。将URL复制到浏览器中,在Solana Explorer上查找该交易,并检查程序日志中是否打印了`Hello, world!`。或者,您可以在运行`solana logs`命令的终端中查看程序日志。

就是这样!您刚刚在本地开发环境中创建并部署了您的第一个程序。
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
---
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程序,其他区块链中称为“智能合约”。
欢迎来到Solana入门指南!`Solang`是一个Solidity编译器,它允许您使用Solidity编程语言编写Solana程序,其他区块链中称为“智能合约”。

如果你是一位对Solana网络的高速和低费用感兴趣的EVM开发者,那么Solang是你的完美工具。通过Solang,你可以利用你对Solidity的现有知识开始在Solana上进行构建!
如果你是一位对Solana网络的高速和低费用感兴趣的EVM开发者,那么`Solang`是你的完美工具。通过Solang,你可以利用你对Solidity的现有知识开始在Solana上进行构建!

## 安装

在本节中,我们将帮助您设置Solang的开发环境。只需按照下面列出的步骤进行操作即可:
在本节中,我们将帮助您设置`Solang`的开发环境。只需按照下面列出的步骤进行操作即可:

1. 检查先决条件:在开始之前,请确保您的系统上已安装了[Rust](https://www.rust-lang.org/tools/install)[Node.js](https://nodejs.org/en)。Windows用户还需要设置好[Windows子系统](https://solana.com/developers/guides/setup-local-development#windows-users-only)以便运行Linux。

2. Solana工具套件安装:首先安装[Solana工具套件](https://docs.solana.com/cli/install-solana-cli-tools),其中包括Solana命令行界面(CLI)和最新版本的Solang。

3. Anchor框架安装:接下来,[安装Anchor框架](https://www.anchor-lang.com/docs/installation)。Anchor是Solana生态系统中广泛使用的框架,可以简化构建Solana程序的过程。从0.28版本开始,您可以直接通过Anchor开始使用Solang进行构建
3. Anchor框架安装:接下来,[安装Anchor框架](https://www.anchor-lang.com/docs/installation)。Anchor是Solana生态系统中广泛使用的框架,可以简化构建Solana程序的过程。`0.28`版本开始,您可以直接通过Anchor开始使用`Solang`进行构建

截至撰写本文时,请使用以下命令安装Anchor,以确保与Solang版本0.3.1兼容
截至撰写本文时,请使用以下命令安装Anchor,以确保与Solang版本`0.3.1`兼容

```bash
cargo install --git https://github.com/coral-xyz/anchor anchor-cli --locked --force
```

4. Solang扩展适用于VSCode:如果您是Visual Studio Code(VSCode)的用户,建议安装[Solang扩展](https://marketplace.visualstudio.com/items?itemName=solang.solang)以辅助语法高亮显示。请记得禁用任何活动的Solidity扩展,以确保Solang扩展正常工作。
4. Solang扩展适用于VSCode:如果您是`Visual Studio Code(VSCode)`的用户,建议安装[Solang扩展](https://marketplace.visualstudio.com/items?itemName=solang.solang)以辅助语法高亮显示。请记得禁用任何活动的Solidity扩展,以确保Solang扩展正常工作。


## 创建一个新项目
Expand Down Expand Up @@ -113,7 +113,7 @@ EVM智能合约和Solana程序之间的一个重要区别在于它们如何存

起始测试文件可以在 `./tests` 目录中找到。该文件提供了一个与客户端交互的示例。

`Anchor`设置了 `provider``program` ,以帮助我们从客户端连接到合约。这是通过使用IDL文件来完成的,该文件描述了程序的公共接口,类似于EVM智能合约中使用的ABI文件。如果您运行 `anchor build`则会生成IDL文件,并且可以在 `./target/idl` 找到。
`Anchor`设置了 `provider``program` ,以帮助我们从客户端连接到合约。这是通过使用IDL文件来完成的,该文件描述了程序的公共接口,类似于EVM智能合约中使用的ABI文件。如果您运行 `anchor build`则会生成`IDL`文件,并且可以在 `./target/idl` 找到。

```ts
import * as anchor from "@coral-xyz/anchor"
Expand Down Expand Up @@ -171,7 +171,7 @@ const dataAccount = anchor.web3.Keypair.generate();
接下来,我们使用 `new` 指令来创建一个新的数据账户。这个指令对应于合约的 `constructor` 。新创建的数据账户将被初始化,用于存储合约中定义的状态变量。


在这里, `payer` 被指定为 `wallet.publicKey` ,并提供了我们计划创建的 `dataAccount` 的地址。生成的 `dataAccount` Keypair作为交易的附加签名者包含在其中,因为它被用于创建一个新的账户。基本上,这个操作验证了我们持有与我们正在创建的新账户地址相对应的私钥。
在这里, `payer` 被指定为 `wallet.publicKey` ,并提供了我们计划创建的 `dataAccount` 的地址。生成的 `dataAccount` `Keypair`作为交易的附加签名者包含在其中,因为它被用于创建一个新的账户。基本上,这个操作验证了我们持有与我们正在创建的新账户地址相对应的私钥。

```ts
// Client
Expand Down
19 changes: 12 additions & 7 deletions docs/Solana-Co-Learn/module1/wallet-usage/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,23 @@
Solana的钱包有很多,比如很有的Phantom钱包。但是这里我不在推荐使用Phantom,因为他对于开发者
来说,不是很友好。

在本地开发的时候不支持本地RPC地址,只能使用Solana官方的测试网,这样的话,开发者在本地开发的时候就不可以。这也是我推荐Backpack钱包的原因
在本地开发的时候不支持本地RPC地址,只能使用Solana官方的测试网,这样的话,开发者在本地开发的时候就不可以。这也是我推荐`Backpack`钱包的原因

## 下载Backpack钱包

下载地址:https://www.backpack.app/ 是这个。点击里面的Download,然后选择自己的浏览器插件。
下载地址:[`https://www.backpack.app/`](https://www.backpack.app/`) 是这个。点击里面的Download,然后选择自己的浏览器插件。

目前只支持Chrome和Brave, Arc浏览器。移动端还在开发。


## 创建账户

下载完之后这个就是登录界面,点击Create Account创建账户
下载完之后这个就是登录界面,点击`Create Account`创建账户

![](./backpack-create-account.png)


下面是Claim 账户的名字, 输入你自已要创建的账户名字,然后点击Claim Name。
下面是Claim 账户的名字, 输入你自已要创建的账户名字,然后点击`Claim Name`

![](./backpack-cliam-name.png)

Expand All @@ -37,7 +37,7 @@ Solana的钱包有很多,比如很有的Phantom钱包。但是这里我不在

## 设置自定义的RPC Endpoint

账户创建好了下面我们开始设置自定义的RPC Endpoint,点击右上角的设置按钮,然后选择Perference
账户创建好了下面我们开始设置自定义的`RPC Endpoint`,点击右上角的设置按钮,然后选择`Perference`

![](./backpack-setting.png)

Expand All @@ -51,6 +51,11 @@ Solana的钱包有很多,比如很有的Phantom钱包。但是这里我不在

![](./backpack-custom-rpc.png)

这里就是设置自定义rpc的地方,这里我们选择了localnet
这里就是设置自定义rpc的地方,这里我们选择了`localnet`

对于Custom,你可以自定以你的Rpc地址,除了官方提供的testnet或者mainbeta的地址,你可以去quikcnode或者helius申请你自己的rpc地址使用。
对于`Custom`,你可以自定以你的Rpc地址,除了官方提供的`testnet`或者`mainbeta`的地址,你可以去`quikcnode`或者`helius`申请你自己的rpc地址使用。

## Reference

- Quicknode
- helius
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ npm install @solana/wallet-adapter-base \
让我们来看看这些库吧!在您的工作区中设置一个新项目:

```bash
git clone https://github.com/RustyCab/solana-ping-frontend.git
git clone https://github.com/CreatorsDAO/solana-ping-frontend
cd solana-ping-frontend
git checkout starter
npm i
Expand Down

0 comments on commit 84d59bc

Please sign in to comment.