一套大型的智能合約通常都會拆分成許多小合約,並且透過匯入的方式拼裝而成,而這樣的匯入在Solidity世界中就是「Import」,就讓我們來看看「Import」到底怎麼運用吧!
基本的相對路徑匯入方式
假設目錄結構如下
example.sol
other.sol
我們引入的方式就會是:
import './other.sol'
也可以遠端匯入
import 'https://example.com/xxx.sol'
彈性的自訂名稱功能
當衝突發生時
當我們使用import時,預設會採用外部模組定義好的方法名稱,但這樣很容易發生衝突,假設外部有一個方法定義為「add()」,但內部也定義成相同名稱的方法時,會發生「DeclarationError」的錯誤,示範如下:
external.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7.0;
function add(uint x, uint y) pure returns (uint) {
return x + y;
}
example.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7.0;
import {add} from "./external.sol";
contract Example {
function add(uint x, uint y) public pure returns (uint) {
return x + y;
}
}
發生的錯誤如下:
如何補救呢?
solidity也跟javascript一樣提供別名的方式,為外部的衝突方法特定一個內部名稱,避免與內部相互衝突,import的方式如下:
import {add as extAdd } from "./external.sol";
結語
這次介紹的import對於模組化非常的有幫助,尤其是分工協作的開發模式下,將需要的模組、功能規劃完畢之後就能夠各自進行開發,並且最終統一彙整,以拼裝積木的方式將各個功能模組兜在一起就能完成一份更加完整的智能合約,也讓合約的內容更加清晰,不會過於複雜。
今天的範例都在這裡「📦 solidity-remix-toturial/Ep16」歡迎自行取用。
---------------------------------------------------------------------------------
喜歡撰寫文章的你,不妨來了解一下:
Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?
歡迎加入一起練習寫作,賺取知識,累積財富!
留言
張貼留言