阿Han
阿Han

文字是留下記錄的一種媒介,將知識吸收轉化後輸出成文字進行保存。 ☕️ https://liker.land/willhanchen/civic

【開發智能合約 - Solidity系列】實作篇Ep.16 - 匯入模組拚積木(Import)

一起動動手來玩玩智能合約吧!

圖片來源

一套大型的智能合約通常都會拆分成許多小合約,並且透過匯入的方式拼裝而成,而這樣的匯入在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」歡迎自行取用。

📚 更多關於Solidity的文章請看這裡…

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…
加载中…

发布评论