『壹』 怎麼接以太坊公鏈
建立連接以接儒以太坊公鏈。
一、1、以太坊客戶端下載,注意:需翻牆,下載版本為1.8.23-stable,否則可能出現與以太坊錢包客戶端存在不匹配問題。
2、以太坊錢包客戶端下載。
3、安裝以太坊客戶端。
二、私有鏈創建:創建創世區塊。
三、安裝並啟動以太坊錢包客戶端。
『貳』 安卓手機怎麼安裝imtoke
imtoken安卓版下載步驟如下:
1、微信搜索imtoken
2、下載安裝imtoken
3、啟動imtoken客戶端
4、啟動imtokenx錢包
5、點擊右上角「+」號(時間不宜太長)
1、從imtoken獲取通過在imtoken官網注冊imtoken可免費獲取dash、eth、zec、btc、bts、bch、etc、bts、zec、etc等6個主流幣,完成dash、eth、zec、btc的下載安裝後,可以使用aeternity錢包下載下載好的幣之後,手機通過usb線連接電腦imtoken(imtoken錢包)需要電腦安裝imtoken客戶端,聯網才能運行imtoken錢包。
2、安裝imtoken錢包。
3、設置登錄郵箱、錢包密碼imtoken(imtoken錢包)是基於ethereum,是真正的去中心化錢包,因此用戶不再需要安裝錢包客戶端了。同時,它本身擁有一個私鑰,錢包用戶不需要與錢包客戶端直接關聯,用戶可以直接與imtoken自己的私鑰保存自己的比特幣。更為關鍵的是,imtoken可以隨時變更你的錢包私鑰。
因此,imtoken錢包一方面是用戶理財的工具,一方面是所有比特幣價值的錨定。用戶可以像炒股一樣通過以太坊進行高收益投資,imtoken錢包還會自動定期發布類似比特幣api實時行情來進行買賣操作。
『叄』 以太坊平台版本怎麼下載
通過官網下載。
我們的推進非常快:第一個升級的測試網是Ropsten,計劃於3月10日升級。主網升級計劃在4月14日進行。如果你在運行以太坊節點,你應該盡快升級到用於測試網的、兼容柏林的版本,且在4月7日前升級用於主網的版本。查看下面兼容柏林的客戶端版本以及納入此次升級的EIP的細節。柏林升級時間經過多個月得計劃,柏林升級終於要來了!。
繼伊斯坦布Istanbul)與繆爾冰川(MuirGlacier)升級後,柏林升級計劃於以太坊主網區塊高度12,244,000部署。我們期望它在2021年4月14日周三左右上線,但由於區塊時間是可變的,確切日期可能有變。
『肆』 以太坊錢包賬戶怎麼登錄
下載錢包登錄。
1、下載錢包:打開以太坊官網,找到最新版本的下載鏈接進行下載。2、安裝錢包:把下載的壓縮包解壓(找個磁碟可用空間大一點的盤),假設解壓後路徑為D:Ethereum-Wallet-win64-0-9-3。3、進入錢包:雙擊運行D:Ethereum-Wallet-win64-0-9-3win-unpackedEthereumWallet。exe。選擇USETHEMAINNETWORK。選擇SKIP。輸入密碼,點擊NEXT,提示你務必備份好密鑰文件夾和密碼,點擊確定。如果你有比特幣,可以點擊DEPOSITUSINGBITCOIN,使用比特幣兌換以太幣。如果此時可以看到LAUNCHAPPLICATION就點擊進入錢包,如果看不到,就稍等一下。
以太坊(英文Ethereum)是一個開源的有智能合約功能的公共區塊鏈平台,通過其專用加密貨幣以太幣(Ether,簡稱「ETH」)提供去中心化的以太虛擬機(EthereumVirtualMachine)來處理點對點合約。
『伍』 用Go來做以太坊開發⑤事件日誌
智能合約具有在執行期間「發出」事件的能力。 事件在以太坊中也稱為「日誌」。 事件的輸出存儲在日誌部分下的事務處理中。 事件已經在以太坊智能合約中被廣泛使用,以便在發生相對重要的動作時記錄,特別是在代幣合約(即ERC-20)中,以指示代幣轉賬已經發生。 這些部分將引導您完成從區塊鏈中讀取事件以及訂閱事件的過程,以便交易事務被礦工打包入塊的時候及時收到通知。
為了訂閱事件日誌,我們需要做的第一件事就是撥打啟用websocket的以太坊客戶端。 幸運的是,Infura支持websockets。
下一步是創建篩選查詢。 在這個例子中,我們將閱讀來自我們在之前課程中創建的示例合約中的所有事件。
我們接收事件的方式是通過Go channel。 讓我們從go-ethereum core/types 包創建一個類型為 Log 的channel。
現在我們所要做的就是通過從客戶端調用 SubscribeFilterLogs 來訂閱,它接收查詢選項和輸出通道。 這將返回包含unsubscribe和error方法的訂閱結構。
最後,我們要做的就是使用select語句設置一個連續循環來讀入新的日誌事件或訂閱錯誤。
我們會在下個章節介紹如何解析日誌。
Commands
Store.sol
event_subscribe.go
智能合約可以可選地釋放「事件」,其作為交易收據的一部分存儲日誌。讀取這些事件相當簡單。首先我們需要構造一個過濾查詢。我們從go-ethereum包中導入 FilterQuery 結構體並用過濾選項初始化它。我們告訴它我們想過濾的區塊范圍並指定從中讀取此日誌的合約地址。在示例中,我們將從在 智能合約章節 創建的智能合約中讀取特定區塊所有日誌。
下一步是調用ethclient的 FilterLogs ,它接收我們的查詢並將返回所有的匹配事件日誌。
返回的所有日誌將是ABI編碼,因此它們本身不會非常易讀。為了解碼日誌,我們需要導入我們智能合約的ABI。為此,我們導入編譯好的智能合約Go包,它將包含名稱格式為 <Contract>ABI 的外部屬性。之後,我們使用go-ethereum中的 accounts/abi 包的 abi.JSON 函數返回一個我們可以在Go應用程序中使用的解析過的ABI介面。
現在我們可以通過日誌進行迭代並將它們解碼為我么可以使用的類型。若您回憶起我們的樣例合約釋放的日誌在Solidity中是類型為 bytes32 ,那麼Go中的等價物將是 [32]byte 。我們可以使用這些類型創建一個匿名結構體,並將指針作為第一個參數傳遞給解析後的ABI介面的 Unpack 函數,以解碼原始的日誌數據。第二個參數是我們嘗試解碼的事件名稱,最後一個參數是編碼的日誌數據。
此外,日誌結構體包含附加信息,例如,區塊摘要,區塊號和交易摘要。
若您的solidity事件包含 indexed 事件類型,那麼它們將成為 主題 而不是日誌的數據屬性的一部分。在solidity中您最多隻能有4個主題,但只有3個可索引的事件類型。第一個主題總是事件的簽名。我們的示例合約不包含可索引的事件,但如果它確實包含,這是如何讀取事件主題。
正如您所見,首個主題只是被哈希過的事件簽名。
這就是閱讀和解析日誌的全部內容。要學習如何訂閱日誌,閱讀上個章節。
命令
Store.sol
event_read.go
首先,創建ERC-20智能合約的事件日誌的interface文件 erc20.sol :
然後在給定abi使用 abigen 創建Go包
現在在我們的Go應用程序中,讓我們創建與ERC-20事件日誌簽名類型相匹配的結構類型:
初始化以太坊客戶端
按照ERC-20智能合約地址和所需的塊范圍創建一個「FilterQuery」。這個例子我們會用 ZRX 代幣:
用 FilterLogs 來過濾日誌:
接下來我們將解析JSON abi,稍後我們將使用解壓縮原始日誌數據:
為了按某種日誌類型進行過濾,我們需要弄清楚每個事件日誌函數簽名的keccak256哈希值。 事件日誌函數簽名哈希始終是 topic [0] ,我們很快就會看到。 以下是使用go-ethereum crypto 包計算keccak256哈希的方法:
現在我們將遍歷所有日誌並設置switch語句以按事件日誌類型進行過濾:
現在要解析 Transfer 事件日誌,我們將使用 abi.Unpack 將原始日誌數據解析為我們的日誌類型結構。 解包不會解析 indexed 事件類型,因為它們存儲在 topics 下,所以對於那些我們必須單獨解析,如下例所示:
Approval 日誌也是類似的方法:
最後,把所有的步驟放一起:
我們可以把解析的日誌與etherscan的數據對比: https://etherscan.io/tx/#eventlog
Commands
erc20.sol
event_read_erc20.go
solc version used for these examples
要讀取 0x Protocol 事件日誌,我們必須首先將solidity智能合約編譯為一個Go包。
安裝solc版本 0.4.11
為例如 Exchange.sol 的事件日誌創建0x Protocol交易所智能合約介面:
Create the 0x protocol exchange smart contract interface for event logs as Exchange.sol :
接著給定abi,使用 abigen 來創建Go exchange 包:
Then use abigen to create the Go exchange package given the abi:
現在在我們的Go應用程序中,讓我們創建與0xProtocol事件日誌簽名類型匹配的結構體類型:
初始化以太坊客戶端:
創建一個 FilterQuery ,並為其傳遞0x Protocol智能合約地址和所需的區塊范圍:
用 FilterLogs 查詢日誌:
接下來我們將解析JSON abi,我們後續將使用解壓縮原始日誌數據:
為了按某種日誌類型過濾,我們需要知曉每個事件日誌函數簽名的keccak256摘要。正如我們很快所見到的那樣,事件日誌函數簽名摘要總是 topic[0] :
現在我們迭代所有的日誌並設置一個switch語句來按事件日誌類型過濾:
現在要解析 LogFill ,我們將使用 abi.Unpack 將原始數據類型解析為我們自定義的日誌類型結構體。Unpack不會解析 indexed 事件類型,因為這些它們存儲在 topics 下,所以對於那些我們必須單獨解析,如下例所示:
對於 LogCancel 類似:
最後是 LogError :
將它們放在一起並運行我們將看到以下輸出:
將解析後的日誌輸出與etherscan上的內容進行比較: https://etherscan.io/tx/
命令
Exchange.sol
event_read_0xprotocol.go
這些示例使用的solc版本
『陸』 Docker 搭建以太坊私有鏈
首先需要安裝 Docker,Docker 的安裝和使用可以參看阮一峰老師的 《Docker 入門教程》 。
Ethereum 官方是支持 docker 的,可以參看 官方文檔 。
centOS
其中 -v /home/linshan/works/block-chain/ethereum:/root 是把我們當前的 ethereum 目錄,掛到了docker 的 /root 下。
在 Windows 環境下使用 -v /home/linshan/works/block-chain/ethereum:/root 不能啟動容器,原因不明,所以在 Windows 下先不要使用目錄掛載。
各欄位具體用途參看 官方文檔 。
Windows
Windows 不必創建 start-ethereum.sh 文件, genesis.json 也可以在 Docker 容器啟動後創建。
centOS
Windows
運行成功後執行
進入 docker 容器命令行
因為 Windows 沒有掛載共享目錄,所以 root 目錄下沒有 genesis.json 文件,我們要在這裏手動創建 genesis.json 文件,內容要和 centOS 的一致。
data 用來存放區塊數據
geth 的參數參看 以太坊客戶端Geth命令用法-參數詳解
啟動私有節點後進入 geth 命令行執行:
輸出的內容就是節點信息,我們在手動連接節點是會用到,注意要把「0.0.0.0「換成你自己的IP,然後將這個信息發送給其他節點。手動連接節點有兩種方式:
當然不管使用哪種方法連接節點都要保證創世區塊文件 genesis.json 一致,還有在啟動時 networkid 也要一致。
至此以太坊私有鏈已搭建完畢。
geth命令
docker命令
『柒』 怎麼安裝EVM(以太坊虛擬機)
就按說明書上的要求接,先測量一下紅綠線是不是對應介面的L1;黃黑線是不是對應L2,如果是,則肯定是正確的接線。電話線雖然有正負極之分,但接線端上可以隨便接入,因此電話機內部有個整流定向電路。 即使將L1、L2線接錯,也不會燒壞設備,所以可以放心大膽的測試。
『捌』 用Go來做以太坊開發④智能合約
在這個章節中我們會介紹如何用Go來編譯,部署,寫入和讀取智能合約。
與智能合約交互,我們要先生成相應智能合約的應用二進制介面ABI(application binary interface),並把ABI編譯成我們可以在Go應用中調用的格式。
第一步是安裝 Solidity編譯器 ( solc ).
Solc 在Ubuntu上有snapcraft包。
Solc在macOS上有Homebrew的包。
其他的平台或者從源碼編譯的教程請查閱官方solidity文檔 install guide .
我們還得安裝一個叫 abigen 的工具,來從solidity智能合約生成ABI。
假設您已經在計算機上設置了Go,只需運行以下命令即可安裝 abigen 工具。
我們將創建一個簡單的智能合約來測試。 學習更復雜的智能合約,或者智能合約的開發的內容則超出了本書的范圍。 我強烈建議您查看 truffle framework 來學習開發和測試智能合約。
這里只是一個簡單的合約,就是一個鍵/值存儲,只有一個外部方法來設置任何人的鍵/值對。 我們還在設置值後添加了要發出的事件。
雖然這個智能合約很簡單,但它將適用於這個例子。
現在我們可以從一個solidity文件生成ABI。
它會將其寫入名為「Store_sol_Store.abi」的文件中
現在讓我們用 abigen 將ABI轉換為我們可以導入的Go文件。 這個新文件將包含我們可以用來與Go應用程序中的智能合約進行交互的所有可用方法。
為了從Go部署智能合約,我們還需要將solidity智能合約編譯為EVM位元組碼。 EVM位元組碼將在事務的數據欄位中發送。 在Go文件上生成部署方法需要bin文件。
現在我們編譯Go合約文件,其中包括deploy方法,因為我們包含了bin文件。
在接下來的課程中,我們將學習如何部署智能合約,然後與之交互。
Commands
Store.sol
solc version used for these examples
如果你還沒看之前的章節,請先學習 編譯智能合約的章節 因為這節內容,需要先了解如何將智能合約編譯為Go文件。
假設你已經導入從 abigen 生成的新創建的Go包文件,並設置ethclient,載入您的私鑰,下一步是創建一個有配置密匙的交易發送器(tansactor)。 首先從go-ethereum導入 accounts/abi/bind 包,然後調用傳入私鑰的 NewKeyedTransactor 。 然後設置通常的屬性,如nonce,燃氣價格,燃氣上線限制和ETH值。
如果你還記得上個章節的內容, 我們創建了一個非常簡單的「Store」合約,用於設置和存儲鍵/值對。 生成的Go合約文件提供了部署方法。 部署方法名稱始終以單詞 Deploy 開頭,後跟合約名稱,在本例中為 Store 。
deploy函數接受有密匙的事務處理器,ethclient,以及智能合約構造函數可能接受的任何輸入參數。我們測試的智能合約接受一個版本號的字元串參數。 此函數將返回新部署的合約地址,事務對象,我們可以交互的合約實例,還有錯誤(如果有)。
就這么簡單:)你可以用事務哈希來在Etherscan上查詢合約的部署狀態: https://rinkeby.etherscan.io/tx/
Commands
Store.sol
contract_deploy.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
一旦使用 abigen 工具將智能合約的ABI編譯為Go包,下一步就是調用「New」方法,其格式為「New<contractname style="box-sizing: border-box; font-size: 16px; -ms-text-size-adjust: auto; -webkit-tap-highlight-color: transparent;">」,所以在我們的例子中如果你 回想一下它將是 NewStore 。 此初始化方法接收智能合約的地址,並返回可以開始與之交互的合約實例。</contractname>
Commands
Store.sol
contract_load.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
在上個章節我們學習了如何在Go應用程序中初始化合約實例。 現在我們將使用新合約實例提供的方法來閱讀智能合約。 如果你還記得我們在部署過程中設置的合約中有一個名為 version 的全局變數。 因為它是公開的,這意味著它們將成為我們自動創建的getter函數。 常量和view函數也接受 bind.CallOpts 作為第一個參數。了解可用的具體選項要看相應類的 文檔 一般情況下我們可以用 nil 。
Commands
Store.sol
contract_read.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
寫入智能合約需要我們用私鑰來對交易事務進行簽名。
我們還需要先查到nonce和燃氣價格。
接下來,我們創建一個新的keyed transactor,它接收私鑰。
然後我們需要設置keyed transactor的標准交易選項。
現在我們載入一個智能合約的實例。如果你還記得 上個章節 我們創建一個名為 Store 的合約,並使用 abigen 工具生成一個Go文件。 要初始化它,我們只需調用合約包的 New 方法,並提供智能合約地址和ethclient,它返回我們可以使用的合約實例。
我們創建的智能合約有一個名為 SetItem 的外部方法,它接受solidity「bytes32」格式的兩個參數(key,value)。 這意味著Go合約包要求我們傳遞一個長度為32個位元組的位元組數組。 調用 SetItem 方法需要我們傳遞我們之前創建的 auth 對象(keyed transactor)。 在幕後,此方法將使用它的參數對此函數調用進行編碼,將其設置為事務的 data 屬性,並使用私鑰對其進行簽名。 結果將是一個已簽名的事務對象。
現在我就可以看到交易已經成功被發送到了以太坊網路了: https://rinkeby.etherscan.io/tx/
要驗證鍵/值是否已設置,我們可以讀取智能合約中的值。
搞定!
Commands
Store.sol
contract_write.go
solc version used for these examples
有時您需要讀取已部署的智能合約的位元組碼。 由於所有智能合約位元組碼都存在於區塊鏈中,因此我們可以輕松獲取它。
首先設置客戶端和要讀取的位元組碼的智能合約地址。
現在你需要調用客戶端的 codeAt 方法。 codeAt 方法接受智能合約地址和可選的塊編號,並以位元組格式返回位元組碼。
你也可以在etherscan上查詢16進制格式的位元組碼 https://rinkeby.etherscan.io/address/#code
contract_bytecode.go
首先創建一個ERC20智能合約interface。 這只是與您可以調用的函數的函數定義的契約。
然後將interface智能合約編譯為JSON ABI,並使用 abigen 從ABI創建Go包。
假設我們已經像往常一樣設置了以太坊客戶端,我們現在可以將新的 token 包導入我們的應用程序並實例化它。這個例子里我們用 Golem 代幣的地址.
我們現在可以調用任何ERC20的方法。 例如,我們可以查詢用戶的代幣余額。
我們還可以讀ERC20智能合約的公共變數。
我們可以做一些簡單的數學運算將余額轉換為可讀的十進制格式。
同樣的信息也可以在etherscan上查詢: https://etherscan.io/token/?a=
Commands
erc20.sol
contract_read_erc20.go
solc version used for these examples
『玖』 選擇以太坊客戶端
有很多以太坊客戶端供我們選擇。我們推薦在開發和部署時使用不同的客戶端。
我們推薦 Ganache ,它是一個運行在你個人電腦上的私有連客戶端。它是 truffle 套種中的一部分,
Ganache 將智能合約和交易放在前台並且中心化,從而簡化了dapp的開發。使用 Ganache 你可以
快速查看你們的應用是如何影響區塊鏈的,並且對賬戶,余額,智能合約創建以及燃料消費進行自省。
Ganache 運行在 http://127.0.0.1:7545 。默認會創建是個賬戶,重啟後賬戶依然不會變,
當然也可以手動隨機賬戶,你也可以用你自己的賬戶。
我們同樣也推薦使用 truffle develop ,它是 truffle 內置的開發鏈工具。不需要任何的額外安裝,
你要使用它只需要一條命令行即可:
Truffle Develop 運行在 http://127.0.0.1:9545 上。
當你的開發機沒有圖形界面時就無法直接使用 Ganache ,而 Ganache CLI 就提供了沒有圖形界面系統的能力。
有很多官方和非官網的以太坊客戶端你可以選擇。以下是部分: