比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > Uniswap > Info

NER:Solidity 類特性_PART

Author:

Time:1900/1/1 0:00:00

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

本文討論Solidity的類特性,Solidity是以太坊區塊鏈的默認智能合約語言。

背景

在Datona實驗室的SoliditySmart-Data-Access-Contract模板的開發和測試過程中,我們探索了使用類的技術,就像在傳統的面向對象的編程語言中一樣。例如,我們希望能寫出類似這樣的代碼:

import"ContractOwner

...}

在這個例子中,ContractOwner和Partners是我們想要使用的類。

一個類將相關的代碼和數據封裝在一個實體中。

關于這個的實現將在下面的例子中進一步探討。

為什么在Solidity中使用類?

因為我們很習慣在OOP開發中使用類,并且想要繼續以這種方式來開發,因為它很好用。

對于為什么要用OOP編程,其可能的原因有很多。參考wiki中的面向對象編程。

在Solidity中使用類有什么好處?

我們發現,OOP是非常熟悉、自然的,通常可以減少錯誤率,便于獨立測試,并能重用。

在Solidity中使用類的缺點是什么?

主要的缺點是可能會使我們不去完全使用Solidity的編程范式。

還有人擔心,大量導入文件會成為維護的噩夢。

最后,Solidity合約通常非常簡單,而導入文件可能會增加不必要的復雜性、成本和文件管理。

盡管如此,我們認為值得探索各種可能性,即使只是為了拒絕它們。

Solana或將與Google Cloud達成合作,SOL短時漲超8%:11月5日消息,Google Cloud在其官方社交平臺與Solana聯創Anatoly Yakovenko互動,表示或有“大新聞”公布。

截止發稿,SOL現報價37.5美元,過去一小時漲幅達8.81%。[2022/11/6 12:21:15]

Solidity類特性

Solidity已經有很多與現代OOP語言非常不同的特性,如:合約、可支付賬號;執行的Gas消耗;永久存儲;全局執行等等。

然而,合約不是類,因為Solidity有函數調度程序和其他開銷,調用其他合約的函數是非常昂貴的。我在另一篇文章中有提到過“Solidity函數的Gas消耗”。

Solidity提供了哪些功能來實現將代碼和數據封裝在類里呢?

下面我們將開始探討:

1)導入文件2)合約繼承3)將庫附加到結構體

在所有這些功能中,數據和函數都可以使用類似類的點符號。例如:myClass

...}

1

...}

包含內部函數的庫將與合約的字節碼一起被打包。這些將在(3)中討論。

2)合約繼承

在Solidity中,有兩種方式可以有效地提供類特性,一種是_繼承基礎合約_。

被繼承的基礎合約是一個普通合約,包含數據和可以作用于這些數據的函數,但通常是不完整的,或者說只是完整合約的一個片段。恰當的文件命名習慣是很有用,可以清楚知道哪些合約是作為可繼承的基礎合約。

我們還可以把繼承當做對象組合來使用,這在下面的例子中會講到。

OpenSea:暫時取消在主頁顯示Solana上熱門NFT:10月16日消息,OpenSea發推稱,已暫時取消在主頁顯示Solana上熱門NFT,避免“刷排名”現象。OpenSea在探索一個長期的解決方案,在未來會公布更多信息。OpenSea還表示,該變化不會影響統計頁面上的Solana過濾器。[2022/10/16 14:29:22]

3)將庫附加到結構體

這是另一種有效提供類特性的方式,這種方式是創建一個結構體并附加一個庫,庫中的函數接受該結構體。這就是_將一個庫附加到一個類型_。

在希望使用該類的合約中,聲明了結構體的變量,并可提供結構體作為參數來調用庫函數。

Solidity提供了一個編譯器指令,以支持使用點符號調用庫函數,這就是usingfor(usinglibraryforstruct)。這個功能也可以用于擴展標準類型,例如,usingNumbersLibforuint。

看看下面的例子。

一些使用Solidity類特性的例子

我們用一個簡單的合約來演示類特性技術。

這個版本的合約,使用一個叫做ContractOwner的基礎合約和一個叫做Partners的組件類。

import"ContractOwner

