智能合約開發實戰(五) - Function visibility

更新於 2022/02/07閱讀時間約 3 分鐘
這篇我們來談談有關Solidity Function visibility(能見度)
Solidity的function visibility有四個關鍵字(privateinternalexternalpublic)。
可以這樣理解:
  1. private私有的:只有在同一個contract內才能引用,繼承的也無法使用。
  2. internal內部的:同一個contract內可以使用,包含繼承的。
  3. external外部的:同一個contract內都不可使用,繼承的也不行,只能由第三方的contract才能調用。
  4. public公開的:開放的,上面的都可以調用。
上面這樣說好像還是很難懂,那我們就用實際的例子來做說明吧,不然怎麼叫實戰。
1.private和internal
正確應該是要把test1改成private ->internal ,這樣就會正確了,由於private只能同一個contract內才能調用,所以會報錯,改為internal就能給繼承的合約所調用了。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract TestContract {
  uint private _int1;
  //初始化
  constructor() {
  }
  
  function test1() internal view returns(uint) {
    return _int1;
  }
}

contract TestContract2 is TestContract {
  //初始化
  constructor() {
  }

  function test2() private view returns(uint) {
    return test1();
  }
}
2.external,只能外部調用
當function設為external時,function就只能第三方的contract才能調用,內部或是繼承的都不能夠調用,這是比較特別的。
3.public,public的部份我就不用再多說了,就是內調或是外調都能夠使用,算是一個全公開的function了。
最多人感到困惑的是,有public又有external,那什麼時候該用哪一個呢?為什麼有public可以用還需要external呢?我就直接都用public就好了呀,那是因為public是可以使用內調的,但external不行,在區塊鏈上,當有使用到內存,相對的gas fee就會比較高,使用external會省一半的gas fee,所以如果所使用的function不需要內調的話,用external是個比較好的選擇,畢竟乙太坊的gas fee可是很貴的,一個好的程式設計師,這點也是要考慮到的。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
avatar-img
20會員
38內容數
目前加密貨幣的市場上幣種非常的多 讓你看得眼花撩亂了嗎? 可以藉由這一系列的加密貨幣分析 能夠幫忙您了解每一個加密貨幣它的價值所在 每一集都會介紹一種幣 是一個很實用的專題,歡迎大家訂閱~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
宅D嘉的沙龍 的其他內容
所以寫程式的人都知道的一句話:「Hello World」,每一個學程式語言開始的時候都是從這句話開始的,我們也不免俗的來上這一句,從Hello World來看看智能合約入門是個什麼樣子。
上班族上班的時候,不太方便開Max或是幣安等交易所查看幣價的時候該怎麼辦呢?這篇就教你怎麼在Google試算表上就能查看幣價。
當有了初步的認識後,在要開始寫程式之前當然是要選擇用什麼IDE。 如果是線上IDE的話可以用Remix這是一個線上的Solidity IDE,可以用來撰寫Solidity 但我個人是比較習慣微軟的Visual Studio Code(之後簡稱VS Code)來撰寫,兩者其實都可以,看個人習慣。
Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的 Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言
智能合約(英語:Smart contract)是一種特殊協定,在區塊鏈內製定合約時使用,當中內含了程式碼函式 (Function),亦能與其他合約進行互動、做決策、儲存資料及傳送以太幣等功能(出處:維基百科),簡單的說就是在區塊鏈上做以太幣的交易或互動的一種程式(合約)。
最近年終歲末了,不過你們看到這篇應該已經年初了 汽車也到了又要保養又要繳保險的時間了 這篇就來簡單分享汽車保養可以怎麼省
所以寫程式的人都知道的一句話:「Hello World」,每一個學程式語言開始的時候都是從這句話開始的,我們也不免俗的來上這一句,從Hello World來看看智能合約入門是個什麼樣子。
上班族上班的時候,不太方便開Max或是幣安等交易所查看幣價的時候該怎麼辦呢?這篇就教你怎麼在Google試算表上就能查看幣價。
當有了初步的認識後,在要開始寫程式之前當然是要選擇用什麼IDE。 如果是線上IDE的話可以用Remix這是一個線上的Solidity IDE,可以用來撰寫Solidity 但我個人是比較習慣微軟的Visual Studio Code(之後簡稱VS Code)來撰寫,兩者其實都可以,看個人習慣。
Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的 Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言
智能合約(英語:Smart contract)是一種特殊協定,在區塊鏈內製定合約時使用,當中內含了程式碼函式 (Function),亦能與其他合約進行互動、做決策、儲存資料及傳送以太幣等功能(出處:維基百科),簡單的說就是在區塊鏈上做以太幣的交易或互動的一種程式(合約)。
最近年終歲末了,不過你們看到這篇應該已經年初了 汽車也到了又要保養又要繳保險的時間了 這篇就來簡單分享汽車保養可以怎麼省
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
Thumbnail
在數字化時代,金融行業正經歷戲劇性的變化。區塊鍊和人工智能(AI)等新興技術正在改變我們對金融交易和智能合約的看法。本文將深入探討人工智能和智能合約的角色,以及它們如何重新定義未來金融的重要性。 智能合約的基本概念和功能 1.什麼是智能合約?智能合約是一種合約,它們在區塊鏈上運行,自動執行和實施
Thumbnail
OKX AA 智能合約錢包結合了外部帳戶( EOA )和合約帳戶(CA)的優點,提供更高的安全性、方便性與效率,為區塊鏈錢包創建更多可能,降低新手的學習門檻。 OKX AA
Thumbnail
Bucket(桶):雜湊表儲存資料的位置,每一個位置具有唯一識別索引。 Slot(槽): 每一個Bucket裡面都會存放不同的資料,而假設一筆資料由兩個欄位組成,每一個欄位就是一個Slot(槽)。 Hash Function(雜湊演算法):計算出雜湊值的一套數學公式,諸如: MD5、SHA…
Thumbnail
什麼是零知識證明(Zero-knowledge proof) 是一種密碼學的概念,用於在不揭示具體信息的情況下,證明某個主張的正確性。它允許一方(稱為證明者)向另一方(稱為驗證者)證明某個陳述的真實性,而無需透露任何關於陳述的具體細節..., 這根本文字天書啊,底下讓我們用白話文來說一下唄! 「我必
Thumbnail
Step1:config2~3行的部分 打開public->config資料夾內的config.json 在前面的時候大家應該都有mint自己的nft並且可以在Opensea看到 所以我們現在要去Opensea找到我們NFT的合約跟token位置 https://testnets.opensea.i
Thumbnail
這篇會是端午節 NFT 系列的最後一篇文,同時也是這個系列中最核心的部分,我們終於要來實際鑄造產生 NFT,並在 OpenSea 上看看結果了,有興趣的話就繼續看下去吧。
Thumbnail
開發 NFT 專案無非三個步驟:寫程式 → 編譯程式碼 → 發佈智能合約,除了這三個步驟以外,我們還將介紹如何使用 OpenZeppelin 做為專案開發的根基,想要打造車子不再需要從輪子開始造起了,大幅增加開發專案的效率。
Thumbnail
介紹 NFT 的 Metadata、JSON 格式是甚麼,如何去客製化我們的 NFT,它的規格標準怎麼透過 Metadata 來設定的,目前最大的 NFT 二級市場 OpenSea 又提供哪些 Metadata 可以使用。
Thumbnail
在這裡,我們會分析為甚麼發行 NFT 會需要利用 IPFS 來做, IPFS 是甚麼?以及實際操作如何使用 Pinata 的服務將想要上傳的檔案放到 IPFS 網路上。從這裡出發,開始擁有第一張去中心化圖片吧!
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
Thumbnail
在數字化時代,金融行業正經歷戲劇性的變化。區塊鍊和人工智能(AI)等新興技術正在改變我們對金融交易和智能合約的看法。本文將深入探討人工智能和智能合約的角色,以及它們如何重新定義未來金融的重要性。 智能合約的基本概念和功能 1.什麼是智能合約?智能合約是一種合約,它們在區塊鏈上運行,自動執行和實施
Thumbnail
OKX AA 智能合約錢包結合了外部帳戶( EOA )和合約帳戶(CA)的優點,提供更高的安全性、方便性與效率,為區塊鏈錢包創建更多可能,降低新手的學習門檻。 OKX AA
Thumbnail
Bucket(桶):雜湊表儲存資料的位置,每一個位置具有唯一識別索引。 Slot(槽): 每一個Bucket裡面都會存放不同的資料,而假設一筆資料由兩個欄位組成,每一個欄位就是一個Slot(槽)。 Hash Function(雜湊演算法):計算出雜湊值的一套數學公式,諸如: MD5、SHA…
Thumbnail
什麼是零知識證明(Zero-knowledge proof) 是一種密碼學的概念,用於在不揭示具體信息的情況下,證明某個主張的正確性。它允許一方(稱為證明者)向另一方(稱為驗證者)證明某個陳述的真實性,而無需透露任何關於陳述的具體細節..., 這根本文字天書啊,底下讓我們用白話文來說一下唄! 「我必
Thumbnail
Step1:config2~3行的部分 打開public->config資料夾內的config.json 在前面的時候大家應該都有mint自己的nft並且可以在Opensea看到 所以我們現在要去Opensea找到我們NFT的合約跟token位置 https://testnets.opensea.i
Thumbnail
這篇會是端午節 NFT 系列的最後一篇文,同時也是這個系列中最核心的部分,我們終於要來實際鑄造產生 NFT,並在 OpenSea 上看看結果了,有興趣的話就繼續看下去吧。
Thumbnail
開發 NFT 專案無非三個步驟:寫程式 → 編譯程式碼 → 發佈智能合約,除了這三個步驟以外,我們還將介紹如何使用 OpenZeppelin 做為專案開發的根基,想要打造車子不再需要從輪子開始造起了,大幅增加開發專案的效率。
Thumbnail
介紹 NFT 的 Metadata、JSON 格式是甚麼,如何去客製化我們的 NFT,它的規格標準怎麼透過 Metadata 來設定的,目前最大的 NFT 二級市場 OpenSea 又提供哪些 Metadata 可以使用。
Thumbnail
在這裡,我們會分析為甚麼發行 NFT 會需要利用 IPFS 來做, IPFS 是甚麼?以及實際操作如何使用 Pinata 的服務將想要上傳的檔案放到 IPFS 網路上。從這裡出發,開始擁有第一張去中心化圖片吧!