時髦有趣且有用:這 12 個以太坊新事物你不能錯過

買賣虛擬貨幣

過去一年以太坊上發生了什麼?詳解以太坊上最值得關注的 12 個新鮮事物。

壞訊息:過去這一年,我們期待的區塊鏈上的重大突破依然沒有出現。

好訊息:很多新的探索依然在發生,其中不少技術方面的嘗試,被證實適用於並且有助於區塊鏈發展,它們被吸收進來,令區塊鏈成為愈發健壯的系統。在技術之外,人們也探索開源社羣的治理和公共物品的資助問題,並走出了一些道路,相比技術,這些問題的解決可能更為重要,它們是區塊鏈可持續發展的源動力。

在這篇文章中,我們邀請了 10 位區塊鏈世界的觀察者和探索者,請他們撰文介紹以太坊,這個目前區塊鏈最大開源社羣上的新鮮事物,其中會有對時下最熱門的 Rollup 的底層思路的分析,會有對 Vitalik Buterin 心心念念一整年的二次方融資的詳解,也會包含還未進入大眾視野的內容,比如 BLS 簽名對於以太坊 2.0 鑑權設計的重要意義,比如在以太坊上使用 Zcash 代幣。

這些新鮮事物以及推動這些事物發生的思想和人讓我們相信:雖然道路漫長,但是未來可期。

本文關鍵詞:Rollup、Validity Proof、BLS 簽名、以太坊和 Zcash 互操作、account abstraction、CREATE2 指令;Staking、DeFi、ENS;以太坊新治理流程、集市開發模式、二次方融資。

硬核技術 6 條

千字讀懂 Rollupp0n1,安比實驗室研究員,關注零知識證明和智慧合約安全

Rollup 是一大類 Layer-2 擴容方案的統稱,特指先在鏈下進行復雜的計算和狀態維護,再將與狀態更改相關的資料透過合約呼叫的方式,利用更便宜的 CALLDATA 在鏈上儲存。任何人都能根據鏈上儲存的資料復原出全域性的狀態,從而消除因資料可用性問題帶來的安全風險。Rollup 將大量交易捲起 / 彙總成為一個交易,在保證資料可用性的前提下提高 TPS。

那麼如何保證狀態更改的正確性?ZK Rollup 和 Optimistic Rollup 是目前較熱的兩種不同方案,它們的核心區別如下:

ZK Rollup 方案的關鍵在於 ZK,它的每一次的狀態轉變都需要提供零知識證明,並由主鏈上的合約進行驗證,只有驗證透過才能更改狀態。即,ZK Rollup 的狀態轉變嚴格依賴於密碼學證明。

Optimistic Rollup 方案中,每次狀態轉變無需嚴格驗證,它是先樂觀地假設每次轉變都是正確的(這就是 Optimistic 一詞的由來),然後在一定時限內可以對某次轉變進行挑戰,如果挑戰成功就證明之前的提交有問題,會懲罰提交者並將狀態回滾。即,Optimistic Rollup 的狀態轉變依賴於經濟激勵和博弈。

兩種方案的差別還可以從證明模型角度來看:前者為 Validity Proof(有效性證明),只有提供了「有效性證明」的狀態才會被寫入主鏈合約;後者為 Fraud Proof (錯誤性證明),使用者需要在挑戰期內對異常提供「錯誤性證明」,舉報不正確的狀態。

在安全性上,ZK Rollup 更具優勢。因為 Optimistic Rollup 或基於 Fraud Proof 的二層擴容協議必須在挑戰期內投訴舉報,因此可以構造一個場景讓礦工配合做惡,在挑戰期內拒絕掉所有提交 Fraud Proof 的投訴交易,導致不正確的狀態轉變會被確認,攻擊者可從合約中盜取資金。但這種攻擊方式對 ZK Rollup 無效,因為它的合約中始終有正確性校驗。

在 TPS 上,ZK Rollup 利用 zk-SNARK 技術在保障資料正確性的同時壓縮了鏈上計算量。所有交易的計算過程不用在合約中執行, Operator (運營者)只需把儲存賬戶狀態的 Merkle Tree 的 Merkle Root、交易資料和 zk-SNARK 證明提交至合約,合約驗證透過後將新的狀態寫入。

