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

更新於 2022/04/30閱讀時間約 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的介紹,有什麼錯誤的地方也歡迎留言跟我說,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
avatar-img
20會員
38內容數
目前加密貨幣的市場上幣種非常的多 讓你看得眼花撩亂了嗎? 可以藉由這一系列的加密貨幣分析 能夠幫忙您了解每一個加密貨幣它的價值所在 每一集都會介紹一種幣 是一個很實用的專題,歡迎大家訂閱~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
宅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
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
前言 本篇要用 Token-2022 和 solana cli 來鑄造一個新的代幣叫做TYC。 如前篇所述,Token-2022 與 Spl Token 是不同的 Program,所以在呼叫的時候要特別註明以示明區別。 Token-2022 Program ID 地址: TokenzQdBNb
Thumbnail
这篇文章主要介绍了以太坊科普:理解ERC-20 token合约的相关资料,希望这篇关于理解ERC-20 token合约的文章,能够帮助各位朋友对以太坊有个更加深入的了解。 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R8
Thumbnail
为了编写智能合约,开发人员往往需要选择一种适合的编程语言,目前市场上有几种常用的智能合约编程语言,比如Solidity、Vyper、Michelson等,那么具体智能合约常用语言有哪些,让我们一起来看看吧 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续
这篇文章主要介绍了智能合约地址什么意思?智能合约安全吗?的相关资料,智能合约是表示为一段代码的合约,旨在执行一组指令。很多人不知道是智能合约地址什么意思,下面小编带大家深入的了解一下,一起来看看吧! 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
经常关注区块链的投资者,一定对于智能合约不太陌生,智能合约开源与不开源其实还是有很大的差别的,了解智能合约开源与不开源的区别究竟是什么?能有效帮投资者避免不靠谱项目,下面就让小编为大家详细介绍一下这其中的区别 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20%
Thumbnail
比特币合约交易入门指南:合约交易允许投资者通过判断未来币种价格获利,但风险很高,需要自控和适度使用杠杆、止损订单等技巧,新手须了解入门教程避免资产损失。 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R851UX3N 合
TRC20,ERC20,Bep20是三种不同的区块链协议,分别基于波场(TRON),以太坊(Ethereum)和币安智能链(BSC)网络。它们都可以用来发行代币,比如USDT,但是在转账费用、交易速度、智能合约等方面有一些差异。本文将介绍TRC20和ERC20的概念、特点和区别,以及如何在两种协议之
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
過去BTC比特幣協定主要作為紀錄的block區塊,所以較沒有ETH以太坊生態的靈活性,2023年Casey Rodarmor提出Ordinals銘文概念,使比特生態有了新的樣貌,而BRC-20即是Ordinals銘文概念的一種延伸,類似於以太鏈的ERC-20。
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
前言 本篇要用 Token-2022 和 solana cli 來鑄造一個新的代幣叫做TYC。 如前篇所述,Token-2022 與 Spl Token 是不同的 Program,所以在呼叫的時候要特別註明以示明區別。 Token-2022 Program ID 地址: TokenzQdBNb
Thumbnail
这篇文章主要介绍了以太坊科普:理解ERC-20 token合约的相关资料,希望这篇关于理解ERC-20 token合约的文章,能够帮助各位朋友对以太坊有个更加深入的了解。 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R8
Thumbnail
为了编写智能合约,开发人员往往需要选择一种适合的编程语言,目前市场上有几种常用的智能合约编程语言,比如Solidity、Vyper、Michelson等,那么具体智能合约常用语言有哪些,让我们一起来看看吧 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续
这篇文章主要介绍了智能合约地址什么意思?智能合约安全吗?的相关资料,智能合约是表示为一段代码的合约,旨在执行一组指令。很多人不知道是智能合约地址什么意思,下面小编带大家深入的了解一下,一起来看看吧! 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
经常关注区块链的投资者,一定对于智能合约不太陌生,智能合约开源与不开源其实还是有很大的差别的,了解智能合约开源与不开源的区别究竟是什么?能有效帮投资者避免不靠谱项目,下面就让小编为大家详细介绍一下这其中的区别 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20%
Thumbnail
比特币合约交易入门指南:合约交易允许投资者通过判断未来币种价格获利,但风险很高,需要自控和适度使用杠杆、止损订单等技巧,新手须了解入门教程避免资产损失。 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R851UX3N 合
TRC20,ERC20,Bep20是三种不同的区块链协议,分别基于波场(TRON),以太坊(Ethereum)和币安智能链(BSC)网络。它们都可以用来发行代币,比如USDT,但是在转账费用、交易速度、智能合约等方面有一些差异。本文将介绍TRC20和ERC20的概念、特点和区别,以及如何在两种协议之
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
過去BTC比特幣協定主要作為紀錄的block區塊,所以較沒有ETH以太坊生態的靈活性,2023年Casey Rodarmor提出Ordinals銘文概念,使比特生態有了新的樣貌,而BRC-20即是Ordinals銘文概念的一種延伸,類似於以太鏈的ERC-20。