iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Web 3

從心出發認識Web3系列 第 18

[Day 18] 區塊鏈實作—合約的繼承

  • 分享至 

  • xImage
  •  

今天的介紹可以說是[DAY16] (區塊鏈實作—用Solidity呼叫函數)的延伸,因為繼承和建構子有著微妙的關係,在許多程式語言裡面也都有繼承的概念,那在Solidity裡的繼承又有什麼樣的特性呢?對內容有興趣的歡迎一起看下去喔~~

繼承Inheritance

當一個合約從多個合約繼承後,最後實際佈署上去的仍只有一個合約,那為什麼會有繼承的概念出現呢?其實是因為一份智慧合約裡面包含著很多合約,裡面有許多方法和屬性相同,如果把相同的合約寫在一起,變成父合約,然後透過其他子合約加入差異的地方並繼承,整份合約看起來也就輕鬆許多了。

Modifier

在父合約定義modifier後,可以在子合約定義函數時進行呼叫
https://ithelp.ithome.com.tw/upload/images/20221003/20152357sxe7ZKsQoR.png

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Practicetime4{
    address owner;
    constructor () public{
        owner = msg.sender;
    }
    modifier onlyOwner{
        require(msg.sender == owner);
        _;
    }
    modifier costs(uint price){
        if(msg.value >= price){
            _;
        }
    }
}

https://ithelp.ithome.com.tw/upload/images/20221003/20152357oe1vx6OloV.png

Overriding

當一個子合約的函數被宣告override時,表示它正在改變父合約的函數,即稱作「覆寫」。
https://ithelp.ithome.com.tw/upload/images/20221003/20152357MzSzwMh9rJ.png

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract A {
    function foo() public pure virtual returns (string memory) {
        return "A";
    }
}
contract B is A {
    function foo() public pure virtual override returns (string memory) {
        return "B";
    }
}
contract C is A {
    function foo() public pure virtual override returns (string memory) {
        return "C";
    }
}

https://ithelp.ithome.com.tw/upload/images/20221003/20152357gp1pL1QOLQ.png

Super

當一個合約被多個合約繼承時,透過super可以呼叫最初的父合約。
https://ithelp.ithome.com.tw/upload/images/20221003/20152357cc1HQyQR7V.png

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract B {
    uint public i;
    function f() public virtual{
        i = 1;
    }
}
contract A is B{
    function f() public virtual override{
        i = 2;
    }
}
contract C is A{
    function f() public virtual override{
        i = 3;
    }
function f1() public{
    super.f();
}
function f2() public{
    A.f();
}
function f3() public{
    B.f();
    }
}

https://ithelp.ithome.com.tw/upload/images/20221003/20152357t48K84slej.png

今日心得:

經過這幾天的實作,對Solidity慢慢開始有熟悉了,雖不及能夠獨立寫出一份完整合約的程度,在實作上要學的還很多,之後除了鐵人賽以外的時間我會在更深入學習研究的!
明天會是區塊鏈學習的最後一篇,也算是對區塊鏈下個總結。
今天的內容主要是Solidity訊息和編碼的介紹,感謝看到最後的你~~~/images/emoticon/emoticon41.gif
參考書籍:Solidity實戰全書
參考資料:
https://vocus.cc/article/61e80d66fd89780001a197b1
https://solidity-by-example.org/inheritance/


上一篇
[Day 17] 區塊鏈實作—訊息和編碼
下一篇
[Day 19] 區塊鏈的更多應用與未來
系列文
從心出發認識Web330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言