如何学习 Web3
在本文中,我将总结您可以采取的步骤来学习 Web3。
从哪儿开始?
当我们想要开始新事物时,我们需要一些指导,以免在一开始就卡住。
但我们都是不同的,我们有不同的学习方式。
这篇文章基于我学习 Web3 的非常个人的经验。
路线图
我不喜欢路线图!但是至少阅读一个可以帮助我们了解我们的期望并检查我们是否遗漏了什么。
不要将路线图作为圣经来信任并 100% 盲目地遵循,但如果你走在正确的轨道上,它可以作为一个提醒。
有很多路线图,我正在制定一个。
现在我觉得推荐以下一个:
完成 Web3.0 和 Solidity 发展路线图 2022)
介绍文章
第一个内容怎么样?
我不建议直接跳到代码中,而是握住我们的手一会儿,然后从大致了解什么是 Web3 开始。
Nader Dabit在freecodecamp上发表的这篇文章是一个很好的开始。
区块链基础
从基本概念开始,您就不会真的错了。
我将为它们中的每一个链接特定的资源,但不要将其作为您必须观看才能理解概念的唯一资源。慢慢来,因为所有时间都花在这里 ios 时间节省了!
请记住,基础是基础,所以不要跳过这部分。
Web1、Web2、Web3:关于 web1、Web2 和 Web3 之间差异的好文章
什么是区块链:了解区块链基础知识的启发性视频。
分布式账本:它是复制、共享和同步的数字数据的共识,这些数据在地理上分布在许多站点、国家或机构中。
加密货币基础知识:介绍加密货币的介绍。
智能合约:在 4 分钟的视频中简单解释了智能合约。
加密钱包:加密钱包介绍,与 Web3 中的身份验证概念相关。
区块浏览器:区块浏览器是一种在线工具,可让您搜索有关区块链的实时和历史信息,包括与区块、交易、地址等相关的数据。
Blockchain Oracles:区块链 oracle 是一种将智能合约与外部世界连接起来的服务,可以从(也可以)向世界提供信息。
NFT 介绍:4 分钟解释 NFT。
DAO 简介:DAO,即去中心化自治组织,是一家通过区块链上的代码运行的公司。
Dapp 简介:dApp 或去中心化应用程序是使用区块链技术运行的应用程序。
选择区块链
每个区块链都是一个生态系统,各有利弊。
选择一个区块链来理解概念并应用它们,比如决定使用 Node.js 构建一些 API。
我建议选择以太坊有很多原因,主要是网上有更多关于它的资料。
以太坊概念
选择区块链后,您就可以开始学习特定区块链的基础知识。一些概念在区块链之间重叠,但它们中的每一个都可能略有不同。
对于以太坊:
账户:账户是具有以太 (ETH) 余额的实体,可以在以太坊上发送交易。帐户可以由用户控制或部署为智能合约。
交易:交易是来自账户的加密签名指令。
块:块是批量交易,其中包含链中前一个块的哈希值。
以太坊虚拟机 (EVM):EVM 允许开发人员创建以太坊智能合约。
Gas:Gas 对以太坊网络至关重要。它是让它运行的燃料,就像汽车需要汽油才能运行一样。
节点和客户端:以太坊是一个分布式计算机网络(称为节点),运行软件可以验证块和交易数据。该软件应用程序称为客户端,必须在您的计算机上运行才能将其变成以太坊节点。
网络:网络是您可以为开发、测试或生产用例访问的不同以太坊环境。
共识算法:共识机制允许分布式系统协同工作并保持安全。
以太坊概念(高级)
如果您想更深入地研究,可以查看以下一些文章和概念:
以太坊白皮书:以太坊的介绍性文件,于 2013 年发布之前发布。
以太坊三难困境:
EndGame (Vitalik Buterin):Vitalik Buterin 对以太坊合理路线图的愿景。
以太坊黄皮书:以太坊协议的正式定义。
信标链:信标链是一个账户分类账,用于管理和协调利益相关者网络。
侧链:侧链是一个独立的区块链,独立于以太坊运行,并通过双向桥连接到以太坊主网。
合并:合并是以太坊历史上最重要的升级。进行了广泛的测试和漏洞奖励,以确保安全过渡到股权证明。
这些是可选的!
选择语言
Solidity:适合 JavaScript/C++/Python 开发人员。
Vyper:适合 Python 开发人员。
Rust:如果你选择 Solana 作为区块链,这是一个不错的选择。
我建议使用 Solidity,因为它是最受欢迎的。
Solidity(快速介绍)
它是一种用于实现智能合约的面向对象的高级语言。
它是静态类型的。
它是一种花括号语言,旨在针对以太坊虚拟机。
它支持:继承、库和复杂的用户定义类型。
这就是 Solidity 文件(扩展名:.sol)的样子
// SPDX-License-Identifier: MIT
pragmasolidity^0.8.13;contractHelloWorld{stringpublicgreet="Hello World!";}
在接下来的部分中,您可以使用一些免费资源来学习和开始使用 solidity 编程语言。
坚固的视频
一些很好的 YouTube 频道,可以了解更多关于 Solidity 的信息:
使用 JavaScript 学习区块链、Solidity 和全栈 Web3 开发——32 小时课程:Patrick Collins Javascript 版本 on freeCodecamp
Solidity、区块链和智能合约课程——初学者到专家 Python 教程:Patrick Collins Python 版本
Dapp 大学:Gregory(Dapp 大学)
Smart Contract Programmer:一个很好的频道,视频开门见山。
实体工具
Remix IDE : 一个很好的入门,无需设置本地环境)
Solidity Docs : Solidity 官方文档
Solidity备忘单
Cryptozombies:一个不错的在线入门教程。
使用框架
一旦掌握了基础知识,您就可以深入使用这些工具并在本地环境中工作。
Metamask:MetaMask 是一种用于与以太坊区块链交互的软件加密货币钱包。
Vs Code Solidity Extension:VS Code 扩展,与 Nethereum 代码生成器集成以创建合约集成定义。
Truffle:Truffle 是用于开发智能合约的开发环境、资产管道和测试框架。
Hardhat:Hardhat 是一个以太坊开发环境。编译您的合约并在开发网络上运行它们。
Brownie : Brownie 是一个基于 Python 的智能合约开发和测试框架。
Foundry:Foundry 是一个快速、便携和模块化的工具包,用于以太坊应用程序开发,用 Rust 编写。
将 Dapp 连接到前端
你是前端开发人员吗?好的!
这一次,您无需学习新框架,只需使用一个库即可与区块链交互!
您可以使用任何前端框架(React、Vue、Angular、Svelte...)
使用:
Web3.js:web3.js 是一组库,允许您使用 HTTP、IPC 或 WebSocket 与本地或远程以太坊节点进行交互。
Ether.js:ethers.js 库旨在成为一个完整而紧凑的库,用于与以太坊区块链及其生态系统进行交互。
去中心化存储
以下是一些可用于将数据存储在区块链(类似于数据库)上的存储示例。
IPFS:星际文件系统是一种协议、超媒体和文件共享对等网络,用于在分布式文件系统中存储和共享数据。
Arweave:Arweave 是一种数据存储协议。它建立在一种称为“blockweave”的技术之上。
FileCoin:Filecoin 是一种开源的公共加密货币和数字支付系统,旨在成为基于区块链的协作数字存储和数据检索方法。它建立在 IPFS 之上,并允许租用未使用的硬盘空间。
它们是持有一部分整体数据的用户运营商的 p2p 网络。
中级工具
他们中的大多数并不复杂。老实说,它们简化了过程,但最好在了解了基础知识后再发现它们。
测试工具:Waffle、Ganache
打开飞艇
WalletConnect:WalletConnect 是一种开源协议,用于通过二维码扫描或深度链接将去中心化应用程序连接到移动钱包。
Chainlink:Chainlink 是一个去中心化的预言机网络,提供防篡改的输入、输出和计算,以支持任何区块链上的高级智能合约。
TheGraph:The Graph 是一种索引协议,用于组织区块链数据并使其易于使用 GraphQL 访问。
SDK
在了解什么是 Dapp 并做了一些示例之后,您可以决定是否需要一些支持,而不是自己编写所有内容。
这里有 3 个你可以检查的好东西:
Alchemy SDK:将您的 Dapp 连接到区块链。
import { Alchemy } from 'alchemy-sdk';// Using default settings - pass in a settings object to specify your API key and network
const alchemy = new Alchemy();// Access standard Ethers.js JSON-RPC node request
alchemy.core.getBlockNumber().then(console.log);// Access Alchemy Enhanced API requests
alchemy.core.getTokenBalances('0x3f5CE5FBFe3E9af3971dD833D26bA9b5C936f0bE').then(console.log);// Access the Alchemy NFT API
alchemy.nft.getNftsForOwner('vitalik.eth').then(console.log);// Access WebSockets and Alchemy-specific WS methods
alchemy.ws.on({method: 'alchemy_pendingTransactions'},res => console.log(res)
);
thirdweb TypeScript SDK:一个支持编写智能合约的SDK。这是打字稿版本
// my_script.js
import { ThirdwebSDK } from "@thirdweb-dev/sdk";// instantiate the SDK in read-only mode (our example is running on `polygon` here)
// all major chains and testnets are supported (e.g. `mainnet`, `rinkeby`, `goerli`, 'polygon', 'mumbai', etc.)
const sdk = new ThirdwebSDK("polygon");// access your deployed contracts
const nftDrop = sdk.getNFTDrop("0x...");
const marketplace = sdk.getMarketplace("0x...");// Read from your contracts
const claimedNFTs = await nftDrop.getAllClaimed();
const listings = await marketplace.getActiveListings();
Moralis SDK:如何使用 Moralis SDK 指南连接到 Moralis 服务器。
这是初始化 Moralis SDK 的方法
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById("root")
);
构建项目
建设项目!我留下了几个地方,您可以从中获得构建项目的灵感,但在 YouTube 上还有更多
道德项目
炼金术 - 通往 Web3 的道路
建立在公共
公开建造!
不是 Web3 特有的东西,但如果你在公共场合构建,对你有一些好处:
您可以更好地理解这些概念。
你有观众。
您与具有相同兴趣的人建立联系。
加入社区!
最后但同样重要的是,加入社区会非常有用。
相关文章:
如何学习 Web3
在本文中,我将总结您可以采取的步骤来学习 Web3。从哪儿开始?当我们想要开始新事物时,我们需要一些指导,以免在一开始就卡住。但我们都是不同的,我们有不同的学习方式。这篇文章基于我学习 Web3 的非常个人的经验。路线…...
大数据框架之Hadoop:MapReduce(一)MapReduce概述
1.1MapReduce定义 MapReduce是一个分布式计算框架,用于编写批处理应用程序,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一…...
一文搞定python语法进阶
前言前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构、循环结构以及函数这些具体的框架,还学习了列表、元组、字典、字符串这些Python中特有的数据结构,还用这些语法完成了一个简单的名片管理系统。下…...
2019蓝桥杯真题数列求值(填空题) C语言/C++
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 给定数列 1,1,1,3,5,9,17,⋯,从第 4 项开始,每项都是前 3 项的和。 求第 20190324 项的最后 4 位数字。 运行限制 最大运行时间:…...
spring中@Autowire和@Resource的区别在哪里?
介绍今天使用Idea写代码的时候,看到之前的项目中显示有warning的提示,去看了下,是如下代码?Autowire private JdbcTemplate jdbcTemplate;提示的警告信息Field injection is not recommended Inspection info: Spring Team recommends: &quo…...
算法训练营DAY54|583. 两个字符串的删除操作、72. 编辑距离
583. 两个字符串的删除操作 - 力扣(LeetCode)https://leetcode.cn/problems/delete-operation-for-two-strings/这道题也是对于编辑距离的铺垫题目,是可以操作两个字符串的删除,使得两个字符串的字符完全相同,这道题可…...
【Ctfshow_Web】信息收集和爆破
0x00 信息收集 web1 直接查看源码 web2 查看不了源码,抓包即可看到(JS拦截了F12) web3 抓包,发送repeater,在响应包中有Flag字段 web4 题目提示后台地址在robots,访问/robots.txt看到Disallow: /fl…...
基于机器学习的推荐算法研究与实现
摘要随着互联网的普及,人们可以通过搜索引擎、社交网络等方式获取大量的信息资源。但是,面对如此之多的信息,人们往往会感到迷失和困惑,无法快速准确地找到自己需要的信息。在这种情况下,推荐算法的出现为我们提供了一…...
(二十四)ATP应用测试平台——springboot集成fastdfs上传与下载功能
前言 本节内容我们主要介绍一下如何在springboot项目中集成fastdfs组件,实现文件的上传与下载。关于fastdfs服务中间键的安装过程,本节内容不做介绍。fastdfs是一个轻量级的分布式文件系统,也是我们文件存储中常常使用的组件之一,…...
linux好用命令+vs快捷键
linux好用命令 功能指令跳转到vim界面的最后一行shift键g复制当前路径下所有文件和目录(加-r才行)到target目录cp -r * /home/target删除指定文件rm -rf test.txt文件重命名(-i交互式提示)mv -i file1 file2移动某个内容…...
Git 构建分布式版本控制系统
版本控制概念Gitlab部署1.版本控制概念 1.1分类 (一)1 本地版本控制系统(传统模式) (二)2 集中化的版本控制系统 CVS、Subversion(SVN) (三)3 分布式…...
Day891.一主多从的切换正确性 -MySQL实战
一主多从的切换正确性 Hi,我是阿昌,今天学习记录的是关于一主多从的切换正确性的内容。 在切换任务的时候,要先主动跳过这些错误,通过主动跳过一个事务或者直接设置跳过指定的错误,用GTID解决找同步位点的问题 大多…...
【论文笔记】图像修复Learning Joint Spatial-Temporal Transformations for Video Inpainting
论文地址:https://arxiv.org/abs/2007.10247 源码地址:GitHub - researchmm/STTN: [ECCV2020] STTN: Learning Joint Spatial-Temporal Transformations for Video Inpainting 一、项目介绍 当下SITA的方法大多采用注意模型,通过搜索参考帧…...
代码随想录算法训练营第二天 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II、总结
打卡第二天,认真做了两道题目,顶不住了好困,明天早上练完车回来再重新看看。 今日任务 第一章数组 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II 977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每…...
Python pickle模块:实现Python对象的持久化存储
Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。值得一提的是,pickle 是 python 语言的一个标准模…...
【C++】C/C++内存管理
文章目录1. C/C内存分布2. C语言当中的动态内存管理3. C 内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型4. operator new 和operator delete 函数5. new和delete的实现原理5.1 内置类型5.2 自定义类型6. 定位new表达式(placement-new)7. 常见面试题7.1 …...
【测试】自动化测试02
努力经营当下,直至未来明朗! 文章目录前言 回顾 预告一、常见的元素操作1. 输入文本sendKeys()2. 点击click3. 提交submit(通过回车键提交)4. 清除clear5. 获取文本getText()6. 获取属性对应的值getAttribute()7. 查看title和ur…...
Python空间分析| 02 利用Python计算空间局部自相关(LISA)
局部空间自相关 import esda import numpy as np import pandas as pd import libpysal as lps import geopandas as gpd import contextily as ctx import matplotlib.pyplot as plt from geopandas import GeoDataFrame from shapely.geometry import Point from pylab im…...
idea快捷编码:生成for循环、主函数、判空非空、生成单例方法、输出;自定义快捷表达式
前言 idea可根据输入的简单表达式进行识别,快速生成语句 常用的快捷编码:生成for循环、主函数、判空非空、生成单例方法、输出 自定义快捷表达式 博客地址:芒果橙的个人博客 【http://mangocheng.com】 一、idea默认的快捷表达式查看 Editor…...
【Spring】@Value注入配置文件 application.yml 中的值失败怎么办
本期目录一、 问题背景二、 问题原因三、 解决方法一、 问题背景 今天碰到的问题是用 Value 注解无法注入配置文件 application.yml 中的配置值。 检查过该类已经交给 Spring 容器管理了,即已经在类上加了 Configuration 和 ConfigurationProperties(prefix &quo…...
CleanMyMac清理工具软件功能优势介绍
CleanMyMac更新最新版本x4.12,完美适配新版系统macOS10.14,拥有全新的界面。CleanMyMac可以让您安全、智能地扫描和清理整个系统,删除大型未使用的文件,减少iPod库的大小,最精确的应用程序卸载,卸载不必要的…...
【面试题】对JS中的事件冒泡、事件捕获、事件委托的理解
大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。Dom标准事件流的触发的先…...
SAP 理解合并会计报表
随着企业集团的发展,集团内部会出现越来越多的公司;复杂的公司结构和复杂的集团内业务,使得集团内部管理困难重重,信息渠道严重失灵。除了内部管理的需要,企业还有义务向相关方提供详细的和及时的信息。ERP中的合并会计…...
Ubuntu 命令常用命令——定时启动程序
crontab -e 语法 crontab[ -u user ] file或 crontab[ -u user ] { -l | -r | -e }说明: crontab是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。 -U Lser 是指设定指定user的时程表,这个前提是你必…...
笔试题(十三):走迷宫
# 描述 # 定义一个二维数组 N*M ,如 5 5 数组下所示: # int maze[5][5] { # 0, 1, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 1, 0,}; # 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路&#…...
Gradle相关的知识学习
这里有一套博客文章写的比较通俗易懂:https://www.jianshu.com/p/8e1ddd19083a...
SpringMVC的工作原理
SpringMVC的工作原理流程图 SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截…...
问卷数据分析流程
文章目录一、数据合并1. 读取数据2. 数据预览二、数据清洗1. 检验ID是否重复,剔除ID重复项2. 剔除填写时间小于xx分钟的值3.处理 量表题 一直选一个选项的问题三、数据清洗1.1 将问卷单选题的选项code解码,还原成原来的选项1.2 自动获取单选题旧的选项列…...
【观察】Solidigm P44 Pro SSD评测:原厂品质+软硬兼施=性能怪兽
众所周知,目前SSD(固态硬盘)已取代HDD(机械硬盘)成为电脑中常见的存储设备,特别是在技术创新的持续推动下,如今SSD的速度和效率都在不断地提高,从SATA2 3GB发展到SATA3 6GBÿ…...
String对象的创建和比较
String类的概述 String类:代表字符串。 Java 程序中的所有字符串字面值(如 “abc” )都作 为此类的实例实现。 String是JDK中内置的一个类:java.lang.string 。 String表示字符串类型,属于引用数据类型,不…...
苏州网站建设介绍/在线刷seo
.nii: Imgs niftiread(\Training\img\img0001.nii\tmp-5054-4218953600.nii); .img hcube hypercube(D:\XiongAn.img); 二者都来自Image Processing Toolbox 包...
广元如何做百度的网站/鸡西seo
Date和Calendar类 作者:邹爱红,撰写时间:2019年04月28日 Date方法有 before测试此日期是否在指定日期之前。 after测试此日期是否在指定日期之后。 compareTo比较两个日期的顺序。 因为Date方法过时,历史悠久,只有…...
扶贫工作网站怎么做/软件开发交易平台
最近经常会有人问起Citrix UPM如何设定,写了一个入门的手册,欢迎拍砖。 PoC手册 - Lab 13 User Profile Management 设定参考 1.0 https://citrix.sharefile.com/d-sdb2f307914842b38 本文转自sesame.qian 51CTO博客,原文链接:h…...
工艺品网站建设开发/可以搜索国外网站的搜索引擎
2019独角兽企业重金招聘Python工程师标准>>> Spring事务的传播属性(Propagation): REQUIRED:支持事务,如果当前线程已存在事务,按当前事务执行,没有当前事务会创建一个事务继续执行线…...
wordpress 撰写设置/seo搜索引擎优化排名哪家更专业
getattr()从名字上看获取属性值,若属性存在,返回属性值,若属性不存在,则报错,具体的用法如下: class Person():age 14 Tom Person() print(getattr(Tom,age))#14 print(getattr(Tom,name))#因为name属性…...
ks免费刷粉网站推广低价/百度推广托管
http://www.cnblogs.com/Showshare/p/director-chinese-tutorial.html转载于:https://www.cnblogs.com/chris-oil/p/5879647.html...