1. 程式人生 > >Solidity基礎語法學習

Solidity基礎語法學習

Solidity中的契約類似於面向物件的語言中的類。每個合約都可以包含狀態變數函式, 函式修飾符事件結構型別列舉型別的宣告此外,合同可以繼承其他合同,在Solidity中每一個類都被稱為合同。

型別

Solidity是一種靜態型別語言,這意味著每個變數(狀態和本地)的型別需要在編譯時指定Solidity提供了幾種基本型別,可以組合形成複雜的型別。

值型別

以下型別也被稱為值型別,因為這些型別的變數將始終按值傳遞,即它們在用作函式引數或賦值時總是被複制。

布林

bool:可能的值是常量truefalse

邏輯運算子
  • ! (邏輯否定)
  • && (邏輯連詞“and 和”)
  • || (邏輯和,“或”)
  • == (平等)
  • != (不等式)
||&&  都有程式語言的共同短路規則

運算子

  • 比較:<=<==!=>=>(計算結果為bool
  • 位運算子:&|^(按位異或), ~按位取反)
  • 算術運算子:+-,一元-,一元+*/%(餘數), **冪), <<左移位),>>右移位)

整型

intuint:各種大小的有符號和無符號整數。關鍵字uint8uint256在步驟8(無符號的8到256位)和int8int256uintint分別為uint256別名int256

除以零和模數除以零將引發執行時異常。

移位操作的結果是左運算元的型別。

這個表示式相當於相當於這意味著轉移負數的符號延伸。按負數移動會引發執行時異常。x << yx * 2**yx >> yx / 2**y

地址

address:儲存20個位元組的值(以太坊地址的大小)。地址型別也有成員,並作為所有合同的基礎。


地址成員

  • balance 和 transfer
這裡可以理解為地址是solidity語言的預置物件,就如同Java裡面的JDK自帶類。balance可以查詢餘額,transfer則實現轉賬功能。
address x = 0x123;
address myAddress = this;
if (x.balance < 10 && myAddress.balance >= 10) x.transfer(10);
如果x是合同地址,則其程式碼將與該transfer呼叫一起執行(這是EVM的一項功能,無法阻止)。如果執行耗盡或以任何方式失敗,以太轉移將被恢復,並且當前合同將停止,除了例外

  • send
傳送是的低階對應transfer如果執行失敗,則當前合同不會停止,但send將返回false

使用中存在一些不安全的send:如果呼叫堆疊深度為1024(呼叫程式始終強制呼叫堆疊深度),則呼叫失敗,如果收件人耗盡Gas,呼叫堆疊深度也將失敗。所以為了安全的傳輸,總是檢查返回值send,使用transfer甚至更好:使用接收者提取錢的模式。

  • callcallcodedelegatecall
call返回一個布林值,指示呼叫的函式是否終止(true)或導致EVM異常(false)。不可能訪問返回的實際資料(為此,我們需要事先知道編碼和大小)。

可以用.gas()改性劑調整供給的氣體

namReg.call.gas(1000000)("register", "MyName");
同樣,所提供的以太值也可以被控制:
nameReg.call.value(1 ether)("register", "MyName");
最後,這些修飾符可以合併。他們的順序無關緊要:
nameReg.call.gas(1000000).value(1 ether)("register", "MyName");

固定大小的位元組陣列

bytes1bytes2bytes3,..., bytes32byte是別名bytes1

成員:

  • .length 產生位元組陣列的固定長度(只讀)。

動態大小的位元組陣列

bytes
動態大小的位元組陣列
string
動態大小的UTF-8編碼字串

作為一個經驗法則,使用bytes任意長度的原始位元組資料和string 任意長度的字串(UTF-8)資料。如果你可以限制長度到一定數量的位元組,總是使用其中之一bytes1bytes32因為它們便宜得多。

地址文字

例如,通過地址校驗和測試的十六進位制文字 0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AFaddress型別的。長度在39到41位之間的十六進位制文字不通過校驗和測試會產生警告,並被視為常規的有理數字文字。

理性和整數文字

整數文字由0-9範圍內的一系列數字組成。它們被解釋為小數。例如,69意味著六十九。069是無效的。

十進位制小數文字是由.一邊至少有一個數字組成的。例子包括1..11.3

相關推薦

Solidity基礎語法學習

Solidity中的契約類似於面向物件的語言中的類。每個合約都可以包含狀態變數,函式, 函式修飾符,事件,結構型別和列舉型別的宣告。此外,合同可以繼承其他合同,在Solidity中每一個類都被稱為合同。型別Solidity是一種靜態型別語言,這意味著每個變數(狀態和本地)的型

Java基礎語法學習7——邏輯運算符

pan images tro 技術 邏輯運算 運算 基礎語法 image style 1.邏輯運算符 2.邏輯 與 運算符 對比一下n的值,區分&、&& 3.邏輯 或 運算符 4.邏輯 非 運算符(!) Java基礎語法學習7——

