文章《5 分鐘掌握 Solidity 編程語言:以太坊智能合約的支柱》首次出現在 Coinpedia Fintech News 上

介紹:

您是否想過,區塊鏈行業的不斷髮展如何徹底改變了我們對數字資產的看法?如果沒有以太坊(一個用於去中心化應用程序 (dApp) 的全球開源平臺),這種發展是不可能實現的。它是其原生加密貨幣以太幣 (ETH) 的基石。

以太幣 (ETH) 是全球第二大加密貨幣,目前市值 4048.6 億美元,僅次於比特幣 (BTC)。它還因其權益證明驗證方法而聞名。任何尋求可擴展、可編程和去中心化安全平臺的人都可以使用以太坊。

以太坊的根本潛力在於其智能合約的主要語言:Solidity。讓我們深入瞭解 Solidity 的基礎知識。

Solidity 簡介:

什麼是 Solidity?

Solidity 是以太坊引入的用於創建智能合約的主要語言。它是一種高級、面向對象、靜態類型的語言,專爲智能合約而設計。Solidity 是一種相對較新的語言,由 Gavin Wood 於 2014 年提出,後來由 Christian Reitwiessner 和 Alex Beregszaszi 開發。儘管它是新語言,但它已成爲以太坊開發人員最喜歡的語言。

其主要特性包括:支持多重繼承以及 C3 線性化、複雜的用戶定義數據類型、庫甚至繼承,還引入了(ABI)應用程序二進制干擾,以確保類型安全幷包含自然語言規範。

爲什麼以太坊採用 Solidity?

Solidity 與 C++、JavaScript 和 Python 等語言有相似之處,並在連接到區塊鏈的以太坊節點上託管的以太坊虛擬機 (EVM) 上運行。它非常有用,能夠創建支持用戶定義庫和繼承的工業、有益和強大的應用程序。它確保在以太坊節點上無縫部署和執行合約。

以太坊虛擬機主要作爲智能合約的運行環境,通過國際公共節點網絡,確保不受信任代碼的安全性和實現。

Solidity 編譯 EVM 運行的以太坊字節碼,專注於防止拒絕服務攻擊,保證程序無法訪問彼此的狀態,同時也確認抑制任何推斷。

Solidity 語法和結構

基本語法

C++、JavaScript 和 Python 等語言影響了 Solidity。Solidity 使用類似 ECMAScript 的語法,但具有靜態類型。Solidity 使用的實現語言是 C++。它具有命令式範式,需要在每一步中隱式地編碼函數。

它包含典型的數據結構,例如映射、數組和其他數據類型,例如支持 oop 和自定義結構的整數、布爾值和地址。函數是該語言的基本塊,可以修改狀態變量並具有返回類型。

Solidity 合約的結構

我們以一個定義 pragma solidity version 的序言開始智能合約,它聲明瞭用於代碼的 solidity 編譯器的版本幷包含合約的名稱。其次,contract 關鍵字是代碼片段應如何開始陳述代碼所屬的合約。

合約可以被視爲類似於 OOP 中的類。每個合約都有以下狀態變量的聲明:具有返回類型和方法的函數、修飾符、事件、結構類型、枚舉和錯誤。

代碼的每個子部分都有其功能。狀態變量用於存儲合約的數據,函數用於定義行爲,事件用於合約與外部功能之間的通信,修飾符用於施加規則。

使用 Solidity 編寫簡單的智能合約

設置開發環境

Solidity智能合約可以在離線和在線模式下實現

  • 離線模式:要離線運行 solidity,您的系統上必須有 Node.js、truffle global 和 ganache-cli。然後,您可以實現智能合約、創建 truffle 項目並使用 truffle 控制檯進行交互

  • 在線模式:使用Remix IDE編譯並運行智能合約,具體步驟如下:

  1. 從 Remix IDE 開始,設置環境,並創建一個新文件

  2. 創建智能合約代碼並編譯

  3. 部署並運行代碼

  4. 調試和方法調用

 簡單 Solidity 合約示例

//Pragma solidity>=0.4.22///合約標題///authorcontract Storage{  uint256 private data;     Function set(uint256 _data) public{      data=_data;  }  Function get() public view returns(uint256){       Return data;  }}

讓我們來實際操作一下 Solidity 合約的一個簡單的示例:

片段:

