61、solidity程式語言型別-2——2020年07月12日12:26:21
阿新 • • 發佈:2020-07-12
2019年09月26日11:17:55
solidity程式語言型別-2——2020年07月12日12:32:20
編譯網址
編譯網址:
http://remix.ethereum.org/#optimize=false&evmVersion=null&version=soljson-v0.4.24+commit.e67f0147.js
1.整形
uint 無符號整型 只能表示正數
int和js中的number類似
2.地址
以太坊的地址
以太坊地址表示的字串“0x3211B6a9fc5ea8bEf649bb617E3123a5755A0aC1”大概42位,以太坊一直是20個位元組,一個位元組8位,所以有160位
3.msg.sender
是合約裡的全域性變數,它是部署合約的地址。
-
balance 檢視餘額
-
transfer 轉賬
address owner; //誰部署合約,這個地址就是誰 owener=msg.sender;
4.陣列
uint [5] arr=[1,1,1,1,1];
for(uint i=0;i<arr.length;i++){
}
arr.push(6);
5.map
mapping(string=>uint) users; //{woniu:18} users["woniu"]=18;
6.結構體struct
Struct Student{
uint age;
uint id;
string name;
uint phone;
}
woniu=Student(18,141001,"xiaoye",151611895417);
7.列舉
enum sex{male,female};
8.public private
public共有的,合約內外都能呼叫;
private為私有的,只有合約內部可以呼叫。
也可以修飾狀態變數;
狀態變數預設是私有的;
pragma solidity ^0.4.24; contract Test{ uint public a=256; int public b=254; function add() private view returns(uint){ return a + uint(b); } function ADD() public view returns(uint){ return add(); } }
9.pure view constant
如果⼀個函式⾥⾯,訪問了狀態變數,但是沒有修改,我們使⽤view或者constant修飾。
-
如果訪問了狀態變數,⽽且修改了,那麼就不能constant和view,否則會報錯,不修飾即可。
-
如果沒有使⽤過狀態變數,我們要修飾為pure。
-
如果你修飾為constant,但是你在函式中修改了,效果是:不會報錯,正常執⾏,但是值不會改
變。
pragma solidity ^0.4.24;
contract Test{
uint public a=256;
int public b=254;
uint private c=1000;
function add() private view returns(uint){
return a + uint(b);
}
function ADD() public view returns(uint){
return add()+c;
}
function returnString() public pure returns(string){
return "hello";
}
}
10.address 匿名函式
pragma solidity ^0.4.24;
contract Test{
//以太坊地址的⻓長度,⼤⼩ 20個位元組 ,20 * 8 = 160位 ,所以可以⽤⼀個 uint160 編碼。
//地址是所 有合約的基礎,所有的合約都會繼承地址物件,通過合約的地址串,調⽤合約內的函式。
//可以進⾏加減,需要強制轉換
//1. 匿名函式:沒有函式名,沒有引數,沒有返回值的函式,就是匿名函式
//2. 當調⽤⼀個不存在的⽅法時,合約會預設的去調⽤匿名函式
//3. 匿名函式⼀般⽤來給合約轉賬,因為費⽤低
string public str;
address public addr1=0x00CA35b7d915458EF540aDe6068dFe2F44E8fa733c;
function () public payable{
}
function add() public view returns(uint160) {
return uint160(addr1) + 10;
}
function getBalance1() public view returns(uint256){
return this.balance;
}
function getBalance() public view returns(uint256){
return addr1.balance;
}
}
11.transfer
//1. 轉賬的時候單位是wei
//2. 1 ether = 10 ^18 wei (10的18次⽅)
//3. 向誰轉錢,就⽤誰調⽤tranfer函式
//4. 花費的是合約的錢
//5. 如果⾦額不⾜,transfer函式會丟擲異常
//send轉賬與tranfer使⽤⽅式⼀致,但是如果轉賬⾦額不⾜,不會丟擲異常,⽽是會返 回false
//由合約向addr1 轉賬10以太幣
function transfer() public {
addr1.transfer(10 * 10 **18);
}