當前位置:首頁 » 以太坊知識 » 從0開始學以太坊

從0開始學以太坊

發布時間: 2023-12-21 04:47:02

① 【深度知識】以太坊數據序列化RLP編碼/解碼原理

RLP(Recursive Length Prefix),中文翻譯過來叫遞歸長度前綴編碼,它是以太坊序列化所採用的編碼方式。RLP主要用於以太坊中數據的網路傳輸和持久化存儲。

對象序列化方法有很多種,常見的像JSON編碼,但是JSON有個明顯的缺點:編碼結果比較大。例如有如下的結構:

變數s序列化的結果是{"name":"icattlecoder","sex":"male"},字元串長度35,實際有效數據是icattlecoder 和male,共計16個位元組,我們可以看到JSON的序列化時引入了太多的冗餘信息。假設以太坊採用JSON來序列化,那麼本來50GB的區塊鏈可能現在就要100GB,當然實際沒這么簡單。

所以,以太坊需要設計一種結果更小的編碼方法。

RLP編碼的定義只處理兩類數據:一類是字元串(例如位元組數組),一類是列表。字元串指的是一串二進制數據,列表是一個嵌套遞歸的結構,裡面可以包含字元串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一個復雜的列表。其他類型的數據需要轉成以上的兩類,轉換的規則不是RLP編碼定義的,可以根據自己的規則轉換,例如struct可以轉成列表,int可以轉成二進制(屬於字元串一類),以太坊中整數都以大端形式存儲。

從RLP編碼的名字可以看出它的特點:一個是遞歸,被編碼的數據是遞歸的結構,編碼演算法也是遞歸進行處理的;二是長度前綴,也就是RLP編碼都帶有一個前綴,這個前綴是跟被編碼數據的長度相關的,從下面的編碼規則中可以看出這一點。

對於值在[0, 127]之間的單個位元組,其編碼是其本身。

例1:a的編碼是97。

如果byte數組長度l <= 55,編碼的結果是數組本身,再加上128+l作為前綴。

例2:空字元串編碼是128,即128 = 128 + 0。

例3:abc編碼結果是131 97 98 99,其中131=128+len("abc"),97 98 99依次是a b c。

如果數組長度大於55, 編碼結果第一個是183加數組長度的編碼的長度,然後是數組長度的本身的編碼,最後是byte數組的編碼。

請把上面的規則多讀幾篇,特別是數組長度的編碼的長度。

例4:編碼下面這段字元串:

The length of this sentence is more than 55 bytes, I know it because I pre-designed it
這段字元串共86個位元組,而86的編碼只需要一個位元組,那就是它自己,因此,編碼的結果如下:

184 86 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前三個位元組的計算方式如下:

184 = 183 + 1,因為數組長度86編碼後僅佔用一個位元組。
86即數組長度86
84是T的編碼
例5:編碼一個重復1024次"a"的字元串,其結果為:185 4 0 97 97 97 97 97 97 ...。
1024按 big endian編碼為004 0,省略掉前面的零,長度為2,因此185 = 183 + 2。

規則1~3定義了byte數組的編碼方案,下面介紹列表的編碼規則。在此之前,我們先定義列表長度是指子列表編碼後的長度之和。

如果列表長度小於55,編碼結果第一位是192加列表長度的編碼的長度,然後依次連接各子列表的編碼。

注意規則4本身是遞歸定義的。
例6:["abc", "def"]的編碼結果是200 131 97 98 99 131 100 101 102。
其中abc的編碼為131 97 98 99,def的編碼為131 100 101 102。兩個子字元串的編碼後總長度是8,因此編碼結果第一位計算得出:192 + 8 = 200。

如果列表長度超過55,編碼結果第一位是247加列表長度的編碼長度,然後是列表長度本身的編碼,最後依次連接各子列表的編碼。

規則5本身也是遞歸定義的,和規則3相似。

例7:

