Solidity语言详解
Solidity語言學(xué)習(xí)學(xué)習(xí)總結(jié)
文章目錄
- Solidity語言學(xué)習(xí)學(xué)習(xí)總結(jié)
- 一、合約文件剖析
- 1.1一個合約文件的結(jié)構(gòu)如下:
- 1.2合約的引入import
- 1.3引入狀態(tài)變量、函數(shù)、事件、函數(shù)修改器
 
- 二、Solidity語言類型
- 2.1常量
- 2.2地址類型
- 2.3bool真假值類型
- 2.4整型特性與運算
- 2.5底層位運算
- 2.6固定長度字節(jié)數(shù)組byte
- 使用byte數(shù)組的理由:
 
 
 
 
- 三、數(shù)據(jù)存儲
- 3.1string內(nèi)存原理
 
- 四、以太坊地址本質(zhì)
- 五、使用錢包轉(zhuǎn)移資金
- 六、智能合約眾籌例子
- 6.1、角色說明
 
關(guān)于solidity語言我們從三個方面來學(xué)習(xí),分別從
我們在學(xué)習(xí)一門新語言的時候,通常從基礎(chǔ)語法到函數(shù),再到文件、結(jié)構(gòu)體進行學(xué)習(xí),最后深入到框架。以上三個點是solidity語言區(qū)別于其他語言的三個顯著點,所以提出來著重講。
這是solidity官方文檔:https://learnblockchain.cn/docs/solidity/installing-solidity.html#remix
一、合約文件剖析
1.1一個合約文件的結(jié)構(gòu)如下:
 這是一個完整的合約結(jié)構(gòu):
1.2合約的引入import
import "文件名.sol"兩個合約文件的引入:
1.3引入狀態(tài)變量、函數(shù)、事件、函數(shù)修改器
pragma solidity ^0.4.0;import "solidity_for_import.sol";//引入另外一個合約/*this is a Contract @auth:Linghu */ contract Test{//引入狀態(tài)變量uint a;//引入函數(shù)function setA(uint x) public {a=x;//調(diào)用setA時觸發(fā)事件Set_Aemit Set_A(x);//利用web3隨時監(jiān)聽我們的事件}//引入事件event Set_A(uint a);//定義結(jié)構(gòu)體struct Position{int lat;int lng;}address public ownerAddr;//定義函數(shù)修改器modifier ownerAddr(){require(msg.sender==ownerAddr);_;}function mine() public owner {a+=1;}}二、Solidity語言類型
2.1常量
-  有理數(shù)常量和整型常量 
-  字符常量 
-  十六進制常量 
-  地址常量 
2.2地址類型
address:表示一個賬戶地址(20B)
| balance | transfer() | 
balance表示賬戶地址的余額;函數(shù)transfer表示地址轉(zhuǎn)移的以太幣;
2.3bool真假值類型
// SPDX-License-Identifier: SimPL-2.0 pragma solidity ^0.8.7;contract BooleanTest{bool a;function getBool() public view returns(bool){return a;}/*function getBool2() public view returns(bool){return !a;//取反}*/}默認返回值是 false
2.4整型特性與運算
// SPDX-License-Identifier: SimPL-2.0 pragma solidity ^0.8.7;contract Math{uint numa=4;uint numb=2;function add(uint a,uint b)public pure returns(uint){return a+b;}function jian(uint a,uint b)public pure returns(uint){return a-b;}function cheng(uint a,uint b)public pure returns(uint){return a*b;}function chu(uint a,uint b)public pure returns(uint){return a/b;}}2.5底層位運算
- &
- |
- ^
- << 左移
- 》》(>>)不好表示括號里的符號 右移
1.& 操作數(shù)之間轉(zhuǎn)換成二進制之后每位進行與運算操作(同1取1)
 2.| 操作數(shù)之間轉(zhuǎn)換成二進制之后每位進行或運算操作(有1取1)
 3.~ 操作數(shù)轉(zhuǎn)換成二進制之后每位進行取反操作(直接相反)
 4.^ 操作數(shù)之間轉(zhuǎn)換成二進制之后每位進行異或操作(不同取1)
 5.<<操作數(shù)轉(zhuǎn)換成二進制之后每位向左移動x位的操作
 6.>>操作數(shù)轉(zhuǎn)換成二進制之后每位向右移動x位的操作
2.6固定長度字節(jié)數(shù)組byte
一個byte=8個位(XXXX XXXX)X為0或1,二進制表示
 byte數(shù)組為bytes1,bytes2,。。。,bytes32,以八個位遞增,即是對位的封裝
 舉例
 bytes1=uint8
 bytes2=unit16
 。
 。
 。
 bytes32=unit256
使用byte數(shù)組的理由:
1.bytesX可以更好地顯示16進制
 舉例:bytes1=0x6A,bytes1=(XXXX XXXX)正好四個表示一個16進制,以此類推
 2.bytes數(shù)據(jù)聲明時加入public可以自動生成調(diào)用長度的函數(shù),見下
3.bytes內(nèi)部自帶length長度函數(shù),而且長度固定,而且長度不可以被修改。
// SPDX-License-Identifier: SimPL-2.0 pragma solidity ^0.8.7;contract Math{bytes1 public num1=0x12;bytes4 public num2=0x12121212;function getlength1()public view returns(uint8){return num1.length;}function getlength2()public view returns(uint8){return num2.length;} }三、數(shù)據(jù)存儲
3.1string內(nèi)存原理
// SPDX-License-Identifier: SimPL-2.0 pragma solidity ^0.8.7;contract DynamicByte{string name="linghu";function getLength() public view returns(uint){return bytes(name).length;//通過byte強制轉(zhuǎn)換獲取長度}function changename() public view returns(bytes1){return bytes(name)[1];}function getName() public view returns(bytes memory){return bytes(name);}}四、以太坊地址本質(zhì)
賬戶初始化的地址為:
每個賬戶都有自己的地址。
五、使用錢包轉(zhuǎn)移資金
payable關(guān)鍵字代表我們可以通過這個函數(shù)給我們的合約進行充值、轉(zhuǎn)賬、默認、
// SPDX-License-Identifier: SimPL-2.0 pragma solidity ^0.8.7;contract PayableTest{function pay() payable{} //獲取賬戶上的金額function getBalance() returns(uint){return address(this).balance;} }地址主要有兩個:
六、智能合約眾籌例子
6.1、角色說明
該案例涉及兩個角色:
- 募集資金者(受益者)
- 資金投資者(捐贈者)
與受益人綁定
 _needer.map[ _needer.funderAcoount] = funder(_address , msg.value );
 }
//@param _neederAmount 受益人的id
 function ISconpelete( uint _neederAmount){
 needer storage _needer = needmap[_neederAmount];
 if(_needer.amount >=_needer.goal ){
 _needer.Neederaddress.transfer(_needer.amount);
 }
 }
}
總結(jié)
以上是生活随笔為你收集整理的Solidity语言详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 业务应用系统的业务操作日志设计
- 下一篇: 华为签约俄罗斯计算机大赛冠军,华为为啥去
