以太坊入門學習筆記-合約準備

在以太坊上智能合約的流程如下:

創建:

  • 編寫智能合約
  • 編譯智能合約為字節碼
  • 部署到區塊鏈上

調用:

  • 發起一筆指向合約的交易

那麼智能合約理解為開發者用Solidity語言編寫的代碼編譯後的程序。編譯環境為Solidity的編譯環境,執行環境即為以太坊節點中EVM。

Solidity合約編譯後是一串16進制的代碼。創建後在調用過程中,用戶發起eth_sendTransaction、eth_call創建或者調用智能合約的時候,需要data字段中填入16進制碼,見下圖智能合約的流程中的內容:

合約創建流程具體內容創建合約編寫智能合約編譯智能合約代碼編譯成字節碼部署把字節碼部署到區塊鏈網絡中格式from:發起者、to:空、value:數值、data:字節碼、signature:簽名調用發起交易調用合約格式from:發起者、to:SC地址、value:數值、data:方法調用、signature:簽名

在囉嗦下,在創建智能合約的時候,那麼在EVM中字節碼會解析為相應的指令集序列,(學過彙編的同學應該明白計算機運行原理),這些內容存儲到一個新建的智能合約地址中,在用戶調用合約的時候,那麼根據上圖中的to字段獲取當前合約的信息,EVM根據data字段中的函數和參數生成指令內容。然後再執行執行獲得結果,這個時候賬戶的狀態就隨著內容改變。

Solidity編譯器

Solidity github地址:https://github.com/ethereum/solidity (C++語言編寫,熟悉C++的同學可以看下)

Solidity不單單能編譯字節碼,還有一個Solc工具。該工具提供一系列合約相關的信息,大致內容參考如下:

安裝(來自:https://blog.csdn.net/u013137970/article/details/52255001)

輸入以下命令安裝solc6:

sudo npm install -g solc

安裝完後,我們就會發現在終端中輸入solc命令返回一個出錯信息。這是因為solc只是一個程序集,如果我們想要在終端中使用solc程序編譯智能合約,則需要安裝solc-cli,這是solc的命令行界面。

輸入以下命令安裝solc-cli:

sudo npm install -g solc-cli

輸入以下命令可以一併安裝solc和solc-cli7(推薦使用此命令安裝):

sudo npm install -g solc solc-cli --save-dev

如果輸入solcjs --help命令,有以下輸出,則表明solc和solc-cli安裝成功:

solcjs --helpUsage: solcjs [options] [input_file...]Options: --version Show version number [boolean] --optimize Enable bytecode optimizer. [boolean] --bin Binary of the contracts in hex. [boolean] --abi ABI of the contracts. [boolean] --interface Solidity Interface of the contracts. [boolean] --output-dir, -o Output directory for the contracts. [string] --help Show help [boolean]

命令具體內容ast-jsonjson格式內容抽象語法樹asmEVM彙編語言opcodes操作碼bin十六進制字節碼bin-runtime運行一部分十六進制碼abi應用程序二進制接口規範metadata編譯源文件的元數據gas編譯時打印出估算的gaslibraries libs指定合約的依賴庫userdoc用戶說明文檔devdoc開發者文檔

以太坊提供solidity IDE:Mix和Remix。

這裡主要說Remix。

Remix是基於瀏覽器的solidity編譯器和集成開發環境。地址如下:

Remix:https://remix.ethereum.org

關於remix的操作詳見輝哥簡書:第十課 Solidity語言編輯器REMIX指導大全

如圖:

以太坊入門學習筆記-合約準備

左邊是文件瀏覽器、中上是智能合約代碼編輯器、中下為命令行終端、右邊為調試工具欄。

  • 文件瀏覽器:顧名思義這邊用戶文件的添加、添加本地的源代碼到Remix上,也用於發佈到github上,也可以傳入到另外一個新建的Remix界面。
  • 智能合約編輯器:編輯相關智能合約代碼,在數字欄中會出現編譯警告和錯誤的提示。同時和一般編輯器一樣會有自動保存,放大和縮小。
  • 命令行終端:集成了JavaScript的解釋器,同時提供直接可用web3對象。編寫一些簡單的JavaScript腳本,終端還能顯示用戶調用部署智能合約的交易信息。
  • 調試工具欄:編譯、執行、編譯設置、調試工具、分析等功能。

Truffle

Truffle 是一個以太坊智能合約開發框架,利用它可以方便地生成項目模板、編譯合約、部署合約到區塊鏈、測試合約等等。來自磨鏈精通以太坊

Truffle 是世界級的開發環境、測試框架、以太坊的資源管理通道,致力於讓以太坊上的開發變得簡單,使用 Truffle,可以:

內置的智能合約編譯,鏈接,部署和二進制文件的管理。快速開發下的自動合約測試。腳本化的,可擴展的部署與發佈框架。部署到不管多少的公網或私網的網絡環境管理功能使用EthPM&NPM提供的包管理,使用ERC190標準。與合約直接通信的直接交互控制檯(寫完合約就可以命令行裡驗證了)。可配的構建流程,支持緊密集成。在Truffle環境裡支持執行外部的腳本。

安裝 truffle

通過 npm 安裝最新版:

npm install -g truffle

檢查是否安裝成功

truffle version
  • 如果安裝失敗,也許是權限問題。嘗試使用 sudo 安裝。
sudo npm install -g truffle 

更多細節,見官方文檔: http://truffleframework.com/docs/getting_started/installation 。

創建項目

首先新建一個工程目錄

mkdir myContractcd myContract

接下來,通過下面的命令初始化一個 Truffle 工程:

truffle init執行後,會在當前目錄生成一個項目模板,生成的工程目錄結構如下:myproject├── contracts│ └── Migrations.sol├── migrations│ └── 1_initial_migration.js├── test├── truffle-config.js└── truffle.js3 directories, 4 files

其中 contracts 文件夾是 Truffle 默認的合約文件存放地址、migrations 中存放的是發佈合約的腳本、test 是用來測試應用和合約的測試腳本、truffle.js 是 Truffle 的配置文件。


分享到:


相關文章: