• Raft PBFT

    Reliable, Replicated, Redundant, And Fault-Tolerant

    Practical Byzantine Fault Tolerant

  • 吃人一口,還人一斗 我思故我在

    字面上意思是說,受別人一點幫助,就要思考如何回報他更多。

    同義的:受人點滴,湧泉以報

    我覺得更值得更深入思考的是,

    當你輕易地要求別人的幫助時,你就得有心理準備,要返還十倍或更多。

    所以,當自己能做到,不輕易要求別人的幫忙。

    (說到這裡,小伙伴會覺得跟我以前說的”情感投入報酬”不一樣,情境不同暫不展開)

    這是台灣的俗語,用台語發音更有味道。

  • 瘋狂宇宙 我思故我在

    這個宇宙太瘋狂,大海掀翻了小池塘。

  • 區塊鏈是工具,要合理的使用;而非商品炒作。我思故我在

  • 賀賀郎,哇嗄哩供喂 我思故我在

    意思就是說,我是一個好好的、正常的人,我幹嘛跟你講話。

    一般用於朋友間小小辨論時,無法說服對方而使用。

    請不要企圖說服價值觀不在同個方向上的人或朋友。

  • Ethereum 塞車體驗 我思故我在
    下午四點,第一次體驗到 Eethereum 的塞車,一個 Uniswap 的交易等了一個鐘頭

    約1600 左右的交易,到 1702 收到通知完成

    不是說好的幾秒鐘,幾分鐘哦。造成這個情況的這是 TPS 限制嗎?還是真的有大量垃圾訊息或攻擊導致的?

  • 中心思想 我思故我在

    行為會改變、技術會改變,但中心思想不會變
    如同你會隨著環境而適應,但你的價值觀沒那麼容易改變

    中心思想、價值觀要改變,需要非常深刻的思考及體會,一般人在成長階段接受了某種價值觀,就不容易再改變了。

  • 現在想想,還好選了 ethereum 入門 我思故我在
    當時本來是想跟 Bruce 在公司的決定一樣,從 Fabric 開始。最近沒聯絡不知道發展得如何?

    還好選了 ethereum 入門

  • 成大事者不拘小節 魔鬼藏在細節裡 我思故我在

    兩句話看似相互矛盾,但其實使用的場景是不同的
    年輕人,把這兩句話串在一起,就定位成幹話

    真的這淺薄嗎?

  • 想像力比知識更重要?我思故我在

    你的問題在於書讀得太少,想得太多。

    如果是可比較的,那請您思考:想像力固然重要,是不是應該讓你的知識追上你的想像力?

OpenZeppelin 可昇級合約插件 8/9 從 OpenZeppelin CLI 部署

以太坊 ethereum andy 2周前 (11-09) 59次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

OpenZeppelin 可昇級合約插件 8/9 從 OpenZeppelin CLI 部署

差異性

CLI 和 插件 的主要不同之處,是CLI用於追蹤合約的可昇級部署。在某些情況下這很方便,因為不需要擔心太多關於代理合約、功能合約及地址。可以專注於按照名稱昇級合約或送到合約的交易。
讓CLI持續追蹤也會帶來額外的限制,限制使用不同的工具和工作流程。但是由於插件是設計為可以獨立於 CLI 工作的,因此我們消除了一些限制,可以靈活地追蹤代理合約。(補充,此段敘述並沒有說明什麼,CLI 和 Plugin 兩者還是有不同,只是為了插件環境,但插件還是有其限制。)

除了上述的不同(CLI是用來追蹤合約的可昇級部署)之外其餘都一樣,因為在背後都是使用相同的 Proxy 和 ProxyAdmin 合約,來產生兩個不同的接口來管理它們。這表示部署專案不會跟鏈上有任何接觸,每件事都是安全而且是在本地的。

安裝

安裝 Truffle ,並且初始化專案
注意:
當 Truffle 詢問時,選擇不覆寫合約,或是測試目錄的話,就不會進行初始部署,要確定的是建立了 Migrations.sol 和初始化部署。

$ npm install --save-dev truffle 
$ npx truffle init

然後安裝可昇級合約插件

$ npm install --save-dev @openzeppelin/truffle-upgrades

部署 CLI 專案

注意,這是一個單向的過程,確定你對 ./openzeppeling/ 已經備份或是版本管理。

現在我們開始部署專案

$ npx migrate-oz-cli-project

以下是輸出結果

