iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Web 3

從心出發認識Web3系列 第 16

[Day 16] 區塊鏈實作—用Solidity呼叫函數

  • 分享至 

  • xImage
  •  

經過昨天對Solidity的初步認識,今天要介紹的是函數在合約上的應用,對內容有興趣的歡迎一起看下去喔~~

函數Function

即是透過呼叫或是輸入參數得到回傳值或是修改某些值。在Solidity的語言中可以回傳多個值
https://ithelp.ithome.com.tw/upload/images/20221001/20152357GEAE0sgWCx.png
放大來看一下程式碼的部分

pragma solidity ^0.8.11;
contract MyContract{
    uint public x;
    uint public y;
    uint public z;
    function multipleReturns() public view returns(uint a,uint b,uint c ){
    return(4,5,6);
    }
    function processMultipleReturns() external{
        (x,y,z) = multipleReturns();
    }
 }

https://ithelp.ithome.com.tw/upload/images/20221001/20152357cxs7XQDj98.png
定義函數的執行或訪問權限:主要是防止他人對我們的合約狀態進行修改
種類:
public:即公開的,任何合約或帳戶都有呼叫函數的權限
private:非公開的,只有當前合約才有呼叫函數的權限
external:除了自己和繼承以外的合約都有呼叫函數的權限
internal:和external相反,只有自己和繼承的合約才有呼叫函數的權限

建構子

當合約被創建時只會跑一次的函數,通常用於初始宣告

contract Practice{
    uint c;
   constructor() public{
       c=5;
   }
    
}

也可以在建構子裡面放入參數

contract Practice{
    uint c;
   constructor(uint new_c) public{
       c=new_c;
   }
    
}

Fallback Function

只有external的權限,發生在沒有任何符合交易的情況下就會觸發,像是當一筆交易並非由呼叫函數引起的而被送往合約時,就會執行。

最後運用今天所學來實作一個查看當前合約擁有的金額

https://ithelp.ithome.com.tw/upload/images/20221002/20152357EB456dLqiG.png

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Practicetime{
    function getBalance () public view returns(uint){
        uint now = address(this).balance;
        return now;
    }
    fallback () external payable{

    }
}

https://ithelp.ithome.com.tw/upload/images/20221002/20152357SeuAJ3y80a.png
注意此實作在執行前須連線到網路錢包(例:METAMASK)才可執行

今日心得:

呼叫函數用在區塊鏈是修改區塊鏈上的狀態,此過程也是進行交易的步驟之一,所以會被記錄在鏈上。
今天的內容主要是學習Solidity的呼叫函數,感謝看到最後的你~~~/images/emoticon/emoticon41.gif
參考書籍:Solidity實戰全書


上一篇
[Day 15] 區塊鏈實作—用Solidity寫HelloWorld!
下一篇
[Day 17] 區塊鏈實作—訊息和編碼
系列文
從心出發認識Web330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言