banner
leaf

leaf

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

技能彙總

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

懶了等

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