0125 - EOS 編程學習日誌(2)

關於 EOS 學習,今天仍是有些收穫的。html

關於去中心化的理解

首先,我對去中心化的理解也在不斷學習中,如下表述不必定正確,君且一聽。git

要理解去中心化,首先來對比看看中心化。github

好比,咱們要實現一個在線五子棋的遊戲(只是我隨便舉的例子,方便理解),須要這些元素:編程

  • 定義遊戲的規則
    • 好比,若是已經在某個點上下了一個子,就不能重複在相同的點上下子
    • 好比,知足連續五子,便可以贏了比賽
  • 記錄遊戲的狀態
    • 好比,誰在哪些點上下了子
  • 執行遊戲的規則
    • 好比,當一方出現連續五子時,斷定其贏,且結束比賽
  • 權限
    • 好比,誰有權加入比賽

在中性化的設計中,很明顯上述元素都是在中心服務器中完成的。那對於區塊鏈、也即 EOS 中,是如何對應的呢?api

  • 記錄遊戲的狀態
    • 這是記錄在區塊中的
  • 定義、執行遊戲的規則
    • 這是包含在智能合約(contract)中的,也即 .hpp/.cpp 所轉換的 .abi/.wast 中的代碼
  • 權限
    • 這是記錄在 account 及 wallet 中的

能夠看出,去中心化並不能減小這個程序中的任一環節,只是用本身的方式來實現。在初入區塊鏈領域時,能夠藉助中心化的思路來幫助理解。但若是真的要完全進入區塊鏈的世界,仍是要慢慢切換爲去中心化的思惟模式。bash

建立錢包、帳戶

不論在概念上、仍是操做上,錢包(wallet)、帳戶(account)這 2 個概念都是很是關聯的,你基本上不能離開一方去使用另外一方。服務器

關於這部分,官方文檔 介紹的仍是挺清楚的,建議去看一遍。框架

學習智能合約(smart contract)

從上面的介紹能夠看出,尤爲在 EOS 提供基礎框架後,基於 EOS 的開發,代碼上主要是實現智能合約(smart contract)工具

關於這部分,建議跟着 官方文檔 走一遍,就能有基本的理解。學習

不過,這其中有些概念比較拗,我還沒徹底理解。尤爲,我基本已經不會 cpp 代碼了,只能照着例子運行,還不能全新地編輯本身的合約,因此理解上只能是個大概。

使用 REST 接口與 EOS 交互

目前,EOS 的合約是使用 hpp/cpp 開發的。而一旦將合約佈置到 EOS 上,就能夠經過 EOS 所暴露的 REST 接口來使用這些合約。

注:在教程和練習中,咱們大量使用 eosc 命令。其實,根據 官方文檔,eosc is a command line tool that interfaces with the REST api exposed by eosd. 也即,eosc 就是方便你調用 eosd 所暴露出來的 REST 接口的工具。

天然,除了使用 eosc,你可使用本身喜歡的語言編寫程序,調用這些 REST 接口。

那麼,eosd 目前提供了哪些 REST 接口呢?參見 官方文檔

須要注意的是,目前 REST 接口還不全、不完善,期待官方能加快這一進度。

EOS 須要 21 個生產者,才能產生區塊

eosd 有個坑:EOS 是須要 21 個生產者中的 15 個及以上確認的,但默認的 data-dir/config.ini 中僅有 2 個生產者:

producer-name = inita
producer-name = initb
複製代碼

須要手動增長至 21 個,即 a-u:

producer-name = inita
producer-name = initb
producer-name = initc
producer-name = initd
producer-name = inite
producer-name = initf
producer-name = initg
producer-name = inith
producer-name = initi
producer-name = initj
producer-name = initk
producer-name = initl
producer-name = initm
producer-name = initn
producer-name = inito
producer-name = initp
producer-name = initq
producer-name = initr
producer-name = inits
producer-name = initt
producer-name = initu
複製代碼

若是不這樣作,會有什麼問題呢?會致使區塊沒法產生,相似這樣的錯誤:

chain_controller.cpp:1046     validate_block_heade ] head_block_time 2018-01-25T12:40:15, next_block 2018-01-25T12:40:35, block_interval 1
chain_controller.cpp:1048     validate_block_heade ] Did not produce block within block_interval 1, took 20000ms)
複製代碼

進而,由於區塊沒法產生,你在當前 eosd 環境中的全部操做,都沒法記錄,如建立帳戶、建立合約、等等;也即,關閉 eosd 再次運行時,你會發現以前建立的數據全沒了。不過,和 wallet 相關的操做都是記錄的,由於這是由 eos-walletd 完成的,和 eosd 無關。

這個坑,我踩了好久;最後,仍是 eosfans.xyz 君幫我出坑,在此謝過。

博客原文:0125 - EOS 編程學習日誌(2)

相關文章
相關標籤/搜索