Java基礎語法學習8——條件運算符及運算符優先級

str ima http 運算符 技術分享 語法 運算 style com 1.條件運算符 Java基礎語法學習8——條件運算符及運算符優先級

Java基礎語法學習9——運算符優先級及潤年案例

!= test str package tin ron class imp 基礎 潤年案例 package test;import java.util.Scanner;public class runnian {= public static void main(

Java基礎語法學習15——冒泡排序

main alt java 冒泡 pub 結果 aop mage string 1.冒泡排序 public class maopao { public static void main(String[] args) { int[] a = {34,53

關於Html基礎語法學習

屬性 world 評論 color 右鍵 文件的 p s sch height 晚上做完初賽,好像有點頹,就來學了學html,畢竟博客裏面會用到嘛. 首先貼出我所學習的教程 http://www.w3school.com.cn/html/index.asp 我覺得吧,可

Python之面向對象-基礎語法學習-01

class 字符集 一個 log HA 郵箱地址 python解釋器 面向對象 on() #!/usr/bin/evn python ###指定運行python解釋器(Linux系統) # -*- coding:utf8 -*-

python基礎語法學習

rem In == 啟動 增刪 通過 刪除元素 put () 登錄認證程序作業基礎需求:讓用戶輸入用戶名密碼認證成功後顯示歡迎信息輸錯三次後退出程序 username="admin"password="admin"count=1whi

python基礎語法-學習筆記

技術分享 切片 play 順序 混合 b- for-else reverse end 1 def stu1(name = "No name", adr = "NO adr"): 2 print("name:{} adr:{}".format(name,adr

最簡單的vue入門:基礎語法學習

新建index.html,直接複製以下程式碼,雙擊瀏覽器執行即可。程式碼包含Vue的基礎語法,可對照練習。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

Scala基礎語法學習及提高

1,總體語法與java類似 2,增加了函式的定義,函式是一種繼承與Trait類的子類,函式可以作為引數傳入的方法中,而方法不行 3,方法的定義 object objectName{ def functionName(parmName : parmType,…) :returnType =

PHP基礎語法學習要點1

PHP基礎語法學習要點1 變數的關鍵 判斷變數型別 var_dump(變數),檢視變數的型別; unset(變數),釋放變數 注意: 變數如果不使用unset()來進行釋放的話,那麼變數將會在指令碼執行結束的時候才能釋放。 is_bool()判斷一

Kotlin基礎語法學習筆記

Kotlin簡介 Kotlin是一門與Swift類似的靜態型別JVM語言,由JetBrains設計開發並開源。與Java相比,Kotlin的語法更簡潔、更具表達性,而且提供了更多的特性,比如,高階函式

PL/SQL developer基礎語法學習(一)

簡介: - PL/SQL是Oracle下的指令碼開發語言,是為了解決資料進行復雜處理而設計的。 - 在SQL語言的基礎之上添加了第三代語言的迴圈、分支等結構 - 使用PL/SQL可以帶來一定的好處,即效率的提高——– pl/s

Hbase基礎語法學習和總結

2018-06-12更新:HBase抽數過程中\t對資料插入Hive的影響。Ctrl + backspace 是刪除,單出的Backspace是無效的;Hbase中都是字串,沒有其他型別;List:列出所有表格;Scan tablename:瀏覽表,Hbase預設是儲存三個版

PL/SQL developer基礎語法學習(三)之遊標

一、遊標分為:隱式遊標和顯示遊標 1.隱式遊標:發生與操作的DML語句中 sql遊標 例子(例項中的表都是使用的oracle中的初始表): declare --拷貝emp

python基礎語法學習筆記

port 鍵值 dict 不重復 discard 你好 特殊 append 不存在 2019-02-07 標識符:在 Python 裏,標識符由字母、數字、下劃線組成。在 Python 中,所有標識符可以包括英文、數字以及下劃線(_),但不能以數字開頭。Python 中的

Kotlin 入門基礎語法學習筆記

敲了一天的kotlin基礎語法,整理歸納到一個類裡面,便於以後忘記的時候複習。 /** * Created by GG on 2017/11/20. */ //main函式 fun main(args: Array<String>) { var te

Java基礎學習筆記八 Java基礎語法之接口和多態

java cas 發現 過程 類類型 結果 覆寫 實例 new 接口 接口概念 接口是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的”類”。接口只描述所應該具備的方法,並沒有具體實現,具體的實現由接口的實現類(相當於接口的子類)來完成

Python基礎語法知識學習網址

post mage log clas 需要 gpo class 整理 run 最近在看python基礎,本來想自己整理一下,但是發現網上有現成的文檔,寫的非常好,所以此處就貼一個地址,需要的同學可以到下面的網址看下: http://www.runoob.com/python