• Raft PBFT

    Reliable, Replicated, Redundant, And Fault-Tolerant

    Practical Byzantine Fault Tolerant

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

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

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

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

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

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

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

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

  • 瘋狂宇宙 我思故我在

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

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

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

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

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

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

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

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

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

  • 中心思想 我思故我在

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

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

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

    還好選了 ethereum 入門

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

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

    真的這淺薄嗎?

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

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

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

OpenZeppelin 合約昇級插件 9/9 OpenZeppelin 提供給 Truffle 的 API

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

OpenZeppelin 合約昇級插件 9/9 OpenZeppelin 提供給 Truffle 的 API

函數 deployProxy 和 upgradeProxy 會返回 Truffle 合約的實體,并要求以 Truffle 合約類別(由 artifacts.require取回)做為參數。
(補充:本篇的 migrate 跟 deploy 以原文書寫,以免混淆)

deployProxy

透過傳入一個 Truffle 合約類別做為功能合約,來建立代理合約,會返品代理合約的實體地址和程式介面。在 migrate 時代理合約地址將存放在功能合約的 artifact 裡面(補充,artifact 這裡面包括介面,二進制的合約,及其他資訊), 所以可以用 deployed() 來載入。

如果參數 args 是一個集合,在代理合約 deploy 時,可以做為參數來調用 initialize 函數。
這個函數的 opts 參數如下
initializer: 調用不同的初始化函數
deployer: 設定在 Truffle migrate 期間不同的 deployer
unsafeAllowCustomTypes:允許在功能合約中使用 struct 和 enum 等自定義類型,因為存儲兼容性驗証[1]不處理自定義類型,所以確定引入的改變是安全的。
unsafeAllowLinkedLibraries:允許在 deployment 時,使用外部程式庫連結到功能合約,因為插件還不支持外部程式庫[2]

async function deployProxy(
  Contract: ContractClass,
  args: unknown[] = [],
  opts: { deployer: Deployer, initializer: string, unsafeAllowCustomTypes: boolean, unsafeAllowLinkedLibraries: boolean } = {},
): Promise

upgradeProxy

將一個代理合約內指到功能合約的地址,昇級成新的功能合約地址,並且返回該功能合約的實體,包括代理合約地址,新功能合約的程式介面。
opts 參數如下
deployer: 設定在 migtate 期間 deployer 的地址
unsafeAllowCustomTypes: 允許在功能合約中使用 struct 和 enum 等自定義類型,因為存儲兼容性驗証[1]不處理自定義類型,所以確定引入的改變是安全的。
unsafeAllowLinkedLibraties: 允許在昇級時使用外部程式庫連結到功能合約,因為插件還不支持外部程式庫[2]

async function upgradeProxy(
  proxyAddress: string,
  Contract: ContractClass,
  opts: { deployer: Deployer, unsafeAllowCustomTypes: boolean, unsafeAllowLinkedLibraries: boolean } = {},
): Promise

prepareUpgrade

驗証和 deploy 一個新的功能合約,並且返回該合約的地址。使用這個方法來準備一個由管理者地址執行的昇級,這個昇級不能直接由 Truffle 運行或是你不能直接控制的。
opts 參數如下
deployer: 設定在 migtate 期間 deployer 的地址
unsafeAllowCustomTypes: 允許在功能合約中使用 struct 和 enum 等自定義類型,因為存儲兼容性驗証[1]不處理自定義類型,所以確定引入的改變是安全的。
unsafeAllowLinkedLibraties: 允許在昇級時使用外部程式庫連結到功能合約,因為插件還不支持外部程式庫[2]

admin.changeAdminForProxy

改變指定的代理合約的管理者地址。接收要改變的合約地址和新管理者地址。

async function changeAdminForProxy(
  proxyAddress: string,
  newAdmin: string,
): Promise

admin.transferProxyAdminOwnership

改變指定的代理管理合約的擁有者地址,這個管理合約地址是所有代理合約預設有昇級權限的管理者。

async function transferProxyAdminOwnership(
  newAdmin: string,
): Promise

補充,本篇有另一篇雙胞胎文章,環境為 buidler ,其中API函數相同,只有參數名稱、類型略有不同,所以不再重寫一次。請參考[3]

參考

[1]https://docs.openzeppelin.com/upgrades-plugins/1.x/faq#what-does-it-mean-for-an-implementation-to-be-compatible
[2]https://docs.openzeppelin.com/upgrades-plugins/1.x/faq#why-cant-i-use-external-libraries
[3]https://docs.openzeppelin.com/upgrades-plugins/1.x/api-buidler-upgrades


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

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

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