因為 zk-SNARK 證明大小(很小)與驗證時間(很快)是常數,不會隨交易數量增長,因此 ZK Rollup 可以極大地提高交易 TPS。ZK Rollup 的鏈上效能限制僅取決於 CALLDATA 儲存資料的成本,隨著以太坊伊斯坦布林升級的完成,CALLDATA 使用成本降為原來的 1/4,ZK Rollup 的效能則獲得 4 倍提升,TPS 可達到近 2000。

目前已有多個團隊基於 ZK Rollup 方案開發,比如 Matter Labs 釋出的無需信任的擴容和隱私方案 ZK Sync。ZK Sync 底層依賴於 ZK Rollup,產品路線為先專注提高簡單轉賬的效能和易用性,再實現通用智慧合約的擴容,最後再加上隱私保護,其目標是在確保安全性的前提下提升交易效能。

Validity Proof:設計 Layer-2 的一種新思路阿劍,「以太坊愛好者」內容負責人

名為 Rollup 的 Layer-2 可擴充套件性方案風頭正勁,但其實,是不是 Rollup 可能不算重點,Layer-2 方案使用的是 Validity Proof (有效性證明)還是 Fraud Proof (錯誤性證明)才是重點。

此前的 Layer-2 方案,如狀態通道和 Plasma,在使用者取款時,也即在鏈下狀態上鍊完成清算的過程中,是無法防止運營者或使用者提交非最新狀態的,因此這些方案都有「挑戰期」,即在狀態上鍊後的一段時間內允許他人提交更新的狀態,或者證明上鍊狀態是無效的。我們稱這種模式為「錯誤性證明」。

然而,一種新的思路認為,為什麼不僅在某人能證明自己提交的狀態轉換是有效的時候才接收 TA 提交的狀態更新呢?換言之,這種模式要求鏈下計算的運營者證明某些計算已然發生,並由智慧合約負責驗證,當且僅當新狀態值被證明是經合法運算而成時才接受該值並更新狀態。我們稱這種這種模式為「有效性證明」,它只需保證證據足夠小、驗證所需計算量足夠低便可。

以 ZK Rollup 為代表的方案,與其它 Rollup 方案以及更早的 Layer-2 方案的區別,就在於證明狀態轉換有效性的思路上。相比錯誤性證明,有效性證明在不少方面都有巨大優勢,其最大的好處在於免去了長時間的挑戰期,提高了資金運轉效率和使用者體驗。

BLS 簽名之於以太坊謝翔,PlatON 演算法科學家

目前,以太坊 2.0 已經全面轉化為採用 BLS (Boneh-Lynn-Shacham)簽名作為其核心簽名演算法。

BLS 簽名的設計初衷是在低頻寬的通訊環境下,尋找一種具有較短簽名長度的數字簽名方案,以代替傳統的 RSA 簽名(1024bit 的簽名長度)和 ECDSA 簽名(320bit 的簽名長度)。BLS 簽名僅需 160bit 的簽名長度,且安全性與 ECDSA 相當。

在區塊鏈場景裡,我們總是希望儘可能地降低通訊量,BLS 簽名不但單個簽名長度更短,其工作方式也有助於達成這一目標。例如降低通訊量的一個方法是使用聚合簽名代替多重簽名,但 ECDSA 無法做聚合簽名,Schnorr 雖滿足簽名可聚合,不過其本質是多個參與者對同一個訊息進行協同簽名,這種分散式的協作過程需要極大地增加通訊次數。

相比之下,BLS 簽名的聚合過程是非互動式的,即任意節點可以將接收到的多個 BLS 簽名訊息對直接在本地進行聚合,並且支援對不同訊息的簽名聚合。下圖描述了 BLS 簽名聚合的過程:

這些優點使得 BLS 簽名非常適用於以太坊(包括以太坊 2.0)中的各類鑑權設計。以太坊 2.0 中的 Beacon chain 包括質押合約、Layer-2 中的分片都採用了 BLS 來支援鏈間通訊。讓我們以組織驗證者進入委員會對提議的區塊投票為例,簡要地說明 BLS 簽名在其中的作用。在以太坊 2.0 中,驗證者將以數十萬甚至數百萬計,Beacon chain 會根據一定的隨機性將驗證者分配到委員會中,委員會對被提議的區塊進行投票。每個委員會的投票將經由 BLS 聚合演算法形成一個簽名,這樣一來,驗證整個委員會的所有投票的工作會極為高效。