functionaddPartner(addressaccount,stringmemoryinfo)publiconlyContractOwner{partners

functiontransferToPartner(addressaccount,uintamount)publiconlyOwner{require((amount>0)&&(amount<=total-allocated));partners

The Graph托管服務正在集成Solana:11月10日消息,The Graph表示,其托管服務正在集成Solana,集成將使用Firehose,從而實現更快的索引。The Graph將使開發人員更容易:查詢Solana區塊鏈、訪問歷史數據、可視化數據分析等。此外,The Graph將開始同步Solana子圖并開始支持Solana區塊鏈上的數據需求。[2021/11/10 6:43:39]

functiongetPartnerBalance(addressaccount)publicviewreturns(uint){returnpartners

functiongetPartnerInfo(addressaccount)publicviewreturns(stringmemory){returnpartners

}

注意,我們從不同的文件中導入了這些類。

ContractOwner是一個繼承的基類,PartnersFuns是一個函數庫,它附加在Partners結構體上,后面列出了這些文件。

沒有Solidity類特性的例子

對比上面的EasyShareLib版本的合約,下面的EasyShare版本沒有繼承基礎合約,也沒有附加庫到結構體。

contractEasyShare{//ContractOwneraddressprivatecontractOwner=msg

//PartnersstructPartner{addressaccount;stringinfo;uintbalance;}Partnerpartners;uintpublictotal;uintpublicallocated;constructor(uint_total)public{require(_total>0,"Suppliedtotalmustbe>0");total=_total;}functionfindPartner(addressaccount)internalviewreturns(intindex){uintlength=partners

FTX創始人:機構對Solana區塊鏈的興趣正在增加:9月11日消息,FTX交易所創始人Sam Bankman-Fried表示,作為以太坊的挑戰者,Solana正看到機構參與者對其產生更多興趣。SBF正在Solana網絡上開發衍生品交易所Serum。他表示,市場對NFT和去中心化金融的興趣,以及Pyth Network市場數據喂價的推出,都幫助推動了Solana的流行。“機構方面的興趣要大得多。”他補充說,Solana是擁有令人信服的長期路線圖的少數區塊鏈之一,最終將能夠支持加密貨幣的產業應用。(彭博社)[2021/9/11 23:18:17]

return-1;}functionaddPartner(addressaccount,stringmemoryinfo)publiconlyContractOwner{require(findPartner(account)<0,"Alreadyexists");partners

functiontransferToPartner(addressaccount,uintamount)publiconlyOwner{require((amount>0)&&(amount<=total-allocated));intindex=findPartner(account);require(index>=0,"Thispartnerisunknown");partners

functiongetPartnerBalance(addressaccount)publicviewreturns(uint){intindex=findPartner(account);require(index>=0,"Thispartnerisunknown");returnpartners

Coin98 Ventures成立基金以支持Solana區塊鏈開發:越南區塊鏈投資公司Coin98 Ventures已成立了500萬美元的基金,以在東南亞支持Solana區塊鏈的開發。在接下來的三年中,該基金將向涉足東南亞地區的早期創業公司提供高達10萬美元的資金。(Decrypt)[2021/1/27 13:36:32]

functiongetPartnerInfo(addressaccount)publicviewreturns(stringmemory){intindex=findPartner(account);require(index>=0,"Thispartnerisunknown");returnpartners

}

這個例子中沒有使用導入文件,總體上還比較簡潔,但沒有采用可重復使用的合約和庫。

導入文件

將ContractOwner

...}

Partners

structPartners{Partnera;}libraryPartnersFuns{functionfind(Partnersstoragepartners,addressaccount)internalviewreturns(intindex){uintlength=partners

return-1;}functionadd(Partnersstoragepartners,addressaccount,stringmemoryinfo)internal{require(find(partners,account)<0,"Alreadyadded");partners

functionincBalance(Partnersstoragepartners,addressaccount,uintamount)internal{intindex=find(partners,account);require(index>=0,"Thispartneraccountisunknown");partners

functiongetBalance(Partnersstoragepartners,addressaccount)internalviewreturns(uint){intindex=find(partners,account);require(index>=0,"Thispartneraccountisunknown");returnpartners

functiongetInfo(Partnersstoragepartners,addressaccount)publicviewreturns(stringmemory){intindex=find(partners,account);require(index>=0,"Thispartneraccountisunknown");returnpartners

}

測試

要確保兩個版本的EasyShare合約行為正確,方式相同。

Gas消耗量

我們測量了創建合約的Gas成本,然后添加10個賬戶,并向10個賬戶中的每個賬戶轉移一些股份,然后獲取10個賬戶中每個賬戶的余額和信息字符串。我們使用了我在另一篇文章——Solidity函數的Gas消耗中所分享的Gas消耗測量方法。

兩個合約的消耗基本相同,除了Create和GetInfo在EasyShareLib中比EasyShare高一點。

Create成本比較高,因為調用庫函數有更多的字節碼。

GetInfo的成本較高,因為它是一個返回字符串的函數。通過額外的函數來訪問庫,字符串被復制兩次。

GetInfo也比GetBalance高。這清楚地表明了使用字符串的代價,它是引用類型的變量,而不是值類型數據。

結論

使用Solidity的特性來導入包含繼承基礎合約的文件,并將庫附加到結構體,這提供了我們在本文開頭所期望的大部的類的特性。

我們推薦將它們應用于快速開發的實驗性合約。

對于生產合約,你可能希望考慮將導入的文件擴展到合約中。

本文作者:JulesGoddard是Datona實驗室的聯合創始人,旨在提供智能合約來保護你的數字信息不被濫用。

本翻譯由CellNetwork贊助支持。

來源:https://medium.com/coinmonks/class-features-provided-by-solidity-84ee97840666

參考資料

登鏈翻譯計劃:https://github.com/lbc-team/Pioneer

翻譯小組:https://learnblockchain.cn/people/412

Tiny熊:https://learnblockchain.cn/people/15

面向對象編程:https://en.wikipedia.org/wiki/Object-oriented_programming

Solidity函數的Gas消耗:https://learnblockchain.cn/article/2716

CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain

__

免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。

本文來源于非小號媒體平臺:

登鏈社區

現已在非小號資訊平臺發布105篇作品,

非小號開放平臺歡迎幣圈作者入駐

入駐指南:

/apply_guide/

本文網址:

/news/10365656.html

免責聲明:

1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險

2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場

上一篇:

每周編輯精選WeeklyEditors&#039;Picks

Tags:NERARTPARTPARDrops Ownership PowerSPARTAPARMA價格

Uniswap
ONE:加密基金管理公司One River Digital融資4100萬美元,高盛、Coinbase參投_Generative AI

據彭博社報道,加密貨幣基金管理公司OneRiverDigitalAssetManagement獲得4100萬美元A輪融資,高盛集團和CoinbaseGlobalInc參投.

1900/1/1 0:00:00
BTC:行情端大幅下跌,是否由牛入熊?| Foresight Ventures Weekly Brief_NFT

撰文:ForesightVentures 概要: 行情大跌,短期活躍度再次遭遇嚴重打擊。整體鎖倉量情況出現大幅度下降。NFT市場有所回暖,可關注前期強勢NFT.

1900/1/1 0:00:00
BIT:BitMart首發上線Hideous.Finance (HIDEOUS)_TMA

親愛的BitMart用戶:BitMart將于2021年9月27日首發上線代幣Hideous.Finance(HIDEOUS)。屆時將開通HIDEOUS/USDT交易對.

1900/1/1 0:00:00
VELO:解讀兩個利好信息:美聯儲會議決議和SEC監管_BEAM

前幾天由于不確定的消息和不確定的因素引得市場動蕩不安,而近兩天當消息差不多確定之后,行情也開始如愿反彈,市場情緒也逐漸穩定,今天我們主要討論兩個問題,昨晚的美聯儲會議和近期傳言甚廣的SEC監管.

1900/1/1 0:00:00
SEC:SEC主席Gary Gensler:加密貨幣是一種“高度投機性的資產類別”_H2O Securities

周二,美國證券交易委員會主席GaryGensler接受《華盛頓郵報》專欄作家DavidIgnatius的采訪,談到了加密貨幣領域、區塊鏈技術以及他對該領域進行監管的方法.

1900/1/1 0:00:00
HAI:關于WBF上線DCM的公告_paint幣的介紹

尊敬的用戶: 關于WBF在主板區上線DCM/USDT交易對,具體交易時間如下。充值時間:2021/09/2610:18提幣時間:2021/09/2610:18交易時間:2021/09/2610:.

1900/1/1 0:00:00
ads