["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
的編碼結果是:

248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前兩個位元組的計算方式如下:

248 = 247 +1
88 = 86 + 2,在規則3的示例中,長度為86,而在此例中,由於有兩個子字元串,每個子字元串本身的長度的編碼各佔1位元組,因此總共佔2位元組。
第3個位元組179依據規則2得出179 = 128 + 51
第55個位元組163同樣依據規則2得出163 = 128 + 35

例8:最後我們再來看個稍復雜點的例子以加深理解遞歸長度前綴,

["abc",["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]]
編碼結果是:

248 94 131 97 98 99 248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
列表第一項字元串abc根據規則2,編碼結果為131 97 98 99,長度為4。
列表第二項也是一個列表項:

["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
根據規則5,結果為

248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
長度為90,因此,整個列表的編碼結果第二位是90 + 4 = 94, 佔用1個位元組,第一位247 + 1 = 248

以上5條就是RPL的全部編碼規則。

各語言在具體實現RLP編碼時,首先需要將對像映射成byte數組或列表兩種形式。以go語言編碼struct為例,會將其映射為列表,例如Student這個對象處理成列表["icattlecoder","male"]

如果編碼map類型,可以採用以下列表形式:

[["",""],["",""],["",""]]

解碼時,首先根據編碼結果第一個位元組f的大小,執行以下的規則判斷:

1.如果f∈ [0,128),那麼它是一個位元組本身。

2.如果f∈[128,184),那麼它是一個長度不超過55的byte數組,數組的長度為 l=f-128

3.如果f∈[184,192),那麼它是一個長度超過55的數組,長度本身的編碼長度ll=f-183,然後從第二個位元組開始讀取長度為ll的bytes,按照BigEndian編碼成整數l,l即為數組的長度。

4.如果f∈(192,247],那麼它是一個編碼後總長度不超過55的列表,列表長度為l=f-192。遞歸使用規則1~4進行解碼。

5.如果f∈(247,256],那麼它是編碼後長度大於55的列表,其長度本身的編碼長度ll=f-247,然後從第二個位元組讀取長度為ll的bytes,按BigEndian編碼成整數l,l即為子列表長度。然後遞歸根據解碼規則進行解碼。

以上解釋了什麼叫遞歸長度前綴編碼,這個名字本身很好的解釋了編碼規則。

(1) 以太坊源碼學習—RLP編碼( https://segmentfault.com/a/1190000011763339 )
(2)簡單分析RLP編碼原理
( https://blog.csdn.net/itchosen/article/details/78183991 )

② 【ETH錢包開發03】web3j轉賬ETH

在之前的文章中,講解了創建、導出、導入錢包。
【ETH錢包開發01】創建、導出錢包
【ETH錢包開發02】導入錢包

本文主要講解以太坊轉賬相關的一些知識。交易分為ETH轉賬和ERC-20 Token轉賬,本篇先講一下ETH轉賬。

1、解鎖賬戶發起交易。錢包keyStore文件保存在geth節點上,用戶發起交易需要解鎖賬戶,適用於中心化的交易所。

2、錢包文件離線簽名發起交易。錢包keyStore文件保存在本地,用戶使用密碼+keystore的方式做離線交易簽名來發起交易,適用於dapp,比如錢包。

本文主要講一下第二種方式,也就是錢包離線簽名轉賬的方式。

交易流程
1、通過keystore載入轉賬所需的憑證Credentials
2、創建一筆交易RawTransaction
3、使用Credentials對象對交易簽名
4、發起交易

注意以下幾點:

1、Credentials
這里,我是通過獲取私鑰的方式來載入 Credentials

還有另外一種方式,通過密碼+錢包文件keystore方式來載入 Credentials

2、nonce

nonce是指發起交易的賬戶下的交易筆數,每一個賬戶nonce都是從0開始,當nonce為0的交易處理完之後,才會處理nonce為1的交易,並依次加1的交易才會被處理。

可以通過 eth_gettransactioncount 獲取nonce

3、gasPrice和gasLimit
交易手續費由gasPrice 和gasLimit來決定,實際花費的交易手續費是 gasUsed * gasPrice 。所有這兩個值你可以自定義,也可以使用系統參數獲取當前兩個值

關於 gas ,你可以參考我之前的一篇文章。
以太坊(ETH)GAS詳解

gasPrice和gasLimit影響的是轉賬的速度,如果gas過低,礦工會最後才打包你的交易。在app中,通常給定一個默認值,並且允許用戶自己選擇手續費。

如果不需要自定義的話,還有一種方式來獲取。獲取以太坊網路最新一筆交易的 gasPrice ,轉賬的話, gasLimit 一般設置為21000就可以了。

Web3j還提供另外一種簡單的方式來轉賬以太幣,這種方式的好處是不需要管理nonce,不需要設置gasPrice和gasLimit,會自動獲取最新一筆交易的gasPrice,gasLimit 為21000(轉賬一般設置成這個值就夠用了)。

這個問題,我想是很多朋友所關心的吧。但是到目前為止,我還沒有看到有講解這方面的博客。

之前問過一些朋友,他們說可以通過區塊號、區塊哈希來判斷,也可以通過Receipt日誌來判斷。但是經過我的一番嘗試,只有 BlockHash 是可行的,在web3j中根據 blocknumber 和 transactionReceipt 都會報空指針異常。

原因大致是這樣的:在發起一筆交易之後,會返回 txHash ,然後我們可以根據這個 txHash 去查詢這筆交易相關的信息。但是剛發起交易的時候,由於手續費問題或者乙太網絡擁堵問題,會導致你的這筆交易還沒有被礦工打包進區塊,因此一開始是查不到的,通常需要幾十秒甚至更長的時間才能獲取到結果。我目前的解決方案是輪詢的去刷 BlockHash ,一開始的時候 BlockHash 的值為0x00000000000,等到打包成功的時候就不再是0了。

這里我使用的是rxjava的方式去輪詢刷的,5s刷新一次。

正常情況下,幾十秒內就可以獲取到區塊信息了。

區塊確認數=當前區塊高度-交易被打包時的區塊高度。

③ ​ 區塊鏈入門必備108知識點

區塊鏈入門必備108知識點

(歡迎同頻者交流)

1、什麼是區塊鏈

把多筆交易的信息以及表明該區塊的信息打包放在一起,經驗證後的這個包就是區塊。

每個區塊里保存了上一個區塊的 hash值,使區塊之間產生關系,也就是說的鏈了。合起來就叫區塊鏈。

2.什麼是比特幣

比特幣概念是2009年 中本聰提出的,總量是2100萬個。比特幣鏈大約每10分鍾產生一個區塊,這個區塊是礦工挖了10分鍾挖出來的。作為給礦工獎勵,一定數量的比特幣會發給礦工們,但是這個一定數量是每四年減半一次。現在是12.5個。照這樣下去2040年全部的比特幣問世。

3.什麼是 以太坊

以太坊與比特幣最大的區別是有了智能合約。使得開發者在上邊可以開發,運行各種應用。

4.分布式賬本

它是一種在網路成員之間共享,復制和同步的資料庫。直白說,在區塊鏈上的所有用戶都有記賬功能,而且內容一致,這樣保證了數據不可篡改性。

5.什麼是准匿名性

相信大家都有錢包,發送交易都用的錢包地址(一串字元串)這就是准匿名。

6.什麼是開放透明性/可追溯

區塊鏈存儲了從 歷史 到現在的所有數據,任何人都可以查看,而且還可以查看到 歷史 上的任何數據。

7.什麼是不可篡改

歷史 數據和當前交易的數據不可篡改。數據被存在鏈上的區塊上,有一個hash值,如果修改該區塊信息,那麼它的 hash值也變了,它後邊的所有區塊的hash值也必須修改,使成為新的鏈。同時主鏈還在進行交易產生區塊。修改後鏈也必須一直和主鏈同步產生區塊,保證鏈的長度一樣。代價太大了,只為修改一條數據。

8.什麼是抗ddos攻擊

ddos:黑客通過控制許多人的電腦或者手機,讓他們同時訪問一個網站,由於伺服器的寬頻是有限的,大量流量的湧入可能會使得網站可能無法正常工作,從而遭受損失。但區塊鏈是分布式的,不存在一個中心伺服器,一個節點出現故障,其他節點不受影響。理論上是超過51%的節點遭受攻擊,會出現問題。

9.主鏈的定義

以比特幣為例,某個時間點一個區塊讓2個礦工同時挖出來,然後接下來最先產生6個區塊的鏈就是主鏈

10.單鏈/多鏈

單鏈指的是一條鏈上處理所有事物的數據結構。多鏈結構,其核心本質是公有鏈+N個子鏈構成。只有一條,子鏈理論上可以有無數條,每一個子鏈都可以運行一個或多個DAPP系統

11.公有鏈/聯盟鏈/私有鏈

公有鏈:每個人都可以參與到區塊鏈

聯盟鏈:只允許聯盟成員參與記賬和查詢

私有鏈:寫入和查看的許可權只掌握在一個組織手裡。

12.共識層數據層等

區塊鏈整體結構有六個:數據層,網路層,共識層,激勵層,合約層,應用層。數據層:記錄數據的一層,屬於底層技術; 網路層:構建區塊鏈網路的一種架構,它決定了用戶與用戶之間通過何種方式組織起來。共識層:提供了一套規則,讓大家接收和存儲的信息達成一致。激勵層:設計激勵政策,鼓勵用戶參與到區塊鏈生態中;合約層:一般指「智能合約」,它是一套可以自動執行,根據自己需求編寫的合約體系。應用層:區塊鏈上的應用程序,與手機的app類似前分布式存儲研發中心

13.時間戳

時間戳是指從1970年1月1日0時0分0秒0...到現在的當前時間的總秒數,或者總納秒數等等很大的數字。每個區塊生成時都有一個時間戳,表明生成區塊的時間。

14.區塊/區塊頭/區塊體

區塊是區塊鏈的基本單元,區塊頭和區塊體是區塊鏈的組成部分。區塊頭裡麵包含的信息有上一個區塊的hash,本區塊的hash,時間戳等等。區塊體就是區塊里的詳細數據。

15.Merkle樹

Merkle樹,也叫二叉樹,是存儲數據的一種數據結構,最底層是所有區塊包含的原始數據,上一層是每個區塊的hash值,這一層的hash兩兩組合產生新的hash值,形成新的一層,然後一層層往上,-直到產生一個hash值。這樣的結構可以用於快速比較大量的數據,不需要下載全部的數據就可以快速的查找你想要的最底層的 歷史 數據。

16什麼是擴容

比特幣的一個區塊大小大約是1M左右,可以保存4000筆交易記錄。擴容就是想把區塊變大,能保存更多的數據。

17.什麼是鏈

每個區塊都會保存上一個區塊的 hash,使區塊之間產生關系,這個關系就是鏈。通過這個鏈把區塊交易記錄以及狀態變化等的數據存儲起來。

18.區塊高度

這個不是距離上說的高度,它指是該區塊與所在鏈上第一個區塊之間相差的區塊總個數。這個高度說明了就是第幾個區塊,只是標識作用。

19.分叉

同一時間內產生了兩個區塊(區塊里的交易信息是一樣的,只是區塊的hash值不一樣),之後在這兩個區塊上分叉出來兩條鏈,這兩條鏈接下來誰先生成6個區塊,誰就是主鏈,另外的一條鏈丟棄。

20. 幽靈協議

算力高的礦池很容易比算力低的礦機產生區塊速度快,導致區塊鏈上大部分區塊由這些算力高的礦池產生的。而算力低的礦機產生的區塊因為慢,沒有存儲到鏈上,這些區塊將會作廢。

幽靈協議使得本來應該作廢的區塊,也可以短暫的留在鏈上,而且也可以作為

工作量證明的一部分。這樣一來,小算力

的礦工,對主鏈的貢獻比重就增大了,大型礦池就無法獨家壟斷對新區塊的確認。

21.孤塊

之前說過分叉,孤塊就是同一時間產生的區塊,有一個形成了鏈,另一個後邊沒有形成鏈。那麼這個沒形成鏈的塊就叫

孤塊。

22.叔塊

上邊說的孤塊,通過幽靈協議,使它成為工作量證明的一部分,那它就不會被丟棄,會保存在主鏈上。這個區塊就是下

23重放攻擊

就是黑客把已經發送給伺服器的消息,重新又發了一遍,有時候這樣可以騙取伺服器的多次響應。

24.有向無環圖

也叫數據集合DAG(有向非循環圖),DAG是一種理想的多鏈數據結構。現在說的區塊鏈大都是單鏈,也就是一個區塊連一個區塊,DAG是多個區塊相連。好處是可以同時生成好幾個區塊,於是網路可以同時處理大量交易,吞吐量肯定就上升了。但是缺點很多,目前屬於研究階段。

25.什麼是挖礦

挖礦過程就是對以上這六個欄位進行一系列的轉換、連接和哈希運算,並隨著不斷一個一個試要尋找的隨機數,最後成功找到一個隨機數滿足條件:經過哈希運算後的值,比預設難度值的 哈希值小,那麼,就挖礦成功了,節點可以向鄰近節點進行廣播該區塊,鄰近節點收到該區塊對以上六個欄位進行同樣的運算,驗證合規,再向其它結點轉播,其它結點也用同樣的演算法進行驗證,如果全網有51%的結點都驗證成功,這個區塊就算真正地「挖礦」成功了,每個結點都把這個區塊加在上一個區塊的後面,並把區塊中與自己記錄相同的列表刪除,再次復生上述過程。另外要說的是,不管挖礦成不成功每個節點都預先把獎勵的比特幣50個、所有交易的手續費(總輸入-總輸出)記在交易列表的第一項了(這是「挖礦」最根本的目的,也是保證區塊鏈能長期穩定運行的根本原因),輸出地址就是本結點的地址,但如果挖礦不成功,這筆交易就作廢了,沒有任何獎勵。而且這筆叫作「生產交易」的交易不參與「挖礦」計算。

26.礦機/礦場

礦機就是各種配置的計算機,算力是他們的最大差距。礦機集中在一個地的地方就是礦場

27.礦池

就是礦工們聯合起來一起組成一個團隊,這個團隊下的計算機群就是礦池。挖礦獎勵,是根據自己的算力貢獻度分發。

28.挖礦難度和算力

挖礦難度是為了保證產生區塊的間隔時間穩定在某個時間短內,如比特幣10分鍾出

塊1個。算力就是礦機的配置。

29.驗證

當區塊鏈里的驗證是對交易合法性的一種確認,交易消息在節點之間傳播時每個節點都會驗證一次這筆交易是否合法。比如驗證交易的語法是否正確,交易的金額是否大於0,輸入的交易金額是否合理,等等。驗證通過後打包,交給礦工挖礦。

30.交易廣播

就是該節點給其他節點通過網路發送信息。

31.礦工費

區塊鏈要像永動機一樣不停的工作,需要礦工一直維護著這個系統。所以要給礦工們好處費,才能持久。

32.交易確認

當交易發生時,記錄該筆交易的區塊將進行第一次確認,並在該區塊之後的鏈上的每一個區塊進行再次確認:當確認數達到6個及以上時,通常認為這筆交易比較安全並難以篡改。

33.雙重交易

就是我有10塊錢,我用這10塊錢買了一包煙,然後瞬間操作用這還沒到付的10塊錢又買了杯咖啡。所以驗證交易的時候,要確認這10塊錢是否已花費。

34.UTXO未花費的交易輸出

它是一個包含交易數據和執行代碼的數據結構,可以理解為存在但尚未消費的數字貨幣

35.每秒交易數量TPS

也就是吞吐量,tps指系統每秒能處理的交易數量。

36.錢包

與支付寶類似,用來存儲數字貨幣的,用區塊鏈技術更加安全。

37.冷錢包/熱錢包

冷錢包就是離線錢包,原理是儲存在本地,運用二維碼通信讓私鑰永不觸網。熱錢包就是在線錢包,原理是將私鑰加密後存儲在伺服器上,當需要使用時再從伺服器上下載下來,並在瀏覽器端進行解密。

38.軟體錢包/ 硬體錢包

軟體錢包是一種計算機程序。一般而言,軟體錢包是與區塊鏈交互的程序,可以讓用戶接收、存儲和發送數字貨幣,可以存儲多個密鑰。硬體錢包是專門處理數字貨幣的智能設備。

39.空投

項目方把數字貨幣發送給各個用戶錢包地址。

40.映射

映射跟區塊鏈貨幣的發行相關,是鏈與鏈之間的映射。比如有一些區塊鏈公司,前期沒有完成鏈的開發,它就依託於以太坊發行自己的貨幣,前期貨幣的發行、交易等都在以太坊上進行操作。隨著公司的發展,公司自己的鏈開發完成了公司想要把之前在以太坊上的信息全部對應到自己的鏈上,這個過程就是映射。

41.倉位

指投資人實有投資和實際投資資金的比例

42.全倉

全部資金買入比特幣

43.減倉

把部分比特幣賣出,但不全部賣出

44.重倉

資金和比特幣相比,比特幣份額佔多

45.輕倉

資金和比特幣相比,資金份額佔多

46.空倉

把手裡所持比特幣全部賣出,全部轉為資金

47.止盈

獲得一定收益後,將所持比特幣賣出以保住盈利

48.止損

虧損到一定程度後,將所持比特幣賣出以防止虧損進一步擴大

49.牛市

價格持續上升,前景樂觀

50.熊市

價格持續下跌,前景黯淡

51.多頭(做多)

買方,認為幣價未來會上漲,買入幣,待幣價上漲後,高價賣出獲利了結

52.空頭(做空)

賣方,認為幣價未來會下跌,將手中持有的幣(或向交易平台借幣)賣出,待幣價下跌後,低價買入獲利了結

53.建倉

買入比特幣等虛擬貨幣

54.補倉

分批買入比特幣等虛擬貨幣,如:先買入1BTC,之後再買入1BTC

55.全倉

將所有資金一次性全部買入某一種虛擬幣

56.反彈

幣價下跌時,因下跌過快而價格回升調整

57.盤整(橫盤)

價格波動幅度較小,幣價穩定

58.陰跌

幣價緩慢下滑

59.跳水(瀑布)

幣價快速下跌,幅度很大

60.割肉

買入比特幣後,幣價下跌,為避免虧損擴大而賠本賣出比特幣。或借幣做空後,幣價上漲,賠本買入比特幣

61.套牢

預期幣價上漲,不料買入後幣價卻下跌;或預期幣價下跌,不料賣出後,幣價卻上漲

62.解套

買入比特幣後幣價下跌造成暫時的賬面損失,但之後幣價回升,扭虧為盈

63.踏空

因看淡後市賣出比特幣後,幣價卻一路上漲,未能及時買入,因此未能賺得利潤

64.超買

幣價持續上升到一定高度,買方力量基本用盡,幣價即將下跌

65.超賣

幣價持續下跌到一定低點,賣方力量基本用盡,幣價即將回升

66.誘多

幣價盤整已久,下跌可能性較大,空頭大多已賣出比特幣,突然空方將幣價拉高,誘使多方以為幣價將會上漲,紛紛買入,結果空方打壓幣價,使多方套牢

67.誘空

多頭買入比特幣後,故意打壓幣價,使空頭以為幣價將會下跌,紛紛拋出,結果誤入多頭的陷阱


68.什麼是NFT

NFT全稱「Non-Fungible Tokens」 即非同質化代幣,簡單來說,即區塊鏈上一種無法分割的版權證明,主要作用數字資產確權,轉移,與數字貨幣區別在於,它獨一無二,不可分割,本質上,是一種獨特的數字資產。

69.什麼是元宇宙

元宇宙是一個虛擬時空間的集合, 由一系列的增強現實(AR), 虛擬現實(VR) 和互聯網(Internet)所組成,其中數字貨幣承載著這個世界中價值轉移的功能。

70.什麼是DeFi

DeFi,全稱為Decentralized Finance,即「去中心化金融」或者「分布式金融」。「去中心化金融」,與傳統中心化金融相對,指建立在開放的去中心化網路中的各類金融領域的應用,目標是建立一個多層面的金融系統,以區塊鏈技術和密碼貨幣為基礎,重新創造並完善已有的金融體系

71.誰是中本聰?

72.比特幣和Q幣不一樣

比特幣是一種去中心化的數字資產,沒有發行主體。Q幣是由騰訊公司發行的電子貨幣,類似於電子積分,其實不是貨幣。Q幣需要有中心化的發行機構,Q幣因為騰訊公司的信用背書,才能被認可和使用。使用范圍也局限在騰訊的 游戲 和服務中,Q幣的價值完全基於人們對騰訊公司的信任。

比特幣不通過中心化機構發行,但卻能夠得到全球的廣泛認可,是因為比特幣可以自證其信,比特幣的發行和流通由全網礦工共同記賬,不需要中心機構也能確保任何人都無法竄改賬本。

73.礦機是什麼?

以比特幣為例,比特幣礦機就是通過運行大量計算爭奪記賬權從而獲得新生比特幣獎勵的專業設備,一般由挖礦晶元、散熱片和風扇組成,只執行單一的計算程序,耗電量較大。挖礦實際是礦工之間比拼算力,擁有較多算力的礦工挖到比特幣的概率更大。隨著全網算力上漲,用傳統的設備(CPU、GPU)挖到比特的難度越來越大,人們開發出專門用來挖礦的晶元。晶元是礦機最核心的零件。晶元運轉的過程會產生大量的熱,為了散熱降溫,比特幣礦機一般配有散熱片和風扇。用戶在電腦上下載比特幣挖礦軟體,用該軟體分配好每台礦機的任務,就可以開始挖礦了。每種幣的演算法不同,所需要的礦機也各不相同。

74.量化交易是什麼?

量化交易,有時候也稱自動化交易,是指以先進的數學模型替代人為的主觀判斷,極大地減少了投資者情緒波動的影響,避免在市場極度狂熱或悲觀的情況下做出非理性的投資決策。量化交易有很多種,包括跨平台搬磚、趨勢交易、對沖等。跨平台搬磚是指,當不同目標平台價差達到一定金額,在價高的平台賣出,在價低的平台買入。

75.區塊鏈資產場外交易

場外交易也叫OTC交易。用戶需要自己尋找交易對手,不通過撮合成交,成交價格由交易雙方協商確定,交易雙方可以藉助當面協商或者電話通訊等方式充分溝通。

76.時間戳是什麼?

區塊鏈通過時間戳保證每個區塊依次順序相連。時間戳使區塊鏈上每一筆數據都具有時間標記。簡單來說,時間戳證明了區塊鏈上什麼時候發生了什麼事情,且任何人無法篡改。

77.區塊鏈分叉是什麼?

在中心化系統中升級軟體十分簡單,在應用商店點擊「升級」即可。但是在區塊鏈等去中心化系統中,「升級」並不是那麼簡單,甚至可能一言不合造成區塊鏈分叉。簡單說,分叉是指區塊鏈在進行「升級」時發生了意見分歧,從而導致區塊鏈分叉。因為沒有中心化機構,比特幣等數字資產每次代碼升級都需要獲得比特幣社區的一致認可,如果比特幣社區無法達成一致,區塊鏈很可能形成分叉。

78.軟分叉和硬分叉

硬分叉,是指當比特幣代碼發生改變後,舊節點拒絕接受由新節點創造的區塊。不符合原規則的區塊將被忽略,礦工會按照原規則,在他們最後驗證的區塊之後創建新的區塊。 軟分叉是指舊的節點並不會意識到比特幣代碼發生改變,並繼續接受由新節點創造的區塊。礦工們可能會在他們完全沒有理解,或者驗證過的區塊上進行工作。軟分叉和硬分叉都"向後兼容",這樣才能保證新節點可以從頭驗證區塊鏈。向後兼容是指新軟體接受由舊軟體所產生的數據或者代碼,比如說Windows 10可以運行Windows XP的應用。而軟分叉還可以"向前兼容"。

79.區塊鏈項目分類和應用

從目前主流的區塊鏈項目來看,區塊鏈項目主要為四類:第一類:幣類;第二類:平台類;第三類:應用類;第四類:資產代幣化。

80.對標美元的USDT

USDT是Tether公司推出的對標美元(USD)的代幣Tether USD。1USDT=1美元,用戶可以隨時使用USDT與USD進行1:1兌換。Tether公司執行1:1准備金保證制度,即每個USDT代幣,都會有1美元的准備金保障,對USDT價格的恆定形成支撐。某個數字資產單價是多少USDT,也就相當於是它的單價是多少美元(USD)。

81.山寨幣和競爭幣

山寨幣是指以比特幣代碼為模板,對其底層技術區塊鏈進行了一些修改的區塊鏈資產,其中有技術性創新或改進的又稱為競爭幣。因為比特幣代碼開源,導致比特幣的抄襲成本很低,甚至只需復制比特幣的代碼,修改一些參數,便可以生成一條全新的區塊鏈。

82.三大交易所

幣安

Okex

火幣

83.行情軟體

Mytoken

非小號

84.資訊網站

巴比特

金色 財經

幣世界快訊

85.區塊鏈瀏覽器

BTC

ETH

BCH

LTC

ETC

86.錢包

Imtoken

比特派

MetaMask(小狐狸 )

87. 去中心化交易所

uniswap


88. NFT交易所

Opensea

Super Rare

89. 梯子

自備,購買靠譜梯子

90. 平台幣

平台發行的數字貨幣,用於抵扣手續費,交易等

91. 牛市、熊市

牛市:上漲行情

熊市:下跌行情

92. 區塊鏈1.0

基於分布式賬本的貨幣交易體系,代表為比特幣

93. 區塊鏈2.0

以太坊(智能合約)為代表的合同區塊鏈技術為2.0

94. 區塊鏈3.0

智能化物聯網時代,超出金融領域,為各種行業提供去中心化解決方案

95. 智能合約

智能合約,Smart Contract,是一種旨在以信息化方式傳播、驗證或執行合同的計算機協議,簡單說,提前定好電子合約,一旦雙方確認,合同自動執行。

96. 什麼是通證?

通證經濟就是以Token為唯一參考標準的經濟體系,也就是說相當於通行證,你擁有Token ,就擁有權益,就擁有發言權。


97. 大數據 和 區塊鏈 的 區別

大數據是生產資料,AI是新的生產力,區塊鏈是新的生產關系。大數據指無法在一定時間范圍內用常規軟體工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產。簡單理解為,大數據就是長期積累的海量數據,短期無法獲取。區塊鏈可以作為大數據的獲取方式,但無法取代大數據。大數據只是作為在區塊鏈運行的介質,沒有絕對的技術性能,所以兩者不能混淆。(生產關系簡單理解就是勞動交換和消費關系,核心在於生產力,生產力核心在於生產工具)

98. 什麼是ICO?

ICO,Initial Coin Offering, 首次公開代幣發行,就是區塊鏈數字貨幣行業中的眾籌。是2017最為熱門的話題和投資趨勢,國家9.4出台監管方案。說到ICO,人們會想到IPO,兩者有著本質不同。

99. 數字貨幣五個特徵

第一個特徵:去中心化

第二個特徵:有開源代碼

第三個特徵:有獨立的電子錢包

第四個特徵:恆量發行的

第五個特徵:可以全球流通

100.什麼叫去中心化?

沒有發行方,不屬於任何機構或國家,由互聯網網路專家設計、開發並存放於互聯網上,公開發行的幣種。

101. 什麼叫衡量(稀缺性)?

發行總量一旦設定,永久固定,不能更改,不能隨意超發,可接受全球互聯網監督。因挖掘和開釆難度雖時間數量變化,時間越長,開采難度越大,所開釆的幣就越少,因此具有稀缺性。

102. 什麼叫開源代碼?

用字母數字組成的存放在互聯網上,任何人都可以查出其設計的源代碼,所有人都可以參與,可以挖掘,全球公開化。

103. 什麼叫匿名交易? 專有錢包私密?

每個人都可以在網上注冊下載錢包,無需實名認證,完全由加密數字代碼組成,全球即時點對點發送、交易,無需藉助銀行和任何機構,非本人授權任何人都無法追蹤、查詢。


104.什麼是合約交易?

合約交易是指買賣雙方對約定未來某個時間按指定價格接收一定數量的某種資產的協議進行交易。合約交易的買賣對象是由交易所統一制定的標准化合約,交易所規定了其商品種類,交易時間,數量等標准化信息。合約代表了買賣雙方所擁有的權利和義務。


105.數字貨幣產業鏈

晶元廠家 礦機廠商 礦機代理 挖礦 出礦到交易所 散戶炒幣


106.北 楓 是誰?

北 楓 :數字貨幣價值投資者

投資風格:穩健

建立社區 :北斗 社區 (高質量價投社區 )


107.北斗 投資策略

長短結合,價投為主,不碰合約,不玩短線

合理布局,科學操作,穩健保守,掙周期錢


108.北 楓 ?

歡迎幣友,共謀發展

④ 以太坊怎麼挖礦

與所有區塊鏈技術一樣,以太坊使用基於激勵的安全模型。聲稱是網路中的礦工的任何節點都可以嘗試創建並阻止驗證區。世界各地的許多礦工正在同時創建和驗證區塊。

一、以太坊采礦的基本原則

1、與所有區塊鏈技術一樣,以太坊使用基於激勵的安全模型。聲稱是網路中的礦工的任何節點都可以嘗試創建並阻止驗證區。世界各地的許多礦工正在同時創建和驗證區塊。每個礦工通過向塊鏈發送塊來提供數學機制的「證據」。此測試類似於保證:如果此測試存在,則此塊必須有效。

2、對於要添加到主鏈的塊,礦工必須比其他礦工更快地提供此「測試」。通過礦工提供的數學機制的「證明」,每個區塊的確認過程稱為工作測試。經證實,新區塊內的礦工將獲得一定的獎勵。什麼是獎勵?以太坊使用內在數字代幣 - 以太作為獎勵。每次礦工嘗試新的塊時,都會生成一個新的以太坊並將其提供給礦工。

第二、以太坊和比特幣的區別

1、同點:比特幣和以太坊都是成功的區塊鏈技術應用。人們通過比特幣認識區塊鏈技術。通過以太坊,人們意識到區塊鏈可以是獨立的。所有這些都基於區塊鏈,其中交易是公開記錄的,貨幣和資產交易更方便和讓步,並且消除了繁瑣的中間人。

2、差異:比特幣是一種分散的點對點數字支付系統,類似於全球清算銀行。而且這家銀行不是一個集中式組織的成員,它沒有CEO,它沒有管理員,只有代碼的基本原則和共識。從同行轉移價值,沒有其他第三方或信託機構。

3、比特幣總量為2100W。對於每生成21W的塊,塊生成的比特幣數量減少一半,每10分鍾生成一個塊。一般而言,它是一種通貨緊縮的電子貨幣。以太坊的定義是一個分散的點對點虛擬機,可以理解為使用代幣執行價值分配並吸引所有各方建立生態系統的平台。以太坊的總量沒有上限。

三、智能合約和協議ERC20

1、智能合約首先是合同,它以代碼的形式規定交易執行的雙方,並規定了執行合同的某些激活條件。一旦這些條件被激活,商定的交易就會自動執行,通常是一些交易。這些交易將由礦工挖掘出來,並最終合並到公共鏈中,這是不可否認的,不可逆轉。

2、以太坊中的智能合約基本上是互聯網上的開源。任何用戶都可以看到相關介面的定義和激活時間。如果沒有統一的標准,許多智能合約將使每個人都難以理解,這份智能合約究竟做了什麼?此時,ERC20協議已啟動。

3、開發人員可以通過查看其他智能合約然後調用自己的合同輕鬆了解相關界面的角色。標准化是非常有益的,這意味著這些資產可以在不同的平台和項目中使用,否則它們只能在特定情況下使用。

四、為什麼以太坊可以用來發送硬幣

因為智能合同的存在的,合同可以被用來安排貨幣集資最後存入帳戶的用戶,並且因為0x7D0使用相同的標准ERC20如直接交換0x7D0和FAD支持以太坊生態系統這將更容易。

五、以太坊貿易限制

1、對於每筆交易,交易的發起人必須設定交易的Gas限價和Gas價格。不同的操作將產生不同的Gas,Gas成本當礦工完成後,礦工將停止運行並且用過的Gas將被獎勵給礦工。

2、如果某些氣體仍然存在,如果用戶聲明限制值太低或者中間的帳號Eth不足以支付Gas消耗,它將返回到交易的發起人或智能合約的創建者,由於Gas不足,協議將被取消,用於計算的Gas將不會退回賬戶。

六、網路計算能力為太坊全

乙太網中所有當前采礦機器的總計算能力,當前采礦集群是根據該值計算的當前塊的難度。

七、以太坊提取難度

塊的難度用於提高塊驗證區的一致性。 Genesis塊的難度是131,072,並且有一個特殊的公式用於計算之後每個塊的難度。如果檢查塊比前一個塊更快,則以太坊協議將增加塊的難度。通過調整塊的難度,您可以調整驗證區塊所需的時間,即突發速度。檢查時間的自我調整以繼續以恆定速率生成新快。

8、單張卡的計算能力與采礦收入之間的關系

單張卡的計算能力越大,可以進行的檢查越多,獲得公式結果的概率是,情況越大,如果使用地雷組,所提供的股份數量越大,采礦業的收入就越大。

⑤ 以太坊stratum協議原理

參照比特幣的 stratum協議 和 NiceHash的stratum協議規范 編寫了一版以太坊版本的stratum協議說明.

stratum協議是目前最常用的礦機和礦池之間的TCP通訊協議。

以太坊是一個去中心化的網路架構,通過安裝Mist客戶端的節點來轉發新交易和新區塊。而礦機、礦池也同時形成了另一個網路,我們稱之為礦工網路。

礦工網路分成礦機、礦池、錢包等幾個主要部分,有時礦池軟體與錢包安裝在一起,可合稱為礦池。

礦機與礦池軟體之間的通訊協議是 stratum ,而礦池軟體與錢包之間的通訊是 bitcoinrpc 介面。

stratum是 JSON 為數據格式.

礦機啟動,首先以 mining.subscribe 方法向礦池連接,用來訂閱工作。

礦池以 mining.notify 返回訂閱號、ExtraNonce1和ExtraNonce2_size。

Client:

Server:

其中:

是 訂閱號 ;

080c是 extranonce ,Extranonce可能最大3位元組;

礦機以 mining.authorize 方法,用某個帳號和密碼登錄到礦池,密碼可空,礦池返回 true 登錄成功。該方法必須是在初始化連接之後馬上進行,否則礦機得不到礦池任務。

Client:

Server:

難度調整由礦池下發給礦機,以 mining.set_difficulty 方法調整難度, params 中是難度值。
Server:

礦機會在下一個任務時採用新難度,礦池有時會馬上下發一個新任務並且把清理任務設為true,以便礦機馬上以新難度工作。

該命令由礦池定期發給礦機,當礦機以 mining.subscribe 方法登記後,礦池應該馬上以 mining.notify 返回該任務。

Server:

任務ID : bf0488aa ;

seedhash : 。每一個任務都發送一個seedhash來支持盡可能多的礦池,這可能會很快地在貨幣之間交換。

headerhash : 。

boolean cleanjobs : true 。如果設為true,那麼礦工需要清理任務隊列,並立即開始從事新提供的任務,因為所有舊的任務分享都將導致陳舊的分享錯誤。如果是 false 則等當前任務結束才開始新任務。

礦工使用seedhash識別DAG,然後帶著headerhash,extranonce和自己的minernonce尋找低於目標的share(這是由提供的難度而產生的)。

礦機找到合法share時,就以」 mining.submit 「方法向礦池提交任務。礦池返回true即提交成功,如果失敗則error中有具體原因。

Client:

任務ID : bf0488aa

minernonce : 6a909d9bbc0f 。注意minernonce是6個位元組,因為提供的extranonce是2個位元組。如果礦池提供3位元組的extranonce,那麼minernonce必須是5位元組

Server:

一般的礦機與礦池通訊過程就如下所示:

⑥ 什麼是以太幣/以太坊ETH

以太幣(ETH)是以太坊(Ethereum)的一種數字代幣,被視為「比特幣2.0版」,採用與比特幣不同的區塊鏈技術「以太坊」(Ethereum),一個開源的有智能合約成果的民眾區塊鏈平台,由全球成千上萬的計算機構成的共鳴網路。開發者們需要支付以太幣(ETH)來支撐應用的運行。和其他數字貨幣一樣,以太幣可以在交易平台上進行買賣 。

溫馨提示:以上解釋僅供參考,不作任何建議。入市有風險,投資需謹慎。您在做任何投資之前,應確保自己完全明白該產品的投資性質和所涉及的風險,詳細了解和謹慎評估產品後,再自身判斷是否參與交易。
應答時間:2020-12-02,最新業務變化請以平安銀行官網公布為准。
[平安銀行我知道]想要知道更多?快來看「平安銀行我知道」吧~
https://b.pingan.com.cn/paim/iknow/index.html

⑦ 002:以太坊簡介|《ETH原理與智能合約開發》筆記

待字閨中開發了一門區塊鏈方面的課程:《深入淺出ETH原理與智能合約開發》,馬良老師講授。此文集記錄我的學習筆記。

課程共8節課。其中,前四課講ETH原理,後四課講智能合約。
第一課分為四部分:

這篇文章是第一部分的學習筆記:以太坊簡介。

以太坊是目前公認的區塊鏈2.0,相比於區塊鏈1.0(比特幣),其最大的特點是引入了智能合約,從而從單一的數字加密 Token 技術轉化為一個區塊鏈分布式應用的平台。以太坊本身不包含任何具體的應用,它主要是提供基礎平台和工具,使得開發者可以在其基礎之上開發出各種各樣的應用。可以說,以太坊有著巨大的潛力,它最終可能會發展出分布式、自動化、自組織的最高形態。

第一,我們可以通過學習以太坊的技術,領會區塊鏈技術發展的脈絡,改進的思路/路徑,從而緊跟區塊鏈技術發展的前沿,預測下一步的趨勢。
第二,DAPP(分布式應用)生態系統目前的發展也是蒸蒸日上,蓬勃發展,據不完全統計,現在有數百種應用之多,顯而易見的,對於開發人員的需求也是水漲船高,需要大量的開發人員。目前非常有名的應用有加密貓、各類側鏈應用、ERC20 Token如幣安幣火幣等等。

2013年,創始人 Vitalik Buterin 針對比特幣存在的一些問題以及局限性,提出把「智能合約」構想應用於區塊鏈領域,希望打造一個基於區塊鏈的多方計算的智能化通用平台,並通過比特幣融資進行開發。

2014年,以太坊基金會在瑞士成立,管理並運營整個項目。

前5大礦池佔83%的算力,很集中。

目前大約有16000個全節點,其中,美國5461(34%),中國1839(11.5%),俄羅斯963(6%),德國920(5.7%),加拿大875(5.45%)。全節點每天都有動態變化。分布情況也反映出各個國家的參與熱度。

⑧ 以太坊是什麼丨以太坊開發入門指南

以太坊是什麼丨以太坊開發入門指南
很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基於以太坊平台,以通俗的方式介紹以太坊開發中涉及的各晦澀的概念,輕松帶大家入門。
以太坊是什麼
以太坊(Ethereum)是一個建立在區塊鏈技術之上, 去中心化應用平台。它允許任何人在平台中建立和使用通過區塊鏈技術運行的去中心化應用。
對這句話不理解的同學,姑且可以理解為以太坊是區塊鏈里的Android,它是一個開發平台,讓我們就可以像基於Android Framework一樣基於區塊鏈技術寫應用。
在沒有以太坊之前,寫區塊鏈應用是這樣的:拷貝一份比特幣代碼,然後去改底層代碼如加密演算法,共識機制,網路協議等等(很多山寨幣就是這樣,改改就出來一個新幣)。
以太坊平台對底層區塊鏈技術進行了封裝,讓區塊鏈應用開發者可以直接基於以太坊平台進行開發,開發者只要專注於應用本身的開發,從而大大降低了難度。
目前圍繞以太坊已經形成了一個較為完善的開發生態圈:有社區的支持,有很多開發框架、工具可以選擇。
智能合約
什麼是智能合約
以太坊上的程序稱之為智能合約, 它是代碼和數據(狀態)的集合。
智能合約可以理解為在區塊鏈上可以自動執行的(由事件驅動的)、以代碼形式編寫的合同(特殊的交易)。
在比特幣腳本中,我們講到過比特幣的交易是可以編程的,但是比特幣腳本有很多的限制,能夠編寫的程序也有限,而以太坊則更加完備(在計算機科學術語中,稱它為是「圖靈完備的」),讓我們就像使用任何高級語言一樣來編寫幾乎可以做任何事情的程序(智能合約)。
智能合約非常適合對信任、安全和持久性要求較高的應用場景,比如:數字貨幣、數字資產、投票、保險、金融應用、預測市場、產權所有權管理、物聯網、點對點交易等等。
目前除數字貨幣之外,真正落地的應用還不多(就像移動平台剛開始出來一樣),相信1到3年內,各種殺手級會慢慢出現。
編程語言:Solidity
智能合約的默認的編程語言是Solidity,文件擴展名以.sol結尾。
Solidity是和JavaScript相似的語言,用它來開發合約並編譯成以太坊虛擬機位元組代碼。
還有長像Python的智能合約開發語言:Serpent,不過建議大家還是使用Solidity。
Browser-Solidity是一個瀏覽器的Solidity IDE, 大家可以點進去看看,以後我們更多文章介紹Solidity這個語言。
運行環境:EVM
EVM(Ethereum Virtual Machine)以太坊虛擬機是以太坊中智能合約的運行環境。
Solidity之於EVM,就像之於跟JVM的關系一樣,這樣大家就容易理解了。
以太坊虛擬機是一個隔離的環境,在EVM內部運行的代碼不能跟外部有聯系。
而EVM運行在以太坊節點上,當我們把合約部署到以太坊網路上之後,合約就可以在以太坊網路中運行了。
合約的編譯
以太坊虛擬機上運行的是合約的位元組碼形式,需要我們在部署之前先對合約進行編譯,可以選擇Browser-Solidity Web IDE或solc編譯器。
合約的部署
在以太坊上開發應用時,常常要使用到以太坊客戶端(錢包)。平時我們在開發中,一般不接觸到客戶端或錢包的概念,它是什麼呢?
以太坊客戶端(錢包)
以太坊客戶端,其實我們可以把它理解為一個開發者工具,它提供賬戶管理、挖礦、轉賬、智能合約的部署和執行等等功能。
EVM是由以太坊客戶端提供的。
Geth是典型的開發以太坊時使用的客戶端,基於Go語言開發。 Geth提供了一個互動式命令控制台,通過命令控制台中包含了以太坊的各種功能(API)。Geth的使用我們之後會有文章介紹,這里大家先有個概念。
Geth控制台和Chrome瀏覽器開發者工具里的面的控制台是類似,不過是跑在終端里。
相對於Geth,Mist則是圖形化操作界面的以太坊客戶端。
如何部署
智能合約的部署是指把合約位元組碼發布到區塊鏈上,並使用一個特定的地址來標示這個合約,這個地址稱為合約賬戶。
以太坊中有兩類賬戶:
· 外部賬戶
該類賬戶被私鑰控制(由人控制),沒有關聯任何代碼。
· 合約賬戶
該類賬戶被它們的合約代碼控制且有代碼與之關聯。
和比特幣使用UTXO的設計不一樣,以太坊使用更為簡單的賬戶概念。
兩類賬戶對於EVM來說是一樣的。
外部賬戶與合約賬戶的區別和關系是這樣的:一個外部賬戶可以通過創建和用自己的私鑰來對交易進行簽名,來發送消息給另一個外部賬戶或合約賬戶。
在兩個外部賬戶之間傳送消息是價值轉移的過程。但從外部賬戶到合約賬戶的消息會激活合約賬戶的代碼,允許它執行各種動作(比如轉移代幣,寫入內部存儲,挖出一個新代幣,執行一些運算,創建一個新的合約等等)。
只有當外部賬戶發出指令時,合同賬戶才會執行相應的操作。
合約部署就是將編譯好的合約位元組碼通過外部賬號發送交易的形式部署到以太坊區塊鏈上(由實際礦工出塊之後,才真正部署成功)。
運行
合約部署之後,當需要調用這個智能合約的方法時只需要向這個合約賬戶發送消息(交易)即可,通過消息觸發後智能合約的代碼就會在EVM中執行了。
Gas
和雲計算相似,佔用區塊鏈的資源(不管是簡單的轉賬交易,還是合約的部署和執行)同樣需要付出相應的費用(天下沒有免費的午餐對不對!)。
以太坊上用Gas機制來計費,Gas也可以認為是一個工作量單位,智能合約越復雜(計算步驟的數量和類型,佔用的內存等),用來完成運行就需要越多Gas。
任何特定的合約所需的運行合約的Gas數量是固定的,由合約的復雜度決定。
而Gas價格由運行合約的人在提交運行合約請求的時候規定,以確定他願意為這次交易願意付出的費用:Gas價格(用以太幣計價) * Gas數量。
Gas的目的是限制執行交易所需的工作量,同時為執行支付費用。當EVM執行交易時,Gas將按照特定規則被逐漸消耗,無論執行到什麼位置,一旦Gas被耗盡,將會觸發異常。當前調用幀所做的所有狀態修改都將被回滾, 如果執行結束還有Gas剩餘,這些Gas將被返還給發送賬戶。
如果沒有這個限制,就會有人寫出無法停止(如:死循環)的合約來阻塞網路。
因此實際上(把前面的內容串起來),我們需要一個有以太幣余額的外部賬戶,來發起一個交易(普通交易或部署、運行一個合約),運行時,礦工收取相應的工作量費用。
以太坊網路
有些著急的同學要問了,沒有以太幣,要怎麼進行智能合約的開發?可以選擇以下方式:
選擇以太坊官網測試網路Testnet
測試網路中,我們可以很容易獲得免費的以太幣,缺點是需要發很長時間初始化節點。
使用私有鏈
創建自己的以太幣私有測試網路,通常也稱為私有鏈,我們可以用它來作為一個測試環境來開發、調試和測試智能合約。
通過上面提到的Geth很容易就可以創建一個屬於自己的測試網路,以太幣想挖多少挖多少,也免去了同步正式網路的整個區塊鏈數據。
使用開發者網路(模式)
相比私有鏈,開發者網路(模式)下,會自動分配一個有大量余額的開發者賬戶給我們使用。
使用模擬環境
另一個創建測試網路的方法是使用testrpc,testrpc是在本地使用內存模擬的一個以太坊環境,對於開發調試來說,更方便快捷。而且testrpc可以在啟動時幫我們創建10個存有資金的測試賬戶。
進行合約開發時,可以在testrpc中測試通過後,再部署到Geth節點中去。
更新:testrpc 現在已經並入到Truffle 開發框架中,現在名字是Ganache CLI。
Dapp:去中心化的應用程序
以太坊社區把基於智能合約的應用稱為去中心化的應用程序(DecentralizedApp)。如果我們把區塊鏈理解為一個不可篡改的資料庫,智能合約理解為和資料庫打交道的程序,那就很容易理解Dapp了,一個Dapp不單單有智能合約,比如還需要有一個友好的用戶界面和其他的東西。
Truffle
Truffle是Dapp開發框架,他可以幫我們處理掉大量無關緊要的小事情,讓我們可以迅速開始寫代碼-編譯-部署-測試-打包DApp這個流程。
總結
我們現在來總結一下,以太坊是平台,它讓我們方便的使用區塊鏈技術開發去中心化的應用,在這個應用中,使用Solidity來編寫和區塊鏈交互的智能合約,合約編寫好後之後,我們需要用以太坊客戶端用一個有餘額的賬戶去部署及運行合約(使用Truffle框架可以更好的幫助我們做這些事情了)。為了開發方便,我們可以用Geth或testrpc來搭建一個測試網路。
註:本文中為了方便大家理解,對一些概念做了類比,有些嚴格來不是准確,不過我也認為對於初學者,也沒有必要把每一個概念掌握的很細致和准確,學習是一個逐步深入的過程,很多時候我們會發現,過一段後,我們會對同一個東西有不一樣的理解。

⑨ 011:Ethash演算法|《ETH原理與智能合約開發》筆記

待字閨中開發了一門區塊鏈方面的課程:《深入淺出ETH原理與智能合約開發》,馬良老師講授。此文集記錄我的學習筆記。

課程共8節課。其中,前四課講ETH原理,後四課講智能合約。
第四課分為三部分:

這篇文章是第四課第一部分的學習筆記:Ethash演算法。

這節課介紹的是以太坊非常核心的挖礦演算法。

在介紹Ethash演算法之前,先講一些背景知識。其實區塊鏈技術主要是解決一個共識的問題,而共識是一個層次很豐富的概念,這里把范疇縮小,只討論區塊鏈中的共識。

什麼是共識?

在區塊鏈中,共識是指哪個節點有記賬權。網路中有多個節點,理論上都有記賬權,首先面臨的問題就是,到底誰來記帳。另一個問題,交易一定是有順序的,即誰在前,前在後。這樣可以解決雙花問題。區塊鏈中的共識機制就是解決這兩個問題,誰記帳和交易的順序。

什麼是工作量證明演算法

為了決定眾多節點中誰來記帳,可以有多種方案。其中,工作量證明就讓節點去算一個哈希值,滿足難度目標值的勝出。這個過程只能通過枚舉計算,誰算的快,誰獲勝的概率大。收益跟節點的工作量有關,這就是工作量證明演算法。

為什麼要引入工作量證明演算法?

Hash Cash 由Adam Back 在1997年發表,中本聰首次在比特幣中應用來解決共識問題。

它最初用來解決垃圾郵件問題。

其主要設計思想是通過暴力搜索,找到一種Block頭部組合(通過調整nonce)使得嵌套的SHA256單向散列值輸出小於一個特定的值(Target)。

這個演算法是計算密集型演算法,一開始從CPU挖礦,轉而為GPU,轉而為FPGA,轉而為ASIC,從而使得算力變得非常集中。

算力集中就會帶來一個問題,若有一個礦池的算力達到51%,則它就會有作惡的風險。這是比特幣等使用工作量證明演算法的系統的弊端。而以太坊則吸取了這個教訓,進行了一些改進,誕生了Ethash演算法。

Ethash演算法吸取了比特幣的教訓,專門設計了非常不利用計算的模型,它採用了I/O密集的模型,I/O慢,計算再快也沒用。這樣,對專用集成電路則不是那麼有效。

該演算法對GPU友好。一是考慮如果只支持CPU,擔心易被木馬攻擊;二是現在的顯存都很大。

輕型客戶端的演算法不適於挖礦,易於驗證;快速啟動

演算法中,主要依賴於Keccake256 。

數據源除了傳統的Block頭部,還引入了隨機數陣列DAG(有向非循環圖)(Vitalik提出)

種子值很小。根據種子值生成緩存值,緩存層的初始值為16M,每個世代增加128K。

在緩存層之下是礦工使用的數據值,數據層的初始值是1G,每個世代增加8M。整個數據層的大小是128Bytes的素數倍。

框架主要分為兩個部分,一是DAG的生成,二是用Hashimoto來計算最終的結果。

DAG分為三個層次,種子層,緩存層,數據層。三個層次是逐漸增大的。

種子層很小,依賴上個世代的種子層。

緩存層的第一個數據是根據種子層生成的,後面的根據前面的一個來生成,它是一個串列化的過程。其初始大小是16M,每個世代增加128K。每個元素64位元組。

數據層就是要用到的數據,其初始大小1G,現在約2個G,每個元素128位元組。數據層的元素依賴緩存層的256個元素。

整個流程是內存密集型。

首先是頭部信息和隨機數結合在一起,做一個Keccak運算,獲得初始的單向散列值Mix[0],128位元組。然後,通過另外一個函數,映射到DAG上,獲取一個值,再與Mix[0]混合得到Mix[1],如此循環64次,得到Mix[64],128位元組。

接下來經過後處理過程,得到 mix final 值,32位元組。(這個值在前面兩個小節《 009:GHOST協議 》、《 010:搭建測試網路 》都出現過)

再經過計算,得出結果。把它和目標值相比較,小於則挖礦成功。

難度值大,目標值小,就越難(前面需要的 0 越多)。

這個過程也是挖礦難,驗證容易。

為防止礦機,mix function函數也有更新過。

難度公式見課件截圖。

根據上一個區塊的難度,來推算下一個。

從公式看出,難度由三部分組成,首先是上一區塊的難度,然後是線性部分,最後是非線性部分。

非線性部分也叫難度炸彈,在過了一個特定的時間節點後,難度是指數上升。如此設計,其背後的目的是,在以太坊的項目周期中,在大都會版本後的下一個版本中,要轉換共識,由POW變為POW、POS混合型的協議。基金會的意思可能是使得挖礦變得沒意思。

難度曲線圖顯示,2017年10月,難度有一個大的下降,獎勵也由5個變為3個。

本節主要介紹了Ethash演算法,不足之處,請批評指正。

熱點內容
未來有和比特幣同水平投資 發布:2024-11-14 23:11:12 瀏覽:378
懷舊服挖礦245以後去貼吧 發布:2024-11-14 23:11:05 瀏覽:125
以太坊貓咪在哪買 發布:2024-11-14 22:52:02 瀏覽:201
道奇霸王龍trx對比謝爾比f150 發布:2024-11-14 22:33:07 瀏覽:740
星露穀物語挖礦下不去 發布:2024-11-14 22:21:17 瀏覽:91
數字貨幣能否兌換紙幣 發布:2024-11-14 22:15:51 瀏覽:498
幣圈場外交易手續費 發布:2024-11-14 22:15:37 瀏覽:307
amd顯卡rx580挖礦 發布:2024-11-14 21:53:18 瀏覽:114
貝爾鏈礦機停了 發布:2024-11-14 21:49:10 瀏覽:436
去月子中心浪費錢 發布:2024-11-14 21:38:34 瀏覽:134