✔ Successfully migrated .openzeppelin/rinkeby.json 
✔ Migration data exported to openzeppelin-cli-export.json 
✔ Deleting .openzeppelin/project.json 

These were your project's compiler options: 
{ 
    "compilerSettings": {
        "optimizer": { 
            "enabled": false, 
            "runs": "200" 
        } 
    }, 
    "typechain": { 
        "enabled": false 
    }, 
    "manager": "openzeppelin", 
    "solcVersion": "0.6.12", 
    "artifactsDir": "build/contracts", 
    "contractsDir": "contracts" 
}

這個腳本跟插件一起安裝,作用是刪除 CLI專案文件,以及將存放於 .openzeppelin 目錄底下舊的網路設定檔轉換為跟插件一樣的檔案。再次提醒,這不會改變任何鏈上的東西,只有本地端的檔案。另外要注意到,一旦執行這個腳本,就不能再用 CLI 管這個專案,除非從備份或版本管理裡面還原。

部署腳本會輸出名為 openzeppelin-cli-export.json 的檔案到工作目錄裡面,其中包括CLI 用來做為管理的所有資料,你可以任意使用。這裡面包括編譯的設定,為了方便,這些設定也會在編譯完成之後,列印在螢幕上。接下來要把這些設定加到專案的組態裡面:

在 compilers 欄位裡面找到編譯器的設定,並且複製下來

// truffle-config.js

module.exports = {
  // ...
  compilers: {
    solc: {
      version: "0.6.12",
      settings: {
        optimizer: {
          enabled: false,
          runs: 200
        }
      }
    }
  }
}

注意: solc 設檔案的格式跟 truffle-config.js 和 buidler.config.js 檔案不一樣

這樣就完成了 CLI 專案的部署。接下來試試用這些新的設定檔來昇級你部署好的合約的其中之一。

昇級到新版本

假設我們有一個 Box 合約是 CLI 專案之一,發佈在 Rinkeby 網路上。打開輸出的檔案,會類似如下

// openzeppelin-cli-export.json
{
  "networks": {
    "rinkeby": {
      "proxies": {
        "openzeppelin-upgrades-migration-example/Box": [
          {
            "address": "0x500D1d6A4c7D8Ae28240b47c8FCde034D827fD5e",
            "version": "1.0.0",
            "implementation": "0x038B86d9d8FAFdd0a02ebd1A476432877b0107C8",
            "admin": "0x1A1FEe7EeD918BD762173e4dc5EfDB8a78C924A8",
            "kind": "Upgradeable"
          }
        ]
      }
    }
  },
  "compiler": {
    // we'll ignore compiler settings for this
  }
}

這個檔案是 JSON 格式,包括了可昇級合約的以下訊息

  • address: 代理合約地址(代理合約包括可昇級合約的狀態)
  • implementation: 功能合約地址(可昇級合約裡,負責邏輯合約的地址)
  • admin:代理合約管理員的地址,除非另外設定,否則就是 ProxyAdmin 合約的地址

以下就是我們決定把 Box 合約昇級到 BoxV2 合約,給插件的輸出檔案,看起來的樣子:

// migrations/2_upgrade_box_contract.js


const { upgradeProxy } = require('@openzeppelin/truffle-upgrades');
const OZ_SDK_EXPORT = require("../openzeppelin-cli-export.json");


const BoxV2 = artifacts.require('BoxV2');


module.exports = async function (deployer) {
  const [ Box ] = OZ_SDK_EXPORT.networks.rinkeby.proxies["openzeppelin-upgrades-migration-example/Box"];
  const instance = await upgradeProxy(Box.address, BoxV2, { deployer });
  console.log("Upgraded", instance.address);
};

然後再執行 Truffle 的部署。可以參考[2], 和 truffle-upgrades 插件[3]

$ npx truffle migrate --network rinkeby

這樣,就完成了 OpenZeppelin CLI 專案的部署,部署到 Truffle 或 Buidler 然後使用插件昇級。

參考

[1]https://docs.openzeppelin.com/upgrades-plugins/1.x/migrate-from-cli
[2]https://www.trufflesuite.com/docs/truffle/getting-started/running-migrations
[3]https://docs.openzeppelin.com/upgrades-plugins/1.x/truffle-upgrades


神隊友學長Andy , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:OpenZeppelin 可昇級合約插件 8/9 從 OpenZeppelin CLI 部署
喜欢 (0)
[320208045@qq.com]
分享 (0)
andy
关于作者:
中年大叔,打拼 like young students.
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址