国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

以太坊開發(fā)語言solidity入門

hqman / 3323人閱讀

摘要:什么是以太坊是一種面向智能合約的高級語言,其語法與類似。如果希望快速進(jìn)行以太坊開發(fā),那請看我們精心打造的教程以太坊入門教程,主要介紹智能合約與應(yīng)用開發(fā),適合入門。

這篇關(guān)于Solidity教程的博客展示了很多Solidity特性。本教程假定你對以太坊虛擬機(jī)和編程有一定的了解。

以太坊,“世界計算機(jī)”提供了一個非常強(qiáng)大的全球共享基礎(chǔ)設(shè)施,使用名為Solidity的編程語言構(gòu)建去中心化應(yīng)用程序。

讓我們開始我們的Solidity教程,介紹Solidity。

什么是Solidity?

以太坊Solidity是一種面向智能合約的高級語言,其語法與JavaScript類似。solidity是用于生成在EVM上執(zhí)行的機(jī)器級代碼的工具。solidity編譯器獲取高級代碼并將其分解為更簡單的指令。Solidity代碼封裝在Contracts中。

以太坊合約中的solidity

合約是以太坊去中心化應(yīng)用程序的基本構(gòu)建模塊。所有變量和函數(shù)都是合約的一部分,這是所有項目的起點。一個名為MyFirst的空合約看起來像這樣:

version pragma ^0.4.19;
contract MyFirst{
}

盯緊你的屏幕因為接下來在我們的Solidity教程中我們將開始編碼......

Solidity文件的布局

源文件可以包含任意數(shù)量的合約定義,包括指令和pragma指令。

Version Pragma

Version Pragma是定義代碼使用的Solidity編譯器版本的聲明。

version pragma ^0.4.00;

注意:上面顯示的源文件不會使用早于版本0.4.0的編譯器進(jìn)行編譯,也不能在從版本0.5.0開始的編譯器上運行。

導(dǎo)入其他源文件

Ethereum Solidity支持與JavaScript中可用的導(dǎo)入語句非常相似的導(dǎo)入語句,盡管Solidity不知道default export的概念。

在全局級別,可以使用以下形式的import語句:

import "filename";

上述語句將所有全局符號從filename導(dǎo)入當(dāng)前全局范圍。

import * as symbolName from "filename";
注釋

就像任何其他語言一樣,Solidity可以使用單行和多行注釋。

// This is a single-line comment.
/*
This is a
multi-line comment
*/

現(xiàn)在,在我們進(jìn)一步深入了解Solidity教程之前,應(yīng)該知道以太坊有三個可以存儲項目的區(qū)域。

存儲Storage:所有合約狀態(tài)變量所在的位置。每個合約都有自己的存儲,并且在函數(shù)調(diào)用之間是持久的。

內(nèi)存Memory:保存臨時值并在(外部)函數(shù)調(diào)用之間擦除,并且使用起來更便宜。

堆棧Stack:保存小的局部變量并且?guī)缀蹩梢悦赓M使用,但只能保存有限數(shù)量的值。

對于幾乎所有類型,都無法指定它們應(yīng)存儲的位置,因為它們在每次使用時都會被復(fù)制。

好了,既然你已經(jīng)知道以太坊Solidity中的存儲位置,那么讓我告訴你一般的值類型。

solidity中的值類型

以下類型也稱為值類型,因為這些類型的變量將始終按值傳遞。

布爾

關(guān)鍵詞:bool

值是常數(shù),即true或false。

整型

關(guān)鍵字:int/uint(uint8到uint256,步長為8(無符號,最多為256位),int8為int256)

各種大小的有符號和無符號整數(shù)。

例:

contract MySample{
uint UnsignedInt =50;
}

在上面的語句中,我們創(chuàng)建了一個名為InsignedInt的uint并將其設(shè)置為50。

地址

關(guān)鍵字:address

保存一個20字節(jié)的值(以太坊地址的大小)。地址類型也有members,并作為所有合約的基礎(chǔ)。

地址成員:balance與transfer

可以使用屬性balance查詢地址的余額,并使用transfer函數(shù)將以太網(wǎng)發(fā)送到地址。

