-
Notifications
You must be signed in to change notification settings - Fork 23
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
3,329 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Security Policy | ||
|
||
## Supported Versions | ||
|
||
Use this section to tell people about which versions of your project are | ||
currently being supported with security updates. | ||
|
||
| Version | Supported | | ||
| ------- | ------------------ | | ||
| 5.1.x | :white_check_mark: | | ||
| 5.0.x | :x: | | ||
| 4.0.x | :white_check_mark: | | ||
| < 4.0 | :x: | | ||
|
||
## Reporting a Vulnerability | ||
|
||
Use this section to tell people how to report a vulnerability. | ||
|
||
Tell them where to go, how often they can expect to get an update on a | ||
reported vulnerability, what to expect if the vulnerability is accepted or | ||
declined, etc. |
95 changes: 95 additions & 0 deletions
95
solana-development-course-zh/01-Introduction/module1-Introduction/start.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
## 欢迎来到 Solana 教程! | ||
|
||
这里是开发者学习Web3和区块链的最佳起点! | ||
|
||
## 什么是Web 3? | ||
|
||
在传统系统中,人们通过第三方平台进行相互交互: | ||
|
||
* 用户账户存储在像谷歌、X(前称Twitter)和Meta(Facebook、Instagram)这样的大型平台上。这些账户可能会被公司随意移除,账户中的物品也可能永久丢失。 | ||
|
||
* 存储价值的账户,如支付卡、银行账户和交易账户,由信用卡公司、货币转账机构和股票交易所这样的大型平台处理。这些公司通常会从平台上的每一笔交易中抽取一部分费用(大约1%到3%)。他们经常为了组织的利益而延缓交易结算。在某些情况下,转移的物品可能根本不属于接收者,而是代表接收者持有。 | ||
|
||
Web3是互联网的一次演进,允许人们直接进行交易: | ||
|
||
* 用户拥有自己的账户,由他们的钱包代表。 | ||
|
||
* 价值转移可以直接在用户之间发生。 | ||
|
||
* 代表货币、数字艺术、活动门票、房地产或其他物品的代币,完全由用户掌管。 | ||
|
||
Web3的常见用途包括: | ||
|
||
* 在线销售商品和服务,几乎零费用且即时结算。 | ||
|
||
* 销售数字或实体物品,确保每件物品都是真品,且原件与副本可区分。 | ||
|
||
* 即时全球支付,无需耗时耗资的“货币转账”公司。 | ||
|
||
## 什么是Solana? | ||
|
||
Solana是第一个可扩展的Layer 1区块链。 | ||
|
||
与比特币和以太坊等老平台相比,Solana具有: | ||
|
||
* 显著更快的速度 - 大多数交易在一两秒内完成。 | ||
|
||
* 极低的费用 - 交易费用(在老网络中称为“燃气费”)通常仅为$0.000025(是的,远低于一分钱),无论转移的价值多少。 | ||
|
||
* 高度去中心化,拥有任何权益证明(PoS)网络中最高的中本聪系数(Nakamoto coefficient,一种去中心化评分)。 | ||
|
||
由于老区块链的高成本和慢速度,许多在Solana上的常见用例只能在Solana上实现。 | ||
|
||
## 在这个课程中,您将学到什么? | ||
|
||
在本课程中,您将: | ||
|
||
* 创建允许人们使用Web3钱包登录的Web应用程序。 | ||
* 在人们之间转移代币(如USDC,一种代表美元的代币)。 学习将诸如Solana pay之类的工具集成到您现有的应用程序中。 | ||
* 构建一个实时运行在Solana区块链上的电影评论应用程序。 | ||
* 您将构建Web前端和后端(链上)程序及数据库。 | ||
* 铸造大规模NFT系列。 | ||
|
||
以及更多,随着新技术加入Solana生态系统,我们将会持续更新此课程,您会在这里找到后续的课程。 | ||
|
||
## 在开始之前我需要什么? | ||
|
||
您不需要之前的区块链经验就可以跟随这个课程! | ||
|
||
Linux、Mac或Windows电脑。Windows机器应安装Windows Terminal和WSL。 基础的JavaScript/TypeScript编程经验。我们还会使用一些Rust,但我们会随时解释Rust。 安装了node.js 18 安装了Rust 基本的命令行使用 | ||
|
||
## 这个课程是如何构建的? | ||
|
||
课程分为三个部分: | ||
|
||
1. dApp开发 - 构建与流行的链上Solana程序交互的Web和移动应用程序。这些涵盖了代币转移、铸造以及为任意程序创建客户端等内容。如果您想在应用程序中添加区块链支付、NFT、区块链溯源等,这是开始的最佳轨道。 | ||
|
||
2. 链上程序开发 - 创建在区块链上运行的自定义应用程序。如果您想制作新的金融或会计应用程序、使用来自Solana以外的数据链上,或使用区块链存储任意数据,那么这个轨道适合您。 | ||
|
||
3. 网络基础设施 - 涵盖运行Solana本身,作为RPC或验证者。 模块覆盖特定主题。这些分解为个别课程。 | ||
|
||
每节课开始时都会列出课程目标 - 即您将在课程中学到的内容。 | ||
|
||
然后有一个简短的“TL;DR”,这样您可以快速浏览,了解课程内容,并决定这节课是否适合您。 | ||
|
||
然后每节课分为三个部分: | ||
|
||
1. 正文 - 包括解释性文本、示例和代码片段。您无需跟随这里显示的任何示例进行编码。目标只是简单阅读并初步接触课程主题。 | ||
|
||
2. 实验 - 您绝对应该跟着做的实践项目。这是您第二次接触内容,也是您第一次深入并尝试做事的机会。 | ||
|
||
3. 挑战 - 另一个项目,只有几个简单的提示,您应该独立完成。 | ||
|
||
## 我如何有效使用这个课程? | ||
|
||
这里的课程非常有效,但每个人的背景和能力不同,无法全部概括。 | ||
|
||
考虑到这一点,这里有三个建议,帮助您最大限度地利用本课程: | ||
|
||
1. 诚实面对自己 - 这听起来可能有点模糊,但诚实面对自己对于掌握某个主题至关重要。阅读一件东西并想“是的,我懂了”很容易,但稍后你可能会意识到你实际上并没有懂。在学习每节课时都要诚实面对自己。如果需要,请不要犹豫重复部分课程,或者在课程措辞不适合您时进行外部研究。 | ||
|
||
2. 完成每个实验室和挑战 - 这支持第一点。当你让自己尝试做某事时,欺骗自己有多了解某件事是相当困难的。完成每个实验室和每个挑战,以测试你的水平,并根据需要重复它们。我们为所有内容提供解决方案代码,但请确保将其作为有用的资源而不是依赖。 | ||
|
||
3. 做到卓越 - 这听起来老套,但不要仅仅停留在实验和挑战要求你做的事情上。请你发挥创造力!拿起项目,让它们成为你自己的。超越它们。你练习得越多,就越擅长。 | ||
|
||
好的,那我们开始吧! |
182 changes: 182 additions & 0 deletions
182
...n-to-cryptography-and-Solana-clients/1-1-cryptography-and-the-solana-network.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
# 简介 | ||
|
||
* 密钥对是一对相匹配的公钥和私钥。 | ||
|
||
- 公钥用作指向Solana网络上账户的“地址”。公钥可以与任何人共享。 | ||
- 私钥用于验证对账户的控制权。顾名思义,您应该始终保密私钥。 | ||
|
||
* `@solana/web3.js` 提供了用于创建全新密钥对的辅助函数,或者使用现有的私钥构建密钥对。 | ||
|
||
# 正文 | ||
|
||
### 对称加密和非对称加密 | ||
|
||
「密码学」字面上是指隐藏信息的研究。我们常常会遇到两种主要类型的密码学: | ||
|
||
#### 对称加密 | ||
|
||
对称加密中,加密和解密使用同一个密钥。它有几百年的历史,从古埃及人到伊丽莎白一世女王都曾使用。 | ||
|
||
对称加密算法有很多种,目前常见的对称加密算法有AES和Chacha20。 | ||
|
||
#### 非对称加密 | ||
|
||
非对称加密,也称为「公钥密码学」,发展于20世纪70年代。在非对称加密中,参与者拥有一对密钥(或密钥对)。每个密钥对包括一个私钥和一个公钥。 | ||
|
||
非对称加密与对称加密的工作方式不同,用处也不同: | ||
|
||
- 加密:如果用公钥加密,只有同一密钥对的私钥才能读取它。 | ||
- 签名:如果用私钥加密,可以使用同一密钥对的公钥证明私钥持有者进行了签名。 | ||
|
||
* 您甚至可以使用非对称密码学来确定用于对称密码学的好密钥!这被称为密钥交换,您可以使用您的公钥和收件人的公钥来想出一个'会话'密钥。 | ||
|
||
对称加密算法也有很多种,目前最常见的非对称加密算法是ECC或RSA的变种。 | ||
|
||
非对称加密非常流行: | ||
|
||
- 您的银行卡内部有一个私钥,用于签署交易。 | ||
- 您的银行可以通过匹配的公钥确认您进行了交易。 | ||
- 网站在其证书中包含一个公钥,您的浏览器将使用此公钥加密发送到网页的数据(如个人信息、登录详情和信用卡号)。 | ||
- 网站拥有匹配的私钥,因此网站可以读取数据。 | ||
- 您的电子护照由发行国签署,以确保护照不被伪造。 | ||
- 电子护照闸门可以使用您的发行国的公钥来确认这一点。 | ||
- 您手机上的消息应用使用密钥交换来生成会话密钥。 | ||
|
||
总之,密码学无处不在。Solana以及其他区块链只是密码学的一种用途。 | ||
|
||
### Solana使用公钥作为地址。 | ||
|
||
![Solana wallet addresses](https://www.soldev.app/assets/wallet-addresses.svg) | ||
|
||
### 在Solana网络中的参与者 | ||
|
||
参与Solana网络的人至少拥有一个密钥对。在Solana中: | ||
|
||
- 公钥用作指向Solana网络上账户的“地址”。即使是人们易读的文件名 - 如`example.sol` - 也指向像`dDCQNnDmNbFVi8cQhKAgXhyhXeJ625tvwsunRyRc7c8`这样的地址。 | ||
- 私钥用于验证对该密钥对的控制权。如果您拥有某个地址的私钥,您就控制该地址内的代币。因此,正如「私钥」这个名字所提示的,您应该始终将私钥保密。 | ||
|
||
### 使用@solana/web3.js创建密钥对 | ||
|
||
您可以通过npm模块 `@solana/web3.js` 在浏览器或node.js中使用Solana区块链。按照您通常的方式设置项目,然后使用npm安装 `@solana/web3.js`: | ||
|
||
``` | ||
npm i @solana/web3.js | ||
``` | ||
|
||
我们将在本课程中逐步介绍 `web3.js` 的很多内容,但您也可以查看官方的[web3.js文档](https://docs.solana.com/developing/clients/javascript-reference)。 | ||
|
||
要发送代币、发送NFT或在Solana上读写数据,您需要自己的密钥对。要创建一个新的密钥对,请使用 `@solana/web3.js` 中的 `Keypair.generate()` 函数: | ||
|
||
``` | ||
import { Keypair } from "@solana/web3.js"; | ||
const keypair = Keypair.generate(); | ||
console.log(`公钥是: `, keypair.publicKey.toBase58()); | ||
console.log(`私钥是: `, keypair.secretKey); | ||
``` | ||
|
||
### ⚠️ 不要在源代码中包含私钥 | ||
|
||
由于可以从私钥重新生成密钥对,我们通常只存储私钥,并从私钥恢复密钥对。 | ||
|
||
此外,由于私钥对地址有控制权,我们不会在源代码中存储私钥。相反,我们: | ||
|
||
- 将私钥放在 `.env` 文件中 | ||
- 将 `.env` 添加到` .gitignore` 中,以便上传代码的时候可以不上传` .env` 文件。 | ||
|
||
### 加载现有的密钥对 | ||
|
||
如果您已经有一个想要使用的密钥对,您可以从文件系统或 ` .env` 文件中加载现有的私钥来创建Keypair。在node.js中,npm包 ` @solana-developers/node-helpers` 包括一些额外的函数: | ||
|
||
- 要使用 `.env` 文件,请使用 `getKeypairFromEnvironment()` | ||
- 要使用Solana CLI文件,请使用 `getKeypairFromFile()` | ||
|
||
``` | ||
import "dotenv/config"; | ||
import { getKeypairFromEnvironment } from "@solana-developers/node-helpers"; | ||
const keypair = getKeypairFromEnvironment("SECRET_KEY"); | ||
``` | ||
|
||
您现在知道如何制作和加载密钥对了!让我们做一些练习,实践一下我们刚才所学到的。 | ||
|
||
# 实验 | ||
|
||
### 安装 | ||
|
||
创建一个新目录,安装TypeScript, Solana web3.js 和 esrun: | ||
|
||
``` | ||
mkdir generate-keypair | ||
cd generate-keypair | ||
npm init -y | ||
npm install typescript @solana/web3.js esrun @solana-developers/node-helpers | ||
``` | ||
|
||
创建一个名为 `generate-keypair.ts` 的新文件: | ||
|
||
``` | ||
import { Keypair } from "@solana/web3.js"; | ||
const keypair = Keypair.generate(); | ||
console.log(`✅ Generated keypair!`) | ||
``` | ||
|
||
运行 `npx esrun generate-keypair.ts`。你应该会看到文本: | ||
|
||
``` | ||
✅ Generated keypair! | ||
``` | ||
|
||
每个Keypair都有一个publicKey和secretKey属性。更新文件: | ||
|
||
``` | ||
import { Keypair } from "@solana/web3.js"; | ||
const keypair = Keypair.generate(); | ||
console.log(`The public key is: `, keypair.publicKey.toBase58()); | ||
console.log(`The secret key is: `, keypair.secretKey); | ||
console.log(`✅ Finished!`); | ||
``` | ||
|
||
运行 `npx esrun generate-keypair.ts`。你应该会看到文本: | ||
|
||
``` | ||
The public key is: 764CksEAZvm7C1mg2uFmpeFvifxwgjqxj2bH6Ps7La4F | ||
The secret key is: Uint8Array(64) [ | ||
(a long series of numbers) | ||
] | ||
✅ Finished! | ||
``` | ||
|
||
### 从 .env 文件加载现有的密钥对 | ||
|
||
为了确保你的秘密密钥安全,我们推荐使用 .env 文件来注入秘密密钥: | ||
|
||
创建一个名为 `.env` 的新文件,内容为你之前制作的密钥: | ||
|
||
``` | ||
SECRET_KEY="[(a series of numbers)]" | ||
``` | ||
|
||
我们可以从环境中加载密钥对。更新 `generate-keypair.ts` 文件: | ||
|
||
``` | ||
import "dotenv/config" | ||
import { getKeypairFromEnvironment } from "@solana-developers/node-helpers"; | ||
const keypair = getKeypairFromEnvironment("SECRET_KEY"); | ||
console.log( | ||
`✅ Finished! We've loaded our secret key securely, using an env file!` | ||
); | ||
``` | ||
|
||
运行 `npx esrun generate-keypair.ts`。你应该会看到以下结果: | ||
|
||
``` | ||
✅ Finished! We've loaded our secret key securely, using an env file! | ||
``` | ||
|
||
我们已经学习了关于密钥对的知识,以及如何在Solana上安全地存储秘密密钥。在下一章节,我们将使用它们! |
Oops, something went wrong.