以太坊分析之 Solidity
以太坊介紹
以太坊(Ethereum)是一個建立在區塊鏈技術之上,去中心化應用平臺。它允許任何人在平臺中建立和使用通過區塊鏈技術執行的去中心化應用。
Solidity
以太坊中可以使用任何高階語言一樣來編寫智慧合約,智慧合約的預設的程式語言是Solidity,副檔名以.sol結尾。Solidity是一種語法類似JavaScript的高階語言。它被設計成以編譯的方式生成以太坊虛擬機器程式碼。使用Solidity很容易建立用於投票、眾籌、封閉拍賣、多重簽名錢包等等的智慧合約。
Solidity智慧合約檔案結構
//版本申明 pragma solidity ^0.4.18; //引用 import “filename”; //合約 contract ContractName{ ... } |
Solidity的合約和麵向物件語言中的類的定義相似。每個合約包括了狀態變數,函式,函式修飾符,事件,結構型別 和列舉型別。另外,合約也可以從其他合約中繼承 。
- 狀態變數是在合約存貯器中永久存貯的值
- 函式是合約中可執行單位的程式碼
- 函式修飾符可以在宣告的方式中補充函式的語義
- 事件是和EVM(以太虛擬機器)日誌設施的方便的介面
- 結構是一組使用者定義的變數
- 列舉是用來建立一個特定值的集合的型別
關於Solidity的語法教程推薦一個部落格:
1 | https://www.cnblogs.com/tinyxiong/p/7997755.html | |
2 | https://www.cnblogs.com/tinyxiong/p/8031730.html | |
3 | https://www.cnblogs.com/tinyxiong/p/8039808.html | |
4 | https://www.cnblogs.com/tinyxiong/p/8084477.html | |
5 | https://www.cnblogs.com/tinyxiong/p/8108051.html | |
6 | https://www.cnblogs.com/tinyxiong/p/8137729.html | |
7 | https://www.cnblogs.com/tinyxiong/p/8407233.html | |
8 | https://www.cnblogs.com/tinyxiong/p/8573900.html | |
10 | https://www.cnblogs.com/tinyxiong/p/8783611.html |
Remix
Remix是一個開源的 Solidity 智慧合約開發環境,提供基本的編譯、部署至本地或測試網路、執行合約等功能。Solidity 是以太坊Ethereum 官方設計和支援的開發語言,專門用於編寫智慧合約。
Remix適合程式設計經驗不多的初學者。但無法做到版本控制、測試及和其他開發工具一起使用等,實際上要開發 DApp,使用 Truffle、Ganache、web3.js 來編譯和部署合約比較方便和專業些更適合開發人員。
開發環境
Remix是一個網站http://remix.ethereum.org,開發者可以直接線上使用:
如果編譯報錯mock compiler:source not found的話可以使用另一個地址:
https://ethereum.github.io/browser-solidity/#optimize=false&version=soljson-v0.4.23+commit.124ca40d.js
編譯
點選Remix也沒左上角的加號按鈕新建一個合約檔案MyToken.sol
pragma solidity ^0.4.0; contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; /* Initializes contract with initial supply tokens to the creator of the contract */ function MyToken(uint256 initialSupply) public { balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens } /* Send coins */ function transfer(address _to, uint256 _value) public { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough require(balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient } } |
這個是Ethereum 官網有提供一個最小可執行的代幣合約,MyToken 合約真的只能做兩件事
- 建立代幣:發起合約時建立指定數量的代幣,代幣擁有者是發起合約的 Ethereum 帳戶
- 轉移代幣:轉移指定數量的代幣到指定的 Ethereum 帳戶
合約檔案建立完成後點選Remix也沒右上角的編譯按鈕,忽略告警的話就已經編譯成功。
執行
編譯成功後,在Remix頁面右上角選擇Run標籤, 首先選擇環境,選擇 JavaScript VM 代表所有資料都是存在本地(功能類似 testrpc)。它會提供 5 個虛擬賬戶每個有 100 ETH:
接著選擇MyToken合約,輸入初始值(發行的代幣數目),創然後點選Create來部署合約:
控制檯可以看到執行日誌:
合約部署成功後,可以看到合約的使用介面。Remix 會自動根據合約的內容,產生對應的合約使用介面。可以看到合約有兩個功能:balanceOf(查詢餘額) 和 transfer(轉移代幣)。
部署合約的時候初始化1000代幣,對應的地址是在環境選擇的賬戶,查詢餘額:
選擇另一個賬戶進行轉移代幣:
在輸入框輸入地址和代幣數:"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db", 10
同時轉移成功後查詢餘額:
在執行操作的時候可以在控制檯看到日誌:
因為合約的執行是需要消耗Gas的,所以可以看到賬戶的以太幣會減少:
參考
- http://wiki.jikexueyuan.com/project/solidity-zh/introduction.html
- http://baijiahao.baidu.com/s?id=1598229422200506116&wfr=spider&for=pc
作者簡介
吳龍輝,《Kubernetes實戰》作者,活躍於技術開源社群,貢獻程式碼和撰寫技術文件。郵箱:[email protected]
相關推薦
以太坊分析之 Solidity
以太坊介紹以太坊(Ethereum)是一個建立在區塊鏈技術之上,去中心化應用平臺。它允許任何人在平臺中建立和使用通過區塊鏈技術執行的去中心化應用。Solidity以太坊中可以使用任何高階語言一樣來編寫智慧合約,智慧合約的預設的程式語言是Solidity,副檔名以.sol結尾。
以太坊分析之 挖礦
以太坊介紹以太坊(Ethereum)是一個建立在區塊鏈技術之上,去中心化應用平臺。它允許任何人在平臺中建立和使用通過區塊鏈技術執行的去中心化應用。共識機制區塊鏈是一個去中心化的分散式賬本。去中心化就表示區塊鏈網路中的每個節點是分散和獨立的,同時又要保證整體的一致性(包括資料和
區塊鏈2.0以太坊智慧合約solidity之helloworld
由於只能合約是放在區塊鏈上面的程式碼,這給我們的除錯帶來了很多的困難,還好有線上的編譯器:https://remix.ethereum.org第一個程式碼:pragma solidity ^0.4.4;contract Counter {uint count = 0;addr
【智慧合約系列004-以太坊安全之 Parity 第二次安全事件漏洞分析】
Parity 多籤錢包的第二次漏洞發生於 2017年11月07日,不同於 17年7月19日那次,本次不是資產被黑客盜走,而是合約底層被破壞,導致資產就在那,但卻永遠也取不出,就像駕船到太平洋最深處,投下一枚硬幣,硬幣就在那,但你可能再也無法找到它。  
【智慧合約系列003-以太坊安全之 Parity 第一次安全事件漏洞分析】
截止目前,Parity 多重簽名錢包共發生過兩次安全事件,第一次發生在 2017年07月19日,涉及 Parity 1.5 及以上版本,造成 15萬以太幣約 3000萬美元被盜,第二次發生在 2017年11月07日,致使約 50萬枚以太幣被鎖在合約中無法取出,當時價值大約 1.5億美元,本篇先對發生
走進以太坊技術之路:瓶頸、困境和方案
一、以太坊目前存在的技術瓶頸 以太坊網路目前存在的主要問題是:可擴充套件性、智慧合約的安全性、共識協議與隱私性。 1. 可擴充套件性困境 2017年的以太坊養貓遊戲中,佔到整個以太坊16%的交易量,導致以太坊網路大面積擁堵。網路擁堵問題暴露出了以太坊區塊鏈亟需擴容的現狀。以太坊被設計成為一個
Ubuntu-開源區塊鏈軟體“以太坊”安裝 安裝solidity
Ubuntu-開源區塊鏈軟體“以太坊”安裝 原 openthings 釋出於 2016/09/22 14:18 字數 972 閱讀 644 收藏 5 點贊 0 評論 1 以太坊(https://ethereum.org/)
以太坊DAO之股東協會
Decentralized Autonomous Organization,簡稱DAO,以太坊中重要的概念。一般翻譯為去中心化的自治組織。 在上一節中,我們為了展示什麼是DAO建立了一個合約,就像一個採用邀請制的俱樂部,會員被總統的心血來潮邀請或禁止。但這有一些缺點:如果有人想改變他的主
以太坊DAO之流動民主智慧合約
Decentralized Autonomous Organization,簡稱DAO,以太坊中重要的概念。一般翻譯為去中心化的自治組織。 投票支付合約的所有費用和行動需要時間,並要求使用者始終保持活躍,知情和專注。另一個有趣的方法是選擇一個可以控制合約的指定賬戶,然後能夠迅速做出決定。
以太坊DAO之時間鎖定Multisig
Decentralized Autonomous Organization,簡稱DAO,以太坊中重要的概念。一般翻譯為去中心化的自治組織。 有時候,時間也可以用作一種很好的安全機制。以下程式碼基於DAO區塊鏈大會,但有不同的變化。不是每個操作需要X個成員批准,而是任何交易都可以由單個成員發起,但它們在執行之前
深入區塊鏈以太坊原始碼之挖礦
// Miner creates blocks and searches for proof-of-work values. type Miner struct { mux *event.TypeMux worker *worker coinbase co
區塊鏈100講:以太坊智慧合約solidity如何節省GAS費?
1 摘要 在以太坊上,程式碼即法律,交易即金錢。每一筆智慧合約的執行,都要根據複雜度消耗一筆GAS費(ETH)。那麼,智慧合約solidity語言的編寫,不僅要考慮安全,也要考慮語言的優化,以便高效便宜了。 本文將從以下一些方面分析如何節約GAS的程式設計總結
以太坊學習之Java開發框架web3j的使用---部署合約
智慧合約名以 HelloContract 為例 1,編譯合約原始碼 命令:solc HelloContract.sol –bin –abi –optimize -o outputPath solc .sol –bin
深入區塊鏈以太坊原始碼之p2p通訊
一、p2p網路中分為有結構和無結構的網路 無結構化的: 這種p2p網路即最普通的,不對結構作特別設計的實現方案。 優點是結構簡單易於組建,網路區域性區域內個體可任意分佈, 反正此時網路結構對此也沒有限制;特別是在應對大量新個體加 入網路和舊個體離開網路(“c
以太坊學習之常用命令
miner.start(1) 啟動挖礦 miner.stop() 停止挖礦 miner.setEtherbase(addr) 設定主賬戶 personal.unlockAccount(eth.accounts[0]) 解鎖賬戶 p
不同步節點線上使用Remix開發以太坊Dapp及solidity學習入門 ( 一 ):智慧合約HelloWorld
有問題可以點選–>加群互相學習 本人本來想自己寫公鏈,結果發現任重道遠; 遂,開始寫Dapp,順便寫的時候搞個教程吧。。。 通過系列教程學習將會: 1.基本使用solidity 語言開發智慧合約 2.知道怎麼發自己的以太坊的token 3.看見前方區
以太坊的儲存層技術分析之二:以太坊和LevelDB的介面
LevelDB使用者介面非常簡單,主要就是Put(k,v),Get(k),Delete(k)。以太坊封裝了LevelDB介面,見如下類詳細程式碼: ---------------------------------------------------------------
以太坊的儲存層技術分析之四:以太坊瘦身
前面一篇文章(分析之三)中提到了以太坊的資料儲存越來越大,有個資料“瘦身”的問題,本文中具體討論下。 以太坊是一個去中心化的區塊鏈系統,資料不是存放在中心伺服器上,而是存在客戶端的硬碟上。目前以太坊發展遇到一個現實問題:安裝過以太坊客戶端,挖過礦的同學想必都知道安裝完後同步
以太坊原始碼分析之 P2P網路(三、UDP底層通訊)
區塊鏈特輯 :https://blog.csdn.net/fusan2004/article/details/80879343,歡迎查閱,原創作品,轉載請標明!這周工作有點小忙,部門區塊鏈基礎平臺的開發開始進入節奏了,和上一篇間隔間隔有點久了,以後還是要堅持,不能剛開始就犯毛
以太坊原始碼分析之 P2P網路(二、節點發現流程)
區塊鏈特輯 :https://blog.csdn.net/fusan2004/article/details/80879343,歡迎查閱,原創作品,轉載請標明!上一篇文章簡單介紹了下一些基礎的型別定義,從這一篇開始我們將描述p2p網路的更多細節。從關於節點的定義來看,其實不同