更新於 2022/05/21閱讀時間約 1 分鐘

智能合約開發實戰(19) - factory pattern 工廠模式

factory pattern 工廠模式簡單的說就是負責創建一系列相同品質的智能合約為什麼說是相同品質呢?因為有相同的模版,所以做出來的智能合約品質也會相同,我知道看到這裡可能還是有人會覺得霧煞煞的,沒關係,我們用下面的實作來說明就會比較清楚了:
在上程式碼之前先說明一下為什麼需要在 Solidity 中使用工廠模式有以下三種原因:
  • 如果您想創建同一個合約的多個實例,並且您正在尋找一種方法來跟踪它們並使它們的管理更容易。
  • 部署時節省氣體:您可以僅部署工廠,稍後使用它來部署其他合約。
  • 提高合約安全性。
接下來我們就來實作一下,我們用車來說明,這樣大家應該會比較了解一點,直接上程式碼:
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

//汽車模版
contract Car {
  string public model;
  address public owner;
  uint public cost;

  constructor(string memory _model, address _owner) payable {
    model = _model;
    owner = _owner;
    cost = msg.value;
  }
}

//汽車工廠
contract CarFactory {
  Car[] public cars;// 記錄汽車

  // function create(string memory _model) public {
  //     Car car = new Car(_model, address(this));
  //     cars.push(car);
  // }

  function createWithMoney(string memory _model) public payable {
    //必須有足夠的乙太幣才行
    require(msg.value >=1 ether, "Not enough money");
    //創建一台車
    Car car = new Car{value: msg.value}(_model, address(this));
    cars.push(car);//記錄所有創建的車
  }
}
上面是一個簡單的範例,說明的是建立一個汽車的模版,正常來說我如果要創建不同汽車合約,我必須要寫很多個smart contract,這時候就需要有一個模版來幫我們快速的創建這些汽車合約,然後CarFactory就是我們的汽車工廠,裡面就能引用Car(汽車模版)來幫我們創建很多的汽車,而不需要寫一個一個的合約,另外有一個優點是:方便管理這些創建出來的子合約,由於子合約是統一由汽車工廠創造的,當然也就方便我們查找特定的合約或是禁用該合約囉,當然相關在創建時的檢查當然也是少不了的,以上就是一個簡單針對工廠模式的說明,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。 如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.