除此之外,Beacon chain 節點負責管理驗證者和他們的抵押權益、為每個分片提名出塊者、負責驗證者的獎勵和處罰、協助處理跨片交易……這些任務裡,所有與確權相關的動作都需要由驗證 BLS 簽名來完成。

以太坊和 Zcash 的「跨鏈」操作吳為龍,以太坊骨灰級玩家

EIP-152:增加在以太坊合約內驗證 Equihash PoW(Zcash 的 PoW) 的功能,開啟 Zcash 和以太坊之間中繼交易以及原子化互換交易的可能。

如果將 Zcash 和 ETH 當做兩個獨立的賬本,那麼以太坊合約內驗證 Equihash PoW 就是保證了 Zcash 可以驗證以太坊合約對 Zcash 賬本的改動,也就是說可以透過以太坊合約使用 Zcash 代幣。這樣一來,以太坊裡就可以有 Zcash 資產。

「資產」就是資料庫中的一行,區塊鏈是要簽名和驗籤才能進行資料庫改動的,在以太坊合約內驗證 Equihash PoW 就是加了個雜湊函式,解決驗證簽名的問題。

如此一來,就可以支援類似這樣的場景:A 透過執行以太坊上執行的一個合約,可以給 B 一個 Zcash 代幣,然後 Zcash 驗證簽名,透過之後把結果告訴以太坊上的合約,由合約接著執行接下來的動作。

不過,以太坊和 Zcash 兩者之間的這種「跨鏈」或互操作關係是從 Zcash 到以太坊單向的,雙向的話需要 Zcash 也增加對應的功能。

Account abstraction:為帳戶的功能加入可擴充套件性吳為龍,以太坊骨灰級玩家

以太坊有兩種帳戶型別,一種叫外部帳戶,也就是使用者帳戶,由金鑰控制,它的功能是固定的,只能做基礎的轉賬以及生成合約帳戶;另一種叫合約賬戶,是智慧合約程式碼編譯後部署在以太坊網路生成的,由於合約能夠自定義邏輯,所以合約賬戶的功能是可擴充套件的。

賬戶抽象化就是在以太坊網路實施一套 DID,互動可以由 DID 持有者直接處理,無論這個 DID 主體是外部賬戶還是合約賬戶。這給外部帳戶加入了可擴充套件性,讓它能夠與合約帳戶類似,使用更高的邏輯來操作,也能更通用的用一個「賬戶」的不同形態來表示外部賬戶和合約帳戶這兩種賬戶型別。賬戶抽象化後,外部賬戶可以管控其他外部賬戶,也可以分配和管控合約賬戶。這帶來的好處包括可以自定義交易的支付主體來生成賬號管理機制,實現資金使用的簽名管控功能;可以幫助 DAO 更好地去設計和實現;可以讓外部帳戶管控由某個合約賬戶來出燃料費,解決現有的即便擁有合約還是需要合約部署方來支付燃料費的不夠自動化的行為。

CREATE2 指令:大有用途的新的合約部署方式王淵命,Westar 實驗室首席架構師

EIP 1014:CREATE2 指令,新增一個新的 0xf5 操作碼指令 CREATE2 , 0xf5 指令的行為和 CREATE 相同,只不過它使用 keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))[12:] 而不是傳送者+nonce hash 來計算合約地址。

雖然 EIP 1014 的 CREATE2 是一個很小的改動,但它對二層的設計有很大的作用。

當前以太坊在合約部署時是沒辦法預測合約的地址的,因為合約地址由傳送方地址和合約部署時傳送方的 nonce 決定,但傳送方的 nonce 無法預測。我們知道,二層的交易有效是因為有一層的合約的約束,如果要求二層相關的仲裁合約在一層先部署好,就會增加成本。

CREATE2 提供了一種新的合約部署方式,合約地址由傳送方地址,salt,以及初始化程式碼決定。這樣一來,二層的系統就可以基於一個尚未上鍊的合約來寫程式碼——因為此時合約地址是已知的——必要時再部署合約,這就節約了成本,簡化了反事實狀態通道的設計方案。

