banner
leaf

leaf

It is better to manage the army than to manage the people. And the enemy.

技能汇总

image

区块链的前置知识点,包括区块链起源、钱包地址、比特币、以太坊等基础概念;进而再了解 DAPP 项目开发与传统项目开发的异同;最后再介绍一下基础的开发工具,例如:remix、rpc 等,从而为正式学习打好基础。

App 与 Dapp 的架构异同

互联发展了 20 多年,各种架构已经非常成熟了,移动端兴起之后 App 加入,其架构也没有太大变化;

但是相较于 Dapp 的架构,一切却有天壤之别,而这其中与其说是技术的变革,不如说是思维方式的变革。

另补充,如果你细心观察,会发现主流的 dapp 一般不称自己为 app,而是称为:protocol(协议),如:aave、compound 它们称自己为借贷协议,原因是:app 是封闭的,而协议则是可以集成拓展的。
App 架构

B/S 或 C/S 的架构大体如此,从前端到后台,从机房到云原生,技术在迭代,效率在提高,一切越来越丝滑。底层的系统大致分为:从 Unix、Linux、Dos、MacOs、Windows、安卓、IOS 等等。

image

去中心化应用的架构却与 App 完全不同,因为没有专门的后台,它的区块链网络就是底层系统:如以太坊网络、BSC 网络等。

一个最简单的 Dapp 应用可以直接描述如下,我们称为:V1 版本架构

image

V1:我们可以看到,此时浏览器多了一个钱包模块,钱包是打开区块链的身份钥匙🔑,整个区块链上世界都是建立在密码学之上的(非对称加密,不懂也罢),而图中蓝色部分就是区块链网络,我们的程序就运行在其中,它既是后端服务,也是数据库。我们的前端直接与区块链网络进行交互,包括:

读数据(读取区块链账本数据),免费的
写数据(向区块链网络提交数据,永久保存,此时需要矿工打包执行),付费的(这点记住即可,后续语言学习中,陆续会讲解)

V2:随着区块链网络生态的发展,人们渐渐发现了优化空间,即我们可以将读操作预先存储到一个服务器中,然后前端直接从中获取数据,这既可以保证系统安全,又可以提高效率,因此 subgraph(捕捉链上事件,链下存储,支持逻辑处理)这个基建得到飞速发展,图中橘黄色部分。我们称之为:V2 版本架构

image

V3:当然,如果业务过于复杂,与链上合约交互的部分,我们可以独立封装出来,让前端专注于展示,合约专注于逻辑,所以引入了 SDK,这部分专门处理和链上合约打交道的所有逻辑,并做相应的业务处理,时刻准备喂给前端,此时我们称为:V3 版本架构

image

V4:再后来,区块链存储项目也陆续诞生,其中最为人知的便是:ipfs,它是一个致力于大文件存储的项目,最近很火的 nft 项目中,所有的图片都是要上传到 ipfs 上,从而节约以太坊网络费用,所以此时的设计更改如下,我们称之为:V4 版本架构

image

区块链基建项目的发展给系统设计带来一些灵活性, 从 V1 到 V4 中,没有最好的设计,只有最合理的设计,架构设计可以带来合理的分工,提供效率。

但只有符合业务场景的设计才有意义,我们作为开发者,千万不要为了酷炫而堆砌技术,造成过度设计,这往往只能满足开发者的虚荣心,而随之带来的却是低效和高成本,我们在开发过程中要抵制住诱惑,尽量选择最优解

web3 的技术栈并不复杂,传统的互联网后端技术对于 web3 开发是非必须的,而是作为可选项,你需要掌握:

  1. 区块链基本知识:地址、token、非对称加密、哈希、共识;

  2. Solidity:编写智能合约,这是整个 dapp 最核心部分;

  3. nodejs:这部分必须手到擒来,因为框架、单测、脚本等都是使用 js 来操作的(js 是最主流的,python、java 等也有);

  4. web3 sdk:主流的 web3 库为 web3.js 或 ethers.js,所有与链上交互的操作都是通过这两个库进行的;

  5. Subgraph: 这是一个三方基建服务,可以在链下对事件进行捕捉(扫链、计算、存储 postgres),从而对进行数据整合,被前端调用,快速返回数据,极大的方便了开发者。

  6. 前端:react(大项目使用,知名协议原生支持的库更全面)、vue

  7. 后端可选项):机器人、周期性调用合约、监听扫链(钱包)、其他需求

image

最小技术栈:solidity、nodejs、web3、subgraph、前端。(默认你是开发者,linux 等就不说了)

这几部分是写 dapp 的最小技术栈。掌握了这些技能,读写 dapp 的基本功就具备了,但是这还远远不够,掌握了技术才刚刚开始,具体细分业务才是我们更加需要关注的重点,业务才会让你成为细分领域专家,技术永远只搬砖的份儿,对于这部分我们后续专门讲解,不要着急。

image

团队构成

dapp 开发只需要很小的团队,一般 4~5 个人就足够了,具体分工:

Contract(1~2)
Subgraph(1)
Sdk(1)(Optional)
Frontend(1~2)(多)
QA(会代码)

