【eos不定期更新的日常】系統合約最近升級了什麼?

weixin_33890499發表於2018-09-10

簡介

最近實在太懶惰了,再勤快點寫篇eos最近的動向為大家充充電。所謂幣圈一日,人間一年,eos主網上線不知不覺已經三個月了,其中有很多bug亟待block.one解決。最近一次的系統合約升級,就有效的解決了好幾個系統問題。

升級流程

之前,我在寫eosio.msig提案合約的時候,順嘴提了一句eosio賬戶的許可權,已經被21個超級節點所控制了。再跟大家複習下,目前,eosio賬戶被eosio.prods賬戶控制,而eosio.prods賬戶被21個超級節點的出塊賬戶控制,由於eos的超級節點是實時選舉的,這個控制權也是實時變動的。

4194218-9e67b9efca89af16.png
eosio賬戶許可權
4194218-7b20823a66b2df0c.png
eosio.prods賬戶許可權

那麼,如果系統合約需要升級,也需要走eosio.multisig提案合約,取得21個節點中的15個節點的批准,才能升級系統合約。但是,官方文件給出了更加簡單的合約升級方法:構造交易、離線簽名、最後集齊15個超級節點的簽名,再一次性廣播重新部署系統合約,詳見文件。這種方式多用於交易所冷錢包,之後,也會為大家介紹交易所冷錢包一般怎麼發交易的。

一般,主網上如果有重大更新需要21個超級節點授權,都會以提案的方式釋出在主網上,大家可以去eos authority上檢視block.one對主網的最新提案。

升級內容

升級內容原文詳見release note v1.3.0。下面,我將為大家簡單說一下升級內容。

eosio.token合約更新

eosio.token合約新增了open方法。作用是:可以允許使用者自己花費ram為自己或者其他賬戶建表。這個表用於儲存特定token的資訊。傳參如下:

- owner:為哪個賬戶建表

- symbol:token的符號

- ram_payer:支付ram的賬戶

4194218-854cd55dcc723903.png
open方法實現細節

如果發現owner賬戶下,沒有符號為symbol的token,則會為它建立一個餘額為0的新表。

大家肯定會問,這個功能有什麼用?在eosio.token合約升級之前,建表的規則是:賬戶A轉賬一定數量的token給賬戶B,如果賬戶B中沒有該token的表,自動消耗賬戶A的ram為賬戶B建表,每次建表ram的消耗大約在0.22KB左右。

大家應該看出問題了吧,ram資源在eos中是一次性的資源,消耗完了得買,之前ram價格還炒成了天價。這樣的特性,對於交易所提幣,以及基於eos空投的專案方而言,是非常不友好的,增加了非常大的成本。

當新的eosio.token合約生效後,新使用者如果希望獲得糖果或者僅使用eos轉賬功能,都需要其他賬戶幫忙購買ram並建表。對於空投的專案方來說,成本大大降低,大家也更有意願在eos上發幣和構建專案。

eosio.msig合約更新

eosio.msig合約新增了invalidate方法。這個方法的詳細實現,我在上一篇【eos全家桶系列】eos系統合約介紹 — 提案合約eosio.msig (下)已經有了詳細的介紹,大家可以看看。這個方法簡單來說作用是:如果賬戶A發生了許可權移交,則新許可權的獲取者可以執行invalidate方法,讓舊許可權通過但尚未執行的提案失效,防止許可權被改回去。詳細的使用場景見issue博文

eosio.system合約更新

1. 新增表結構 abihash,用於展示,當呼叫eosio.system合約的setabi方法後,最近變更的合約的hash。

2. 修改了投票收益的演算法,讓節點收益更加合理。這部分的更新詳見EOS Spark的文章,這裡就不再贅述。

後記

今天,為大家簡要介紹了eos的系統合約的升級內容。之後,我也會在介紹eos大框架的同時,時不時插入一點最近的熱點和新聞,希望能為大家充值點信仰。

相關文章