KryptoCamp — Day30~31 — 區塊鏈的後端 geth、合約優化

一般來說簡單的區塊鏈項目是不需要後端的,但是如果是要開發比較底層的技術比如說新的鏈就會需要了,目前唯一的主流就是 geth ,all in one solidity 在最後也花了一些篇幅介紹這個工具,今天就花點時間了解一下。

什麼是 geth?

Go-Ethereum,簡稱 Geth,為一個 Ethereum Protocal 同時也是一個 command line 工具。

geth 在做什麼?

  1. Geth會以區塊鏈節點的方式運行。
  2. Geth會找到其他區塊鏈節點並與其連接。
  3. Geth會在本地端打開一JavaScript RPC,讓我們可以以此和節點互動。
  4. 開始連接節點,下載(複製)區塊鏈上的資料。
  5. 區塊鏈(資料)會存在我們的本地端,並不存在任何的中央伺服器或者資料庫。

簡單來說,運行它後會在本地開啟一個區塊鏈的節點,而這個節點可以跟其他的區塊鏈節點溝通,可以想像你的本地成為了區塊鏈巨大帳本的其中一本的那種感覺。

geth 在同步資料時預設只同步1024筆交易。包含所有區塊的Block Header + Block Bodies。

關於合約的最佳化

所謂的最佳化是指,達到一樣的功能但是花費最少的 gas。值得注意的是,在礦工的邏輯上,他會優先執行 gas fee 較高的交易,也就是說如果交易付的手續費比較低,礦工就會偏好晚一點打包我們合約的交易。

決定 gas fee 一個很大的關鍵是在運算的複雜度上,但是同樣的複雜度也同樣有可能有價格的差別,這是因為在不同的時間點每一個單位的 gas 價格是不同的。

在交易前查看一下當前 gas 是個好習慣。

能在鏈外完成的計算就在鏈外完成,不需要重複利用的 log 可以用 event 發出,gas fee 的節約可以從幾個地方著手:

Time Complexity Level

能不遍歷就不遍歷,尋找提早結束運算的可能性。進行各種運算時先把值賦給 local variable ,避免多次改寫 stat variable 浪費 gas。當需要使用 ||&& 時,想一下是否有提早結束運算的機會。

Contract Level

撰寫智能合約時我們常常引入 open zeppelin 的合約,但是如果當中有不需要的功能就會白白浪費 gas,拔除自己不需要的變數,或是將可模組化的部分寫入 library 減少需要重複部署的部分。

--

--

Galen-Ting
廢物到工程師的一大步

學程式不無聊,無聊就不學程式,皮皮的學習好過死死的學習。