address x = 0x123;
address myAddress = this;
if  (x.balance < 10 && myAddress.balance > = 10)
x.transfer(10);
字符串

String:字符串文字用雙引號或單引號如“foo”或"bar"編寫。

用于任意長度的UTF數(shù)據(jù)。

string language ="Solidity";

這些值類型可以在包含運算符的表達(dá)式中相互交互。接下來,在我們的Solidity教程中,讓我告訴你各種運算符。

運算符

solidity的運算符與JavaScript相同。Solidity有四種類型的運算符:

算術(shù)運算符

Solidity具有非常簡單的數(shù)學(xué)運算。以下與大多數(shù)編程語言類似:

增加:x + y

減法:x - y

乘法:x * y

除法:x / y

取整/求余:x%y

Solidity還提供了使用指數(shù)運算符的選項,具體如下:

uint x = 10 **  3; // equal to 10^3 = 1000
增量運算符

增量運算符的穩(wěn)定性:a++,a- ,++a,-a,a+=1,a=a+1

適用于其他編程語言的規(guī)則也是類似的。

按位運算符

以下是運算符:(按位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}}

現(xiàn)在有時需要更復(fù)雜的數(shù)據(jù)類型。為此,Solidity提供結(jié)構(gòu)。

solidity數(shù)據(jù)結(jié)構(gòu)

Solidity提供三種類型的數(shù)據(jù)結(jié)構(gòu):

結(jié)構(gòu)Structs

Solidity提供了一種以Structs形式定義新類型的方法。Structs是自定義類型,可以對多個變量進(jìn)行分組。

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   } }

注意:結(jié)構(gòu)只能有16個成員,超過該成員可能會發(fā)生以下錯誤:Stack too Deep 堆棧太深。

結(jié)構(gòu)允許創(chuàng)建具有多個屬性的更復(fù)雜的數(shù)據(jù)類型。

現(xiàn)在,如果你需要一些集合,比如說地址,那該怎么辦?好吧,就像大多數(shù)語言一樣,Solidity也有數(shù)組。

數(shù)組Arrays

Solidity中的數(shù)組可以具有編譯時固定大小,也可以是動態(tài)的。

uint[3] fixed;  //array of fixed length 3
uint[] dynamic; //a dynamic array has no fixed size, it can keep growing

還可以創(chuàng)建一個結(jié)構(gòu)數(shù)組。使用以前創(chuàng)建的Voter結(jié)構(gòu):

Voter[] voting;

注意:將數(shù)組聲明為public將自動為其創(chuàng)建getter方法。

Voter[] public voting;
映射mappings

映射可以看作是哈希表,它們被虛擬地初始化,使得每個可能的鍵都存在并被映射到其字節(jié)表示全為零的值:類型的默認(rèn)值。

映射聲明為:

Mapping(_Keytype => _ValueType )

注意:_Keytype幾乎可以是任何類型,除了動態(tài)大小的數(shù)組,合約,枚舉和結(jié)構(gòu)。

例:

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);
}}
控制結(jié)構(gòu)

除了switch和goto之外,JavaScript中的大多數(shù)控制結(jié)構(gòu)都在Solidity中可用。

所以有:if,else,while,do,for,break,continue,return,? :,使用從C或JavaScript中已知的通常語義。

注意:沒有像C和JavaScript那樣從非布爾類型到布爾類型的類型轉(zhuǎn)換。

現(xiàn)在讓我們看看這些控制結(jié)構(gòu)如何在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)
{
}

繼續(xù)我們的Solidity教程博客,讓我們談?wù)労霞s中可執(zhí)行的代碼單元。這些被稱為函數(shù)。

函數(shù)

以下是在Solidity中聲明函數(shù)的方式。

function sampleFunc(string name, uint amount) {
}

上面聲明的是一個空體函數(shù),它有兩個參數(shù):一個字符串和一個uint。

可以這樣調(diào)用此函數(shù):

sampleFunc("Shashank", 10000);

談到函數(shù),Solidity還提供函數(shù)修飾符。

函數(shù)修飾符

