Solidity程式設計 概念

hickey發表於2022-03-01

今天先不講程式碼,我們學習一項學科的時候,總是有目的性的。今天先講下概念性的東西,不然就算學會了之後,也不知道用這個技術去做什麼,以及這個技術是不是會帶來風險(眾所周知,爬蟲爬的好,監獄進的早)

每個程式語言,都有他獨特的特點,學習PHP可以讓你快速開發web站,學習pyhon可以使用大量的庫去做爬蟲,大資料處理,學習go可以編寫高併發的應用不需要考慮鎖機制,以及由此帶來的各種問題。那麼我們為什麼要學習Solidity?

先從智慧合約說起吧,什麼是智慧合約?這個網上都有很詳細的描述了,我放個連結在這邊:
academy.binance.com/zh/articles/wh...

智慧合約的優勢

作為可程式設計程式碼,智慧合約具有高度的可定製化,可以透過多種不同方式進行設計,提供不同的服務和解決方案。

作為去中心化和自動執行的程式,智慧合約可以提高透明度並降低運營成本。根據不同的實施情況,他們還可以提高執行效率並減少商業運營費用。

智慧合約在兩方或多方間進行轉賬或資金交易時尤為實用。

換句話說,智慧合約可以針對各種應用案例進行設計。包括建立代幣化資產、投票系統、加密錢包、分散式交易所、遊戲和移動應用程式。它們還可以與其他區塊鏈解決方案一起部署,這些解決方案涉及醫療保健、慈善、供應鏈、政府管理和分散式融資(DeFi)等領域。

這裡插句題外話,我推薦一本書《結構化改革》,這本書中有個章節對區塊鏈技術的應用也做了比較詳細的說明。
ps:這是未來的大趨勢啊,兄弟們!趕緊學起來,不要被時代拋棄了。還沒意識到的話,去看看招聘市場也該發現了。大廠進軍元宇宙,都是棒槌當針用,缺心眼嗎?

為什麼是Solidity

首先一點是安全。智慧合約往往都跟真金白銀掛鉤,而且智慧合約是部署到區塊鏈上的,而區塊鏈是一個大家形成共識的環境,所以說智慧合約部署之後,程式碼雖然不能說絕對不能改,但是要改也是非常麻煩的事。這就要求智慧合約的程式碼要非常的嚴禁和安全。而我們熟悉的 Javacript 是弱型別語言,恰好不太能寫出安全的程式碼,這也就是為何給 Javascript 新增強型別之後的 Typescript 語言變得如此流行了。而 Solidity 直接就被設計為靜態型別和強型別的語言,保證對於一些常見錯誤,讓開發者能夠迅速透過編譯捕捉到,增強的語言的安全性。這裡要插一句,雖然 Java/C++ 這些大型語言也都有對安全性的非常好的最佳化,但是要把這些語言移植到在區塊鏈上,對系統造成的負荷也會很大,整個的移植工作量也是非常大的,所以 Solidity 的小巧和專用也是它的優勢。

第二點是對智慧合約特定業務的支援。智慧合約不一定是一個現實意義的合約,即使一個只列印 Hello World 的程式,只要部署到區塊鏈上,我們也叫它做一個智慧合約。但是話說回來,智慧合約的很常見的一種作用就是來實現合約,常見的程式語言對於這一點是沒有特殊支援的,而 Solidity 就專門對此作了最佳化,甚至專門新增了一種型別,就叫 contract 。除了對於合約的支援,以太坊之所以迅速火爆,跟它的能夠輕鬆發代幣的能力是分不開的,所以 Solidity 之下有專門的資料型別叫做 address ,可以用來在發代幣的時候設定鑄幣人地址。

所以說,Solidity 之所以能流行起來就是因為它的安全小巧,和專門的對智慧合約開發所做的最佳化。

Soldity執行過程

從圖片我們可以看出,整個的執行流程。我用文字再描述一遍。

xxx.sol檔案透過solidity編譯器編譯的時候,會生成一份介面宣告ABI(這個在remix編譯器中可以看到),為我們將做DApp開發的時候,呼叫只能合約的時候,做好介面準備。位元組碼檔案,將在下一步,透過部署,部署到乙太網中,可以部署到測試網或者主網。主要的作用是,要透過虛擬網路中的虛擬機器EVM去解析執行,完成智慧合約的工作任務。最後,透過web3.js的外部介面的js庫去訪問,獲得到我們所需要的智慧合約的使用,這就是基礎流程。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章