上面的代碼片段允許用戶存儲單個無符號整數。在這裏,set 函數存儲數據,get 函數檢索數據。您可以嘗試這些簡短而簡單的例子來開始您在這個領域的旅程。

Solidity 的高級功能

繼承和庫

除了清晰的合約編寫方式外,Solidity 的顯著特點是繼承。繼承是指在 OOPS 中使用類或繼承類的屬性。同樣,它允許用戶在另一個合約中繼承一個合約的屬性和方法。這使得代碼更具可讀性,使編寫更簡潔,並提高了代碼的可重用性。Solidity 中的庫是一個福音,因爲它們可以幫助您組織代碼的表示方式,允許進行適當的修改以對其進行模塊化。

安全最佳實踐

編寫智能合約時,安全性至關重要。有一些常見的漏洞,如重入攻擊和整數溢出。重入攻擊是指當函數在更新自身狀態之前進行外部調用時,您的代碼容易受到攻擊。因此,它允許外部合約元素重新進入該函數並通過重複這些操作來干預提款等操作。

另一個漏洞是衆所周知的麻煩製造者整數溢出,當運算結果超出指定數據類型可以包含的最大限制時,就會發生這種情況。因此,爲了克服這些問題,最佳做法是使用 SafeMath 庫,進行徹底的審計,並實施檢查-效果-交互模式。

確保安全的最新有效做法是合同的簡單設計和模糊測試,這聽起來有點不合常規,但隨機數據測試有助於發現隱藏的問題。此外,一個戰略舉措是制定大型賞金計劃,讓安全社區參與貢獻和修復漏洞並提供鉅額賞金。

開發和部署 Solidity 合約

開發工作流程

以下是工作流程:

  1. 想法概念化:開發人員應該爲合同設計一個明確的目的。

  2. 編寫合同:使用 Remix IDE、Truffle 或 Hardhat 等 IDE 編寫乾淨、可讀的代碼。

  3. 測試:在 IDE 上使用適當的測試框架

  4. 調試:調試代碼中是否存在任何問題,並檢查代碼是否按預期執行。

  5. 安全檢查:使用 MythX 等安全工具檢查是否存在漏洞。

  6. 部署:最後,部署合約並確保無縫集成

在以太坊網絡上部署

部署智能合約需要大量考慮代碼的準確性。因此,在與主網絡交互之前,我們首先在以太坊測試網絡上部署智能合約,例如 Robstan、Kovan 或 Rinkben。它們讓我們找到並解決代碼中的錯誤。較新的測試網絡是 Goerli,它於 2018 年推出,使用權威證明共識機制

 一旦您完成合約,您就可以將其部署到主網上。在主網上部署需要以太幣(ETH)支付 gas 費。因此,擁有準確無誤的代碼是必要的。Infura 和 Metamask 等平臺爲您提供 API 和錢包服務。因此,一旦您的合約部署完畢,它們將是不可變且公開的。

Brownie 是傳統 Truffle 和 hardhat IDE 的替代品,它提供了命令行界面和交互式控制檯,並且它使用 pytest,因此對於熟悉 Python 的開發人員來說,Brownie 無疑會加分!

Solidity 和以太坊智能合約的未來

Solidity 的演變

Solidity 已經取得了令人難以置信的發展。目前的重點是安全更新、效率和可重用性。這一發展背後的大型社區不斷增強並致力於使 Solidity 達到今天的水平。

許多國家的開發者生態系統也在不斷壯大。要成爲 Solidity 開發人員,您需要具備紮實的計算機編程基礎。

趨勢與創新

Solidity 的最新趨勢是智能合約開發,包括第 2 層解決方案、跨鏈互操作性和 AI 集成。這項創新徹底改變了區塊鏈行業和 dApp 的開發。

除了專注於增加程序分析和提高正確性之外,研究人員還致力於將 TAVS 電子投票協議等高級加密方案集成到 Solidity 中。爲了提高可用性並解決基於字節的分析問題,正在開發像 SolSEE 這樣的新工具。

結論

總而言之,Solidity 是以太坊和智能合約開發的支柱。它爲創建 dApp 提供了一個安全、可靠且構建良好的框架。隨着區塊鏈技術在行業中繼續大放異彩,作爲其先驅的 Solidity 仍然是增長的最強大貢獻者之一。所以,做好一切準備,進入去中心化未來的舞臺吧!

另請閱讀:密碼學 101:區塊鏈開發初學者指南