solidity基礎入門知識(一)整型和位址

2021-08-15 15:19:51 字數 1819 閱讀 3263

1.solidity檔案的擴充套件名為.sol

2.pragma solidity^0.4.0;

表示源程式在大於等於0.4.0版本的編譯器中可以正常工作,在大於等於0.5.0版本的編譯器中無法工作。

3.資料型別:

solidity是靜態語言,所有變數在定義的時候需要定義好資料型別

(1)整數:常用的無符號整數型別有uint8,uint16,uint24......uint256(uint預設的是uint256)

有符號的整數寫為int8~int256

例子:uint a=365;

(2)位址

後面的0x開頭的一串16進製制數並不是字串,因此不需要雙引號,位址有合約位址和普通的錢包位址兩種。

十六進製制常量並通過位址的checksum的驗證。比如 0xdcad3a6d3569df655070ded06cb7a1b2ccd1d3af 是乙個address型別。十六進製制常量是39位到41位數字長度。如果沒有通過checksum的檢查,會產生乙個警告,但是還是會作為乙個合理的數字常量。

例如:

contract addresstest

}

addr.balance意為獲取位址addr的餘額,函式getbalance的引數為乙個位址,輸入位址之後即可返回此位址的餘額。

this:意為合約本身,比如需要獲取當前合約的餘額,可以這樣寫:

contract addresstest

}

this.balance:獲取當前合約的餘額

addr=0xqkwjhnckajhsdasdqwe

addr.send(100);

例子2:向乙個合約充值(有待進一步理解)

pragma solidity ^0.4

.0;//請注意這個僅是demo,請不要用到正式環境

contract paytest

//向當前合約存款

function

deposit

()payable

returns

(address addr, uint amount, bool success)

}

使用send()方法需要注意:

1.呼叫遞迴深度不能超過1024

2.gas不足會導致執行失敗

3.使用這個方法需要檢查成功與否

****transfer()方法也是傳送以太幣

例子:address x = 0x123;

address myaddress =this;

if(x.balance < 10 && myaddress.balance >= 10) x.transfer(10);

send和transfer的區別:

send方法和transfer很相似,但是比transfer更低階。如果send失敗,當前的合約不會中斷,也不會丟擲異常,會返回乙個false。

使用send有一些風險:如果呼叫棧深度超過1024或是gas不夠,所有的轉讓操作都會失敗,為了更安全的以太幣轉移,如果用send就必須每次都要檢查返回值,使用transfer方法會更好

(3)布林型

和其他語言一樣,取值為true和false

支援的運算子:

備註:運算子&&||是短路運算子,如f(x)||g(y),當f(x)為真時,則不會繼續執行g(y)

solidity基礎知識

自己學習會參考到的一些基礎知識,記錄一下,主要包括 call 方法 delegatecall send 與fallback keccak payable宣告的函式可以從呼叫者那裡接受ether,如果傳送方沒有提供ether,則呼叫可能會失敗。也就是說乙個函式宣告為payable,那麼就只能收取eth...

solidity基礎入門知識(二)值型別與引用型別

今天是大年三十,第一次不在家過年,別有一番滋味!我們先來看看有哪些型別屬於值型別,哪些屬於引用型別。值型別包含 有其他語言開發經驗的童鞋都知道,值型別傳值時,會臨時拷貝乙份內容出來,而不是拷貝指標,當你修改新的變數時,不會影響原來的變數的值。例如 int a 100 a 100 int b a b ...

Python 基礎(一) 入門必備知識

目錄 1 識別符號 2 關鍵字 3 引號 4 編碼 5 輸入輸出 6 縮排 7 多行 8 注釋 9 資料型別 10 運算子 10.1 常用運算子 10.2 運算子優先順序 1 識別符號 識別符號是程式設計時使用的名字,用於給變數 函式 語句塊等命名,python 中識別符號由字母 數字 下劃線組成,...