前端需要多一点人,因为往往合约写半天,前端需要写一周,这就是爱吧。

一定要重视 QA 的存在,而且不仅仅要在页面上端对端测试,也要直接对合约的接口进行逐个测试,这才能最大限度保证安全。
开发流程

需求分析 -> 开发 -> 联调 -> 测试网测试 -> 主网测试 -> 合约审计 -> 上线 -> 合约升级
设计原则

相比于高效率更注重确定性(不可篡改)
    数据与逻辑分离,方便升级
代码开源,数据完全公开(透明)
    拒绝链上存储任何敏感信息(包括修饰为private的字段)
    逻辑清晰,做好权限控制
    单元测试
随时准备应对攻击(安全性)
    总假设合约是被攻击成功的,有补救措施(紧急暂停、储备金)
    不重复造车轮子,使用经过检验的代码(类似于加密算法)
交互付费(写数据时)
    非必要的数据不要上链(on-chain vs off-chain)

掌握好基本的工具链是万里长征第一步,web3 世界瞬息万变,业务层出不穷,但掌握技术永远是最重要的一环,加油,动起来吧!

solidity 岗位要求#

仅供参考。初级:语法、中高级:语法 + 协议、专家:语法 + 协议 + 上下游技术栈

初级#

区块链生态研发工程师

岗位职责:
区块链生态开发工具的设计、研发、移植等工作;
区块链生态应用的设计、研发、移植等工作;
构建DAPP案例作为生产环境代码参考;
优化区块链网络的开发体验;
跟进区块链生态技术的最新进展;

岗位要求:
本科及以上学历,计算机相关专业;
有去中心化应用或者智能合约开发经验;
熟悉比特币、以太坊等主流区块链运行基本原理;
学习能力强,拥有优秀的逻辑思维能力,优秀的分析和解决问题能力;
良好的团队合作精神,敢于接受挑战,追求卓越;

中高级:#

如何成为一名合格的智能合约高级工程师:
1、熟悉 Solidity 语言,能使用 hardhat 完成智能合约的自动化测试、优化、部署、交互和 SDK 封装。
2、熟悉 Openzipplin 的所有库文件,能够完成可升级合约的部署和升级。
3、熟悉市面上主流的智能合约项目的实现:dex、lend、skating、oracle、bridge(每种至少两个)
4、熟悉内联汇编,清楚智能合约执行过程的 GAS 消耗,能对智能合约做最大程度的 GAS 优化。
5、熟悉主流的 EIP 标准,跟进 EIP 提案的进度,能撰写新提案的分析。
6、熟悉 Solidity 各个版本之间的区别,能跟进 Solidity 版本更新。
7、熟悉 Solidity 编译成字节码的步骤,能使用字节码反推出智能合约的执行步骤。
8、熟悉智能合约在 EVM 上执行的原理,能对区块链做 EVM 兼容。
9、熟悉其他主流的智能合约语言和机制(比如 rust 和 move)。

专家级#

你的责任是什么?
1.实施基于EVM的智能合约
2.审查基于EVM的智能合约并审计安全问题
3.支持前端开发人员构建和维护调用智能合约的Web应用程序
4.部署和维护现有的智能合约
5.管理用于部署和操作智能合约的钱包
6.主动提出改进我们产品和内部流程的建议

有什么要求?
1.您是智能合约和Solity方面的专家
2.您对EVM有深刻的理解,并了解智能合约到操作码级别
3.您熟悉至少一个以太坊节点实现的源代码
4.您对JavaScript基础知识、现代工具和生态系统有深刻的了解
5.您精通使用web3.js和ethers.js库
6.你有一些前端开发知识,对React有一些了解

有什么好吃的呢?
1.您对区块链技术和去中心化的未来充满热情
2.您正在为开源社区做出贡献
3.你考虑过并感到舒适,或者有在创业环境中工作的经验

专家#

您是:
●拥有2年以上在去中心化金融领域构建卓越产品的经验
●深入了解去中心化金融、去中心化协议、DAO、加密货币和区块链以及EVM
●具有web3框架以及与以太坊节点和服务(Geth、hard的接口,炼金术,Inoura,温柔等)的经验
●在以太坊部署复杂系统的经验
●快速学习和独立
●能够高效地远程工作和通信

很高兴拥有
●计算机科学、数学或工程专业毕业
●具有使用智能合约约束实现复杂数学的经验

您将:
●参与整个开发生命周期,专注于设计、编码和调试
●构建可重用的代码和库以供将来使用
●优化应用程序的性能和可扩展性
●实施安全和数据访问
●为不同客户端提供干净的API

三方节点:https://dashboard.alchemy.com/apps(仅限于 Dapp 使用)
三方节点:https://infura.io/(仅限于 Dapp 使用)
官方节点:https://rpc.info/(可用于 graphnode 同步数据)
其他 rpc 节点获取:https://cointool.app/rpcServer/eth
bsc 测试网 rpc:https://chainlist.org/chain/97

image

以太坊架构#

image

solidity 基础#

Ascii(便于查询)

image

懒了等

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。