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 中識別符號由字母 數字 下劃線組成,...