摘要:什么是以太坊是一種面向智能合約的高級語言,其語法與類似。如果希望快速進行以太坊開發,那請看我們精心打造的教程以太坊入門教程,主要介紹智能合約與應用開發,適合入門。
這篇關于Solidity教程的博客展示了很多Solidity特性。本教程假定你對以太坊虛擬機和編程有一定的了解。
以太坊,“世界計算機”提供了一個非常強大的全球共享基礎設施,使用名為Solidity的編程語言構建去中心化應用程序。
讓我們開始我們的Solidity教程,介紹Solidity。
什么是Solidity?以太坊Solidity是一種面向智能合約的高級語言,其語法與JavaScript類似。solidity是用于生成在EVM上執行的機器級代碼的工具。solidity編譯器獲取高級代碼并將其分解為更簡單的指令。Solidity代碼封裝在Contracts中。
以太坊合約中的solidity合約是以太坊去中心化應用程序的基本構建模塊。所有變量和函數都是合約的一部分,這是所有項目的起點。一個名為MyFirst的空合約看起來像這樣:
version pragma ^0.4.19; contract MyFirst{ }
盯緊你的屏幕因為接下來在我們的Solidity教程中我們將開始編碼......
Solidity文件的布局源文件可以包含任意數量的合約定義,包括指令和pragma指令。
Version PragmaVersion Pragma是定義代碼使用的Solidity編譯器版本的聲明。
version pragma ^0.4.00;
注意:上面顯示的源文件不會使用早于版本0.4.0的編譯器進行編譯,也不能在從版本0.5.0開始的編譯器上運行。
導入其他源文件Ethereum Solidity支持與JavaScript中可用的導入語句非常相似的導入語句,盡管Solidity不知道default export的概念。
在全局級別,可以使用以下形式的import語句:
import "filename";
上述語句將所有全局符號從filename導入當前全局范圍。
import * as symbolName from "filename";注釋
就像任何其他語言一樣,Solidity可以使用單行和多行注釋。
// This is a single-line comment. /* This is a multi-line comment */
現在,在我們進一步深入了解Solidity教程之前,應該知道以太坊有三個可以存儲項目的區域。
存儲Storage:所有合約狀態變量所在的位置。每個合約都有自己的存儲,并且在函數調用之間是持久的。
內存Memory:保存臨時值并在(外部)函數調用之間擦除,并且使用起來更便宜。
堆棧Stack:保存小的局部變量并且幾乎可以免費使用,但只能保存有限數量的值。
對于幾乎所有類型,都無法指定它們應存儲的位置,因為它們在每次使用時都會被復制。
好了,既然你已經知道以太坊Solidity中的存儲位置,那么讓我告訴你一般的值類型。
solidity中的值類型以下類型也稱為值類型,因為這些類型的變量將始終按值傳遞。
布爾關鍵詞:bool
值是常數,即true或false。
整型關鍵字:int/uint(uint8到uint256,步長為8(無符號,最多為256位),int8為int256)
各種大小的有符號和無符號整數。
例:
contract MySample{ uint UnsignedInt =50; }
在上面的語句中,我們創建了一個名為InsignedInt的uint并將其設置為50。
地址關鍵字:address
保存一個20字節的值(以太坊地址的大小)。地址類型也有members,并作為所有合約的基礎。
地址成員:balance與transfer可以使用屬性balance查詢地址的余額,并使用transfer函數將以太網發送到地址。
address x = 0x123; address myAddress = this; if (x.balance < 10 && myAddress.balance > = 10) x.transfer(10);字符串
String:字符串文字用雙引號或單引號如“foo”或"bar"編寫。
用于任意長度的UTF數據。
string language ="Solidity";
這些值類型可以在包含運算符的表達式中相互交互。接下來,在我們的Solidity教程中,讓我告訴你各種運算符。
運算符solidity的運算符與JavaScript相同。Solidity有四種類型的運算符:
算術運算符Solidity具有非常簡單的數學運算。以下與大多數編程語言類似:
增加:x + y
減法:x - y
乘法:x * y
除法:x / y
取整/求余:x%y
Solidity還提供了使用指數運算符的選項,具體如下:
uint x = 10 ** 3; // equal to 10^3 = 1000增量運算符
增量運算符的穩定性:a++,a- ,++a,-a,a+=1,a=a+1
適用于其他編程語言的規則也是類似的。
按位運算符以下是運算符:(按位OR)"|",(按位異或),(按位求反)"~",(按位右移)">>",(按位左移)"<<"
邏輯運算符Solidity中的邏輯運算符:!(邏輯否定),&&(邏輯和),||(邏輯或),==(相等),!=(不相等)
例:
contract operators { // Arithmetic Operators // +,-,*,/, %, ** // Incremental Operators // a++, a--, a+=1, a=a+1,++a,--a; a=10; a= a++; //here, output will be 10, because the value is first returned and then then increment is done a=++a; //Logical Operators !, &&, ||, ==, != isOwner = true && false; var orValue= 0x02 | 0x01; // output would be 0x03 //Bitwise Operators~,>>, <<; function Operators() { // Initialize state variables here}}
現在有時需要更復雜的數據類型。為此,Solidity提供結構。
solidity數據結構Solidity提供三種類型的數據結構:
結構StructsSolidity提供了一種以Structs形式定義新類型的方法。Structs是自定義類型,可以對多個變量進行分組。
pragma solidity ^0.4.0; contract Ballot { struct Voter { // Struct uint weight1, weight2, weight3; bool voted; address delegate1, delegate2, delegate3, delegate4; string name; uint vote1, vote2, vote3, vote4, vote5; uint height1, height2, height3 } }
注意:結構只能有16個成員,超過該成員可能會發生以下錯誤:Stack too Deep 堆棧太深。
結構允許創建具有多個屬性的更復雜的數據類型。
現在,如果你需要一些集合,比如說地址,那該怎么辦?好吧,就像大多數語言一樣,Solidity也有數組。
數組ArraysSolidity中的數組可以具有編譯時固定大小,也可以是動態的。
uint[3] fixed; //array of fixed length 3 uint[] dynamic; //a dynamic array has no fixed size, it can keep growing
還可以創建一個結構數組。使用以前創建的Voter結構:
Voter[] voting;
注意:將數組聲明為public將自動為其創建getter方法。
Voter[] public voting;映射mappings
映射可以看作是哈希表,它們被虛擬地初始化,使得每個可能的鍵都存在并被映射到其字節表示全為零的值:類型的默認值。
映射聲明為:
Mapping(_Keytype => _ValueType )
注意:_Keytype幾乎可以是任何類型,除了動態大小的數組,合約,枚舉和結構。
例:
contract MappingExample { mapping(address => uint) public balances; function update(uint newBalance) { balances[msg.sender] = newBalance; }} contract MappingUser { function f() returns (uint) { MappingExample m = new MappingExample(); m.update(100); return m.balances(this); }}控制結構
除了switch和goto之外,JavaScript中的大多數控制結構都在Solidity中可用。
所以有:if,else,while,do,for,break,continue,return,? :,使用從C或JavaScript中已知的通常語義。
注意:沒有像C和JavaScript那樣從非布爾類型到布爾類型的類型轉換。
現在讓我們看看這些控制結構如何在Solidity中使用。
contract ControlStructure { address public a; function ControlStructure>){ // if-else can be used like this if(input1==2) a=1; else a=0; // while can be used like this while(input1>=0){ if(input1==5) continue; input1=input1-1; a++;} // for loop can be used like this for(uint i=0;i<=50;i++) { a++; if(a==4) break; } //do while can be used like this do { a--; } (while a>0); // Conditional Operator can be used like this bool IsTrue = (a == 1)?true: false; /*will show an error because there is no type conversion from non-boolean to boolean */ if(1) { }
繼續我們的Solidity教程博客,讓我們談談合約中可執行的代碼單元。這些被稱為函數。
函數以下是在Solidity中聲明函數的方式。
function sampleFunc(string name, uint amount) { }
上面聲明的是一個空體函數,它有兩個參數:一個字符串和一個uint。
可以這樣調用此函數:
sampleFunc("Shashank", 10000);
談到函數,Solidity還提供函數修飾符。
函數修飾符它用于輕松更改函數的行為。甚至在進行函數調用之前也可以檢查這些條件,因為它們已在智能合約的函數定義中聲明。
示例:如果要僅通過函數的所有者或創建者調用kill contract函數。
contract FunctionModifiers{ address public creator; function FunctionModifiers() { creator = msg.sender;} Modifier onlyCreator() { if(msg.sender!=creator){ throw; } _; //resumes the function wherever the access modifier is used } function killContract() onlyCreator{ //function will not execute if an exception occurs self-destruct(creator); }}繼承
Solidity通過復制包含多態的代碼來支持多重繼承。
contract Owned { address Owner ; function owned() { owner = msg.sender; }} contract Mortal is Owned { // "is" keyword is used for inheritance function kill(){ self-destruct(owner); }} contract User is Owned, Mortal //Multiple inheritance { string public UserName; function User(string _name){ UserName = _name; }}
好吧,我覺得上面討論的概念足以讓你開始使用Solidity編程。
去寫代碼吧!!
有了這個,我結束了這個Solidity Tutorial博客。我希望你喜歡閱讀這篇博客并發現它內容豐富。到目前為止,必須對Solidity Programming Language的理解有所了解。現在去練習吧。
如果希望快速進行以太坊開發,那請看我們精心打造的教程:
以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。
匯智網原創翻譯,轉載請標明出處。這里是原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24307.html
摘要:和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。超級賬本區塊鏈的商業應用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發機構負責簽發撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...
摘要:什么是以太坊是一種面向智能合約的高級語言,其語法與類似。如果希望快速進行以太坊開發,那請看我們精心打造的教程以太坊入門教程,主要介紹智能合約與應用開發,適合入門。 這篇關于Solidity教程的博客展示了很多Solidity特性。本教程假定你對以太坊虛擬機和編程有一定的了解。 以太坊,世界計算機提供了一個非常強大的全球共享基礎設施,使用名為Solidity的編程語言構建去中心化應用程序...
摘要:以太坊是什么以太坊是一個建立在區塊鏈技術之上,去中心化應用平臺。運行環境以太坊虛擬機是以太坊中智能合約的運行環境。是由以太坊客戶端提供的是典型的開發以太坊時使用的客戶端,基于語言開發。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊是什么 - 以太坊開發入門指南原文已更新,請讀者前往原文閱讀 很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基于以太坊平臺,以通俗...
摘要:使用基于以太坊的智能合約的集成開發環境。以太坊教程,主要介紹智能合約與應用開發,適合入門。以太坊,主要是介紹使用進行智能合約開發交互,進行賬號創建交易轉賬代幣開發以及過濾器和事件等內容。 Solidity是一種以智能合約為導向的編程語言。這是一種只有四年的年輕語言,旨在幫助開發基于以太坊數字貨幣的智能合約。 理解它官方文檔應該是學習Solidity的最佳來源:solidity.read...
閱讀 1408·2021-09-23 11:21
閱讀 3105·2019-08-30 14:14
閱讀 3187·2019-08-30 13:56
閱讀 4136·2019-08-30 11:20
閱讀 1949·2019-08-29 17:23
閱讀 2765·2019-08-29 16:14
閱讀 1693·2019-08-28 18:18
閱讀 1490·2019-08-26 12:14