使用者參與 3 條

如何參與以太坊 Staking?Rudy Lu,InfStones 中國區代表,Infpool 礦池合夥人

第一,我們需要了解以太坊 Staking 的不同之處 :

區別一:固定的抵押數量現在我們熟知的大部分專案的 Staking 對一個節點抵押代幣的數量並無限制,比如 EOS、TRON、Cosmos 等專案;或者透過抵押金率來作出一定限制,比如 Tezos、Wanchain 等專案。但 ETH 2.0 與這些委託抵押模式非常不同,它的每個節點都需要抵押也只能抵押 32 個 ETH,如果我有 320 個 ETH,就需要建立 10 個節點。

ETH 2.0 的這種 Staking 設計和它的分片鏈結構是相適應的,透過強制設定 32ETH 的固定抵押數量可以保證全網節點的數量比較多,也保證了不會有抵押數量巨大的頭部節點在某一條分片鏈上有較為壟斷的記賬控制權,ETH 2.0 挖礦的去中心化程度會因此得到一定的提升。

區別二:本金與收益不是一種幣 ,早期均無法交易除了 Ontology、Vechain 等雙幣結構設計的專案外,一般 Staking 挖礦都是「鎖什麼幣,賺什麼幣」,但是 ETH 2.0 鎖定的是 PoW 主鏈上的 ETH 代幣,發放的收益卻是信標鏈上的 BETH 代幣,它們在本質上是兩種幣。因為兩條鏈並不會很快地實現互通,ETH 與 BETH 在公開市場上的交易價格估計也不會完全一致。

在預期明年上線的階段 0,ETH 2.0 不會有交易功能,即便驗證人(節點)退出 Staking,本金、收益也無法從賬戶中轉出,因此早期參與的節點的所有本金、收益都是近乎於鎖死的狀態,只能等待 ETH 2.0 進一步開發,逐步實現賬戶交易功能。

區別三:早期不存在去中心化委託挖礦「委託」這項功能可以使代幣與代幣所承載的出塊權相分離,持幣者能夠將出塊權委託給信任的節點代為參與共識並贏得獎勵,這也是使得 Staking 廣為大眾所認識,並逐漸火熱的原因。但在 ETH2.0 的前兩個階段(階段 0、階段 1)均不存在去中心化委託挖礦,這意味著持幣者只能自己建立節點執行,或者將幣交給中心化的礦池代為挖礦,但代挖礦相當於把幣轉給別人託管,存在本金的安全風險。

第二,需要了解以太坊 Staking 的參與條件。

以太坊 Staking 的參與門檻不是很高,硬體上看,家用電腦的效能就可以執行一個節點。以太坊希望透過低門檻鼓勵更多的持幣者參與進來,達到儘可能去中心化的目的。

因為持幣者不是專業的節點運營商,一般來講無法保證節點 24 小時執行,因此在經濟模型的設計上,以太坊 Staking 對於節點離線的懲罰力度非常小,連續 3 天離線的懲罰在 1% 左右,但離線時間越長,懲罰力度會越大,21 天離線會懲罰 50%。

對於參與者來說,24 小時運營節點可以保證最大收益,同時也要做好節點版本升級、防止「雙花」、故障監測防災等工作,屆時會有節點運營商推出專業的節點運營服務。

瞭解了以上資訊之後,讓我們看看以太坊 Staking 的收益分析 。

ETH 2.0 的年增發率是隨全網質押率動態變化的,以目前公佈的規則看,年增發率與全網質押率的增長是 0.5 次方的關係。全網質押率越高,年增發率越高,單個節點的年化收益率越低。全網質押 10% 時,節點的年收益率為 5.72%。DeFi 在 2020楊民道,dForce 創始人

2020 年我們將會看到各個鏈之間的跨鏈和資產跨鏈實現比較大的突破,很多新資產類別進入以太坊的 DeFi 系統,比如 PoS 型別的 Staking 資產,實現 Staking 資產的借貸生息。

以太坊體系將會見證更多 Layer-2 的系統的部署,搭建在 Layer-2 上更容易規模化 DeFi 生態。

ENS 的玩法只被你我的想象力侷限老白,DApp 玩家,NFT 收藏品愛好者,從 ENS 競拍開始接觸以太坊

