在solidity學習中有幾個非常重要的關鍵字,如下所示:
| 修飾符 | 說明 | |
|---|---|---|
| public | 公有,任何人(擁有以太坊賬戶的)都可以呼叫 | 牢記 |
| private | 私有, 只有智能合約內部可以呼叫 | 牢記 |
| external | 僅合約外部可以呼叫,合約內部需使用this呼叫 | 先忽略 |
| internal | 僅合約內部和繼承的合約可以呼叫 | 先忽略 |
| view/constant | 函式會讀取但是不會修改任何contract的狀態變數 | 牢記 |
| pure(純凈的) | 函式不使用任何智能合約的狀態變數 | 牢記 |
| payable | 呼叫函式需要付錢,錢付給了智能合約的賬戶 | 牢記 |
| returns | 回傳值函式宣告中使用 | 牢記 |
1.public、private
- public 表示所有的人都可以看到的,而且可以呼叫
- private表示所有人都可以看到,但是無法呼叫
修飾為public的狀態變數會默認生成一個同名的public函式,狀態變數默認是internal的(先理解為private即可)
下面通過代碼講解
pragma solidity ^0.4.24;
contract test1{
uint public a1 = 100;
int private a2 = -10;
//private 修飾的函式為私有的,只有合約內部可以呼叫
function add() private view returns(uint){
return a1 + uint( a2) ;
}
//Public修飾的函式為共有的,合約內外都可以呼叫
function Add() public view returns(uint){
return add();
}
}

2. view,constant,pure講解
- 如果一個函式里面,訪問了狀態變數,但是沒有修改,我們使用view或者constant修飾,
- 如果訪問了狀態變數,而且修改了,那么就不能constant和view,否則會報錯,不修飾即可,
- 如果沒有使用過狀態變數,我們要修飾為pure,
- 如果你修飾為constant,但是你在函式中修改了,效果是:不會報錯,正常執行,但是值不會改變,
pragma solidity ^0.4.24;
contract Test{
int public a1 = 100; //成員變數就是狀態變數
int a2 = 256;
//為了明確語意,一般要加上constant(view兩者完全相同)
//表示不會修改函式內的狀態變數
function add() constant returns(int){
return a1+a2;
}
function setValue(int num){
a1 = num;
}
function setValue1(int num) constant{
a1 = num;
}
function isEqual(int a, int b) public pure returns(bool) {
return a == b;
}
}
下面我們通過使用或者不使用修飾符constant為a1賦值,看看constan的具體效果


3. payable講解
- 任何函式,只要修飾為payable,那么就可以在呼叫這個方法的時候,對value欄位賦值,然后將價值value的錢轉給合約,
- 若這個函式沒有指定payable,但是對value賦值了,那么本次呼叫會報錯,
pragma solidity ^0.4.24;
contract test1 {
uint public num;
//如果建構式中未指定payable關鍵字,那么創建合約時不允許轉賬
//如果指定了payable,則可以轉賬
constructor() public {
//建構式
//僅在部署合約時呼叫一次,完成對合約的初始化,可以在創建合約時轉錢到合約
}
//任何函式,只要指定了payable關鍵字,這個合約就可以接受轉賬,呼叫時,也可以轉0
function giveMoney() public payable {
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/2739.html
標籤:python