它用于輕松更改函數(shù)的行為。甚至在進(jìn)行函數(shù)調(diào)用之前也可以檢查這些條件,因為它們已在智能合約的函數(shù)定義中聲明。

示例:如果要僅通過函數(shù)的所有者或創(chuàng)建者調(diào)用kill contract函數(shù)。

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通過復(fù)制包含多態(tài)的代碼來支持多重繼承。

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編程。

去寫代碼吧!!

有了這個,我結(jié)束了這個Solidity Tutorial博客。我希望你喜歡閱讀這篇博客并發(fā)現(xiàn)它內(nèi)容豐富。到目前為止,必須對Solidity Programming Language的理解有所了解。現(xiàn)在去練習(xí)吧。

如果希望快速進(jìn)行以太坊開發(fā),那請看我們精心打造的教程:

以太坊入門教程,主要介紹智能合約與dapp應(yīng)用開發(fā),適合入門。

匯智網(wǎng)原創(chuàng)翻譯,轉(zhuǎn)載請標(biāo)明出處。這里是原文

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98054.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.41 - 深入學(xué)習(xí)區(qū)塊鏈

    摘要:和比特幣協(xié)議有所不同的是,以太坊的設(shè)計十分靈活,極具適應(yīng)性。超級賬本區(qū)塊鏈的商業(yè)應(yīng)用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發(fā)機(jī)構(gòu)負(fù)責(zé)簽發(fā)撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機(jī)制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...

    qianfeng 評論0 收藏0
  • 以太開發(fā)語言solidity入門

    摘要:什么是以太坊是一種面向智能合約的高級語言,其語法與類似。如果希望快速進(jìn)行以太坊開發(fā),那請看我們精心打造的教程以太坊入門教程,主要介紹智能合約與應(yīng)用開發(fā),適合入門。 這篇關(guān)于Solidity教程的博客展示了很多Solidity特性。本教程假定你對以太坊虛擬機(jī)和編程有一定的了解。 以太坊,世界計算機(jī)提供了一個非常強(qiáng)大的全球共享基礎(chǔ)設(shè)施,使用名為Solidity的編程語言構(gòu)建去中心化應(yīng)用程序...

    tigerZH 評論0 收藏0
  • 以太是什么 - 以太開發(fā)入門指南

    摘要:以太坊是什么以太坊是一個建立在區(qū)塊鏈技術(shù)之上,去中心化應(yīng)用平臺。運行環(huán)境以太坊虛擬機(jī)是以太坊中智能合約的運行環(huán)境。是由以太坊客戶端提供的是典型的開發(fā)以太坊時使用的客戶端,基于語言開發(fā)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊是什么 - 以太坊開發(fā)入門指南原文已更新,請讀者前往原文閱讀 很多同學(xué)已經(jīng)躍躍欲試投入到區(qū)塊鏈開發(fā)隊伍當(dāng)中來,可是又感覺無從下手,本文將基于以太坊平臺,以通俗...

    tomlingtm 評論0 收藏0
  • 區(qū)塊鏈技術(shù)學(xué)習(xí)指引

    摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實應(yīng)用場景,想做區(qū)塊鏈應(yīng)用開發(fā),可進(jìn)一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請讀者前往原文閱讀 本章的文章越來越多,本文是一個索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...

    Cristic 評論0 收藏0
  • 2018以太智能合約編程語言solidity的最佳IDEs

    摘要:使用基于以太坊的智能合約的集成開發(fā)環(huán)境。以太坊教程,主要介紹智能合約與應(yīng)用開發(fā),適合入門。以太坊,主要是介紹使用進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建交易轉(zhuǎn)賬代幣開發(fā)以及過濾器和事件等內(nèi)容。 Solidity是一種以智能合約為導(dǎo)向的編程語言。這是一種只有四年的年輕語言,旨在幫助開發(fā)基于以太坊數(shù)字貨幣的智能合約。 理解它官方文檔應(yīng)該是學(xué)習(xí)Solidity的最佳來源:solidity.read...

    darkerXi 評論0 收藏0

發(fā)表評論

0條評論

hqman

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<