智能合約開發實戰(16) - Import

閱讀時間約 1 分鐘
我們從上一篇知道了可以從B合約調用A合約的方法,這一篇來講一個更為常用的調用方法:Import,Import在很多程式語言裡面都有,用處是可以調用其他的程式片段,因為如果程式都寫在一起,那麼一支程式裡面就會過於龐大,而且也沒辦法共用,為了增加使用性,會把常用的方法抽取出來,等需要用的地方再Import進去使用就好,這樣可以大量的簡單化程式碼,程式不是寫的愈龐大就愈好,應該是愈簡單、愈單純讓人一眼就能理解愈好,因為程式往往最後不是開發的那個人在維護的,所以寫得愈讓人能簡單理解愈能減少維護的時間和成本,因為時間就是金錢也是成本。
下面我們就來講解Import該怎麼使用及可以調用外部在GitHub上面寫好的合約,比如說OpenZeppelin的ERC20合約,這些合約會比自己開發的ERC20合約來的安全一點,因為是公開的,有經過市場上面的認證,有漏洞早就被挖出來修正了。
直接上程式碼:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "./CallFromContract.sol";
contract ImportContract{
  ContractA public A;
  //Call A的第一種型式
  function callSetX(uint _x) public {
    A.setX(_x);
  }
  
  //Call A的第二種型式
  function callSetXFromAddress(uint _x) public {
    A.setX(_x);
  }
  //調用合約A的設定X和傳送ETH幣
  function callSetXandSendEther(uint _x) public payable {
    A.setXandSendEther{value: msg.value}(_x);
  }
}
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
  // constructor() ERC20("cryptoljia", "JIA") {
    
  // }
  //初始化 ERC20必須給name和symbol
  constructor(string memory name, string memory symbol) ERC20(name, symbol) {
    
  }
  //重寫ERC20的decimals
  function decimals() public pure override returns (uint8) {
    return 9;
  }
}
從程式碼可以看出ImportContract我們照著上一篇的參考,把Contract B的寫法搬到ImportContract裡面,可以看到因為有Import,所以就不需要Contract A的address就可以調用了。
https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token
另外我們也可以調用外部的合約,最常用的是OpenZeppelin的相關ERC合約,程式碼裡面我們引用了ERC20的合約,路徑在這:https://github.com/OpenZeppelin/openzeppelin-contracts,進到"/contracts/token"裡面就可以找而很多ERC的合約了,Import進來你的合約內就可以引用了,程式碼內是引用了ERC20合約,也就是乙太幣的合約,我重寫了ERC20的decimals,把原本18位改為9位,各位也可以試著override ERC20裡面的其他方法。
OpenZeppelin還蠻常會用到的,因為上面有寫好的ERC合約範本,用這種公開的範本會比自己創建的來的安全,OpenZeppelin後面我們也會再看到,這部份有空再做介紹,這邊只要會引用就可以了。
ImportContract的部份各位就可以自己Deploy上去玩看看,我這邊就不再貼上來了,只是要注意的是:MyToken在Deploy時,記得要給NAMESYMBOL
由於MyToken我們引用了ERC20合約,所以MyToken也就是一個ERC20的合約了,這部份各位可以玩看看,以上就是Import的介紹,有什麼錯誤的地方也歡迎留言跟我說,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
20會員
38內容數
目前加密貨幣的市場上幣種非常的多 讓你看得眼花撩亂了嗎? 可以藉由這一系列的加密貨幣分析 能夠幫忙您了解每一個加密貨幣它的價值所在 每一集都會介紹一種幣 是一個很實用的專題,歡迎大家訂閱~
留言0
查看全部
發表第一個留言支持創作者!
宅D嘉的沙龍 的其他內容
創建兩個合約A和B,介紹怎麼由合約B去調用合約A
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
在智能合約的函數裡面,最常用的就是檢查使用者是不是合約的Owner: 這樣寫的話,每個需要檢查是否為Owner的函數就必須都要這樣寫入,為了程式碼的簡潔和提高重覆利用,我們來使用modifier看看: 上面我們是看到了檢查的部份,那為什麼叫修改器呢?下面讓我們來看看:
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
此篇我們也來介紹另外一個也是蠻常用又蠻重要的Mapping,它和陣列有點像,但比較不同的是:它不能用迴圈的方式取出裡面所有的資料,但陣列可以,Mapping比較像是一個查詢系統,用key值可以取出裡面的value值。
這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
創建兩個合約A和B,介紹怎麼由合約B去調用合約A
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
在智能合約的函數裡面,最常用的就是檢查使用者是不是合約的Owner: 這樣寫的話,每個需要檢查是否為Owner的函數就必須都要這樣寫入,為了程式碼的簡潔和提高重覆利用,我們來使用modifier看看: 上面我們是看到了檢查的部份,那為什麼叫修改器呢?下面讓我們來看看:
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
此篇我們也來介紹另外一個也是蠻常用又蠻重要的Mapping,它和陣列有點像,但比較不同的是:它不能用迴圈的方式取出裡面所有的資料,但陣列可以,Mapping比較像是一個查詢系統,用key值可以取出裡面的value值。
這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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 網路上。從這裡出發,開始擁有第一張去中心化圖片吧!