ENS(Ethereum Name Service)是建立在以太坊區塊鏈之上的分散式域名系統。如果以太坊是下一代去中心化網路的基礎平臺,那麼 ENS 將成為與當前 ICANN 一樣的域名序號產生器構,而 eth 將更替 com 成為 Web3 的核心構件。

ENS 有較大的想象空間,也有較大的實驗空間,簡單介紹一些現有的玩法:

1. 用 ENS 代替普通賬戶地址,可以減少因為輸入錯誤帶來的資金損失,因為當我們向 ENS 轉賬時,如果輸入有誤就無法有效解析出其指向的 ETH 地址,這阻止了進一步的操作。

2. 把 ENS 指向代理合約地址,可以透過向 ENS 域名轉賬實現閃兌。比如我們向 dai.now.eth 打入 ETH 就可以收到 dai,其原理是將 ENS 指向了 uniswap 的 eth/dai 兌換合約。也可以將代理合約的回退函式(fallback function),也就是合約接收到 ETH 後的預設功能函式設定為 uniswap 或 eth2dai 的兌換閘道器,從而實現兌換。

3. 如果你的瀏覽器安裝了 MetaMask,就可以直接訪問「.eth」域名,也就是用瀏覽器開啟以「.eth」結尾的網站或 DApp 前端地址,就像開啟網際網路的「.com」網站一樣。而這個網站或 DApp 前端是可以建立在 IPFS 之上,不依賴於單點的中心式的伺服器的。比如我們透過瀏覽器就可以訪問 https://almonit.eth,一個構建在 IPFS 上的 ENS 導航網站,而開發者要做的只是在自己的 ENS 管理介面中新增一條 RECORDS,指向網站對應的 IPFS 地址。

4. DApp 開發者可以註冊 ENS 的主域名,再根據使用者意願為使用者分配子域名,如果這是一個加密通訊類的應用,使用者之間就可以用子域名做為使用者名稱進行互動。

5. ENS 的 DApp 商戶應用是一個值得看好的場景。以星巴克為例,它可以透過 coupon.eth 註冊申請會員:starbuck.coupon.eth,然後生成自己的 ERC721 收藏品,每批收藏品有孫域名如:2019santa.starbuck.coupon.eth,並把該孫域名指向一個 NFT 合約。可以設定使用者傳送 0 ETH 至這個 ENS 地址就能夠領取一個收藏品或者參與抽獎,從而實現商戶紀念品的發行和投放。

社羣建設 3 條

以太坊的新治理流程阿劍,「以太坊愛好者」內容負責人

從今年 3 月份開始,以太坊社羣開始摸索新的治理流程。

以 Alexey Akhunov 為主的開發者提議在以太坊 1.x 的開發流程中,不再將 EIP 的參考實現和測試任務全部壓給客戶端團隊,而是引入獨立的工作組,由自由組合的工作組把感興趣的 EIP 實現出來並生成測試,然後提交給客戶端團隊。Alexey 自己便是這種模式的親力踐行者。

而後,有人提出可以成立「代表人」 制度,就是一個 EIP 必須有一個代表人,由該代表人負責社羣聯絡、與社羣溝通、迴應社羣的疑問等等工作。

再後來,有人提議應該讓硬分叉的時間常態化以提供可預測性,同時,硬分叉只接收已經完全準備好、沒有疑問的 EIP,但凡有疑問的 EIP 就推遲部署,不讓 EIP 的實現進度影響硬分叉的時間。類似於火車,到點就發車,沒上車的 EIP 就等下一趟。

我一直認為治理流程是治理的核心,上述多種對 EIP 流程的改進皆讓開發責任更加分明,Credit 的歸屬更加清晰,而且讓整個社羣有了更明確的預期。同時我也感嘆,實踐的發展似乎又一次跑在了知識發展的前面。

集市模式會引導以太坊 2.0 如何演化?雷神,區塊鏈世界觀察者

一個全新的系統在設計和實現初期一般都是由發起者主導,小範圍封閉式推進,以太坊 1.0 在起步階段亦是如此。因為一方面發起者對於自己的想法最瞭解,早期封閉式開發的效率可能更高,另一方面在沒有品牌認同和社羣文化沉澱的情況下,吸引志同道合的參與者加入協作的難度不小。

