使用Browser-solidity來編譯合約&部署合約
在上一章中部署在Geth上的原始程式碼如下:
pragma solidity 0.4.9; contract DemoTypes { function f(uint a) returns (uint b) { uint result = a * 8; return result; } } 這個時候在這個位址的左側, 複製黏貼上述的代碼, 然後就可以看到右側編譯好的代碼:智慧合約Solidity 原始程式碼分析
這個最簡單的智慧合約代碼如下:
我們接下來試著做一些簡單的分析, 並介紹一些最基本的Solidity知識第一行 pragma solidity 0.4.9; 第一行代碼是必須的, 否則編譯器將不知道該如何選擇編譯器, 以及編譯器版本。 第一行的pragma soliditypragmasolidity0.4.9注意:從0.4.9起可以在前面不打^,0.4.8/0.4.7等版本還是需要打^
第二行contract DemoTypes { ... }
這裡引用一段說明Solidity裡的Contract
Contracts in Solidity are similar to classes in object-oriented languages. They contain persistent data in state variables and functions that can modify these variables. Calling a function on a different contract (instance) will perform an EVM function call and thus switch the context such that state variables are inaccessible. (引用自 here
中文翻譯:
Solidity中Contract和物件導向語言中的類很相像。 有帶持久資料的變數, 以及能改變這些變數的function. 在不同的Contract實例中調用一個function, 將會執行一個在EVM(乙太坊虛擬機器)中的function調用。
由此可見,第三行function f(uint a) returns (uint b) { ... } 上面說過, contract中包含了變數&方法(function)。 function f(uint a) returns (uint b)fuint auint buint 代表無狀態的整型數位, 即大於0的整數uint = uint256, 最大值為2的256次方, 這個數字對於絕大多數的數學運算是足夠得了。 相對於uint來說還有帶負數的整數類型, 即int, int=int256, 取值範圍從 負2的128次方到正2的128次方 uint/int類型細節請參見後面的Int類型介紹。 或者點擊here
Function的核心代碼function f(uint a) returns (uint b) { uint result = a * 8; return result; } 這是一段很平常的js代碼, 值得注意的是以下兩點 Solidity是一個類型語言, 因此每個變數都需要定義他的類型, uint/int/string/var
Solidity is a statically typed language, which means that the type of each variable (state and local) needs to be specified (or at least known – see Type Deduction below) at compile-time. Solidity provides several elementary types which can be combined to form complex types. 引用自here
關於編碼風格 uint result = a * 8;More than one space around an assignment or other operator to align with 引用自here
更多關於Solidity的編碼風格, 請參考官方文檔 https://solidity.readthedocs.io/en/develop/style-guide.html
經過上面的代碼, 我們知道了關於智慧合約的一些基礎知識, 下篇將開始講解Browser-solidity右側的奧秘
首先重複一遍Browser-solidity的地址:https://ethereum.github.io/browser-solidity
Browser-solidity是一個官方提供的一個基於流覽器的合約編譯器, 非常好用, 而且build版本會緊跟最新的Solidity的build版本。 但由於網路原因以及GFW的存在, 有可能會另一部分人訪問很慢, 進而影響開發效率。 下面介紹如何在本地部署Browser-solidity
本地部署Browser-solidity方法npm install # fetch dependencies npm run build # build application into build/app.js Step 3: 啟動npm 伺服器 npm run serve
本地打開效果如下:然後就可以隨意的撰寫自己的智慧合約了。
Browser-solidity 細節詳解
這裡用到的Browser-solidity是官網的, 如果打不開或者速度太慢, 請參照上面的本地搭建方法。 Browser-solidity的右側詳細解析, 請參看下圖:
到這裡為止,我們已經詳細剖析了一個最簡單的智慧合約,以及乙太坊的一些底層技術細節。下一章中,我們仍將在browser-solidity這個工具中,討論稍微複雜點的智慧合約。
發文時比特幣標準價格 買價:¥7201.00 賣價:¥7108.00
3.點擊create,會在記憶體中將該智慧合約創建一個實例,即將下面的web3 deploy代碼部署在虛擬的記憶體中。4.bytecode是原始程式碼的編譯產物,這個也是最終會被放到區塊鏈上的標識。任何在網路裡的人都可以讀到這段bytecode.5.interface 是智慧合約除了bytecode之外的另一個核心,他是該智慧合約和外界溝通的核心6.web3.deploy 代碼,是可以直接部署在geth網路上的一段部署代碼,在上一章中,我們已經試過了,只要複製黏貼這段代碼,就可以直接在一個區塊鏈私有鏈上進行部署,並且調用他。7.from 代表合約由那個帳戶生成,那個帳戶生成,則生成所需的gas就需要該帳戶承擔,預設為eth.accounts[0],因為所有的挖礦所得的乙太幣也預設都存入該帳戶中區。 data: 代表的就是bytecode gas: 代表的是為了部署該合約最多準備的gas數量,當然實際上可能用不了這麼多gas,具體消耗以實際使用量為准,這裡只是設定一個最大量。8.最後這段是一個典型的javascript的非同步調用的寫法,將上面的new方法的結果傳遞給下一個方法 function(e,contract) 在下一個方法中處理如果挖礦成功的顯示結果。到這裡為止,我們已經詳細剖析了一個最簡單的智慧合約,以及乙太坊的一些底層技術細節。下一章中,我們仍將在browser-solidity這個工具中,討論稍微複雜點的智慧合約。
發文時比特幣標準價格 買價:¥7201.00 賣價:¥7108.00