以太坊 2.0 在技術層面,某種程度上可以說是一個近乎全新的系統,但在品牌認同和社羣文化上則不是。以太坊創世後執行至今,社羣不斷演化,逐漸形成了具有較強生命力的自組織系統。有舊人不斷離開,但社羣的願景和文化不斷吸引著新鮮血液加入,壯大了整個生態的魯棒性。

因此,以太坊 2.0 有機會在起步階段就實踐更加激進的、開放的集市式設計與開發模式,並以此為基礎上儘可能地弱化權威個體對協議發展的影響,維持集市模式的特性。集市模式會如何促進以太坊 2.0 的演化和發展,集市模式能否比採取大教堂模式的公鏈專案更具競爭優勢和生命力?這是除了技術之外,我對以太坊 2.0 最感興趣的點。

Gitcoin Grants:對公共物品融資模式的探索Mako,v2eth.com 創辦者

Gitcoin Grants 是一個為以太坊開源專案週期性地提供資金的眾籌平臺,它採用二次方融資 CLR 機制(Capital-constrained Liberal Radicalism),該機制是Vitalik Buterin和《激進市場》作者之一的Glen Weyl 在《Liberal Radicalism: Formal Rules for a Society Neutral among Communities》論文中提出的。

可以說 Gitcoin Grants 是區塊鏈技術與激進市場二次方投票思想(二次方融資是對二次方投票的擴充套件)的一次非常好的的實踐,它探索的是如何以數學最佳的方式資助開源專案 / 公共物品,這是我對這個專案非常感興趣的原因。

二次方融資 CLR 機制包括眾籌和配捐兩個部分:

眾籌:個人對公共物品捐款,把每個人捐款金額的平方根加起來得到 A,再對 A 求平方得到 B,B 就是專案方應該獲得的資助總額。

配捐:專案方應得的金額,也就是 B,是大於每個捐款人捐出的金額的總和的,便由基金會或私人慈善家補足這個差額。在這種機制下,專案獲得的資金與一共有多少人支援關聯度變得更高,如果某個專案的捐款人越多,該專案方獲得的匹配資金就越多。事實上,在一個社會配置公共物品時會面臨兩個最基本的問題:搭便車問題和傾軋少數派利益的問題。

在「一人一票」方式下,一張選票對結果的影響微不足道,因此理性人不會去投票,這會造成搭便車現象,融資也是一樣的道理,本來想資助專案的人,認為自己的一塊錢不能幫助到專案方,就不會參與;但如果採用二次方融資的方式,一塊錢會被放大,理性人會有動力參與眾籌,從而減少搭便車現象。

在「一人一票」方式下,少數服從多數,系統不能反應多樣的產品對不同個體的重要性,進而會壓制少數派的利益,放在融資中,資助哪些專案是由多數投票決定的;如果採用二次方融資,個人可以選擇資助自己感興趣的專案,並間接影響該專案的配捐金額,這可以部分解決傾軋少數派利益的問題。

自 2019 年 1 月啟動以來,Gitcoin Grants 已幫助向開源社羣募集、分發了 82.7 萬美元的資助金額;在 2019 年的第三次配捐中,它為 68 個開源專案提供了 1982 筆捐款,價值 17 萬美元;在 2020 年,Gitcoin Grants 計劃至少每季度進行一次募資活動。

我建議以太坊的開源專案可以在 2020 年第一季度提交自己的專案(1 月 6 號至 1 月 21 號),參與 Gitcoin Grants 二次方融資。以太坊基金會和 Gitcoin Core 將會為社羣媒體專案和基礎設施建設專案提供 20 萬美元的配捐資金,而哪些專案可以獲得資金是由我們決定的,每個人只需要贊助 1 美元。

如何參與 Gitcoin Grants:1. 專案方:開發者透過申請加入到接受捐款的候選名單中,需提交專案的相關介紹和專案每個月需要的資金。2. 使用者:使用者給自己喜歡的專案贊助,可以選擇贊助的資金總額,以及資金分多少個週期分發給專案開發者。透過 Gitcoin Grants 捐助,平臺會收取 5%的費用。3. 以太坊基金會:以太坊基金會確定配捐金額。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;