如何使用Python為區塊鏈編寫智慧合約-第一部分

買賣虛擬貨幣
在2019年,智慧合約無疑是計算機程式設計中的新正規化轉變。 本指南旨在成為建立在分散式區塊鏈中部署和執行的計算機程式的入門途徑。一段歷史…早在1950年代,在計算的早期,如果您想編寫一段程式碼來執行一個簡單的求和運算(考慮到Motorola 6502 8位CPU),您將最終 像這樣:18 A9 01 69 02 85 31 F6上面的十六進位制數字表示CPU可以理解以執行操作的機器語言。CPU有一個“指令集”,這意味著每個數字都是一個導致處理器執行操作的命令:加,減,除,乘,載入,儲存,跳轉等。程式設計師需要記住操作程式碼,從而記住哪個數字相當於哪個命令。效率不高。很快,很明顯,需要一種更人性化的方法。 這是建立高階語言的運動的開始,高階語言看起來更像口頭語言。
因此,首先出現了被稱為助記符的東西:CLCLDA #$01ADC #$02STA $31F6對於每個計算機操作程式碼,現在都有一個相關的單詞或符號有助於理解。因此,CLC(清除進位)等於18、LDA(負載累加器)為A9、ADC(加進位)為69、STA(儲存累加器)為85。
這種程式設計方法被稱為組合語言,它是簡化程式設計的第一步,使程式設計師擺脫了繁瑣的任務,例如記住數字程式碼。上面的程式清除進位,將值01載入到累加器中,將02加到累加器中,然後將結果數儲存在儲存器地址31F6中。 現在以一種更容易理解的方式供人類理解。隨著時間的流逝,新的工具被創造出來以提高程式設計效率,因此開發環境發生了很大的變化。 高階語言一詞出現了。這意味著程式語言的等級越高,它與人的口頭語言越相似。 同樣底層語言是更接近計算機指令集本身的語言。與計算機語言的這種發展同時,在此過程中發生了一些正規化轉換。首先將計算機程式直接注入到記憶體地址中,然後需要告知計算機程式將開始執行的位置。 這是原始的機器語言計算機程式碼,就像本文開頭顯示的那樣。
隨著助記符的出現,我們建立了所謂的彙編器-一款負責解碼人類可讀助記符,將其轉換為機器語言程式碼,將其注入正確的記憶體地址並告訴CPU啟動的軟體。儘管這對編寫和除錯軟體有很大幫助,但它仍然適得其反。 我們需要一種更簡單的程式設計方法。“ BASIC”語言初學者的通用符號指令程式碼(BASIC)是發明於1964年的第一款高階,人性化的計算機語言,其目標是易於使用。常見的BASIC程式如下所示:10 A = 1
20 B = 230 SUM = A + B40 PRINT(SUM)RUN在BASIC語言中,由序號(10,20,30,…)標識的每一行都儲存一個命令。 這些命令將依次執行,一次執行一次,然後下一次執行。當使用者在計算機螢幕上鍵入命令RUN時,程式將執行。 在這裡,我們有了第一個程式設計範例轉變。
有一種叫做直譯器的東西,它的功能是將程式碼的每一行實時轉換為機器語言的等效程式碼,然後執行它。另外,請注意,命令現在由一個英語單詞(例如print)表示。CPU暫存器(例如累加器)和儲存器地址被變數替換。 這樣程式設計變得容易得多!BASIC儘管是一種功能非常強大的高階語言,但執行起來太慢,因為直譯器需要將所有內容實時轉換為機器語言。這需要解決。編譯語言再次發生了正規化轉換,為我們帶來了當今我們所知的編譯語言。
編譯意味著我們現在在執行計算機程式碼方面又邁出了一步。編譯器是一款軟體,可以將高階語言編寫的程式轉換為完全機器語言,但不能實時轉換(例如BASIC)。相反,使用者必須等待該過程完成。最後,當程式被轉換(編譯)並可以執行時,使用者要求啟動可執行檔案。區別在於它的執行速度比舊的解釋程式要快得多-生產率更高且節省時間。另一個潛在的好處是可執行檔案無需原始碼即可共享,從而避免了版權問題。這是一個新時代的曙光,許多編譯語言在生態系統中蓬勃發展。一些示例:Ada,ALGOL,SMALL,Visual Basic,PureBasic,C,C ++,Objective-C,Swift,D,C#(to bytecode),Java(to bytecode),CLEO,COBOL,Cobra,Crystal,eC,Eiffel, Sather,Ubercode,Erlang(to bytecode),F#(to bytecode),Factor(更高版本),Forth,Fortran,Go,Haskell,Haxe(to bytecode或C ++),JOVIAL,Julia,LabVIEW,G,Lisp,Common Lisp ,Lush,Mercury,ML,Alice,OCaml,Nim(針對C,C ++或Objective-C),Open-URQ,Pascal,Object Pascal,Delphi,Modula-2,Modula-3,Oberon,PL / I,RPG ,Rust,Seed7,SPITBOL,Visual Foxpro,Visual Prolog,W,Zig以及許多其他許多…軟體繼續發展。 並且,正如1960年代初期一些電腦科學家(即艾倫·凱和伊萬·薩瑟蘭德)所建議的那樣,實施了一種新的系統開發方法,以便計算機程式可以更好地代表我們的現實世界。
物件導向程式設計(OOP)誕生了。另一個正規化轉移。現在,我們有了類和方法的概念:class Math(){   method sum(op1, op2)   {
      return op1+op2;   }   method subtract(op1, op2)   {      return op1-op2;   }
   method multiply(op1, op2)   {      return op1 * op2;   }}Main: 
Math myMath = new Math(); # Instantiates an object of class Math.Integer mySum = myMath.sum(1, 2); # Calls a method from Math class.System.out.println(mySum); # Outputs the result.儘管我們已經看到了所有這些新的,豐富的,不同的軟體交付方法以及如何設計體系結構,但還是有一樣:在將程式碼編譯成機器語言後,它取決於特定的CPU。換句話說,在IBM PC上建立的軟體將無法在Apple計算機上執行,因為每個人都有一個帶有不同指令集的不同處理器。互操作性
另一個正規化轉變為我們帶來了所謂的互操作語言,例如Java和.NET。這背後的想法很簡單:建立一箇中間(虛擬)指令集,並將程式的原始碼編譯為中間指令集。然後,在每個計算機家族中,您將擁有一個特定的編譯器/直譯器,從這些中間指令到每個計算機品牌的特定指令集。一種“兩步編譯器”形式,可以共享一組通用指令。這套中間指令集稱為位元組碼。位元組碼在JVM(Java虛擬機器)或CLR(公共語言執行時)上執行。這樣就可以一次編寫一個程式,然後在任何地方執行它(這是Sun Microsystems for Java建立的口號)。儘管在每個計算機都是孤立的世界中,計算機語言和軟體體系結構的這種演變是有意義的,但我們很快就開始透過網路連線裝置。網路協議的誕生是為了允許機器之間透過電子通訊通道進行通訊。
1989年,Tim Berners-Lee發明了全球資訊網。 現在該軟體需要透過網路分發,我們不知道連線了哪種型別的計算機。建立瞭解決該問題的新標準,並將客戶端-伺服器體系結構引入了程式語言。這種方法認為計算機軟體現在將駐留在伺服器上,該伺服器將根據某些請求將資訊傳遞給客戶端。這種新的正規化轉變完全改變了我們使用軟體和程式設計的方式。我們必須註冊線上託管服務才能釋出我們的軟體。然後,將該軟體每天24小時上傳到伺服器,以響應使用者的請求。上面的段落描述了Internet和客戶端伺服器軟體的最新時代。它完全改變了我們所知道的世界,並由此改變了我們生產,分發和使用計算機程式的方式。儘管好處是毋庸置疑的,但它仍然是基於集中化的環境,容易受到攻擊,檢查和失敗的影響。 該軟體取決於伺服器是否始終線上。即使透過使用計算機網路雲解決了效能和可伸縮性問題,它仍然存在中間人的問題–中間人。
中介通常會給您帶來障礙,並給通用共享解決方案的使用者帶來麻煩。 這可以是高額費用,執照,地區規則,政府審查制度的形式; 總會以某種方式傷害消費者。為了一個自由的世界,越分散越好。儘管區塊鏈本身的成本和可擴充套件性仍然遠遠低於其對應的區塊鏈,但通常在出現破壞性技術時,消費者獲得解決方案的成本會急劇下降。舉個例子,想想現在用比特幣給另一個國家的親戚匯款是多麼便宜和容易。新時代我們正處於一個新時代的開始–分散式區塊鏈時代。 有人可能將其稱為Internet 3.0。這是我們最近的模式轉變,隨著智慧合約的出現,為我們帶來了一種建立計算機軟體的新方式。
智慧合約是在分散環境中執行的程式。它們是破壞性技術,因為它們消除了某些現實世界過程中對中間人(中間人)的需求,從而使其更便宜,更易訪問且更高效。適用於被智慧合約取代的常見應用:保險,遺囑,定期付款時間表,醫療保健計劃,自動駕駛汽車經濟,遊戲,財產交換,資產代幣化,抵押,投票等。釋出智慧合約時,其副本將駐留在世界各地的每個區塊鏈伺服器上。而且正如程式設計師在引入物件導向的體系結構時曾經不得不改變他們建立軟體的方式一樣,我們現在必須再次適應這種新方法。您將無法在智慧合約中進行股票期權Black-Scholes公平價格計算,這不是要進行的事情。結論本文是該系列文章的第一部分,旨在透過一個完全線上的環境IDE,使用基於Python的語言來講解智慧合約程式設計的基礎知識,該IDE允許在區塊鏈中編輯,測試,除錯和執行智慧合約。
在本系列的第二部分中,我們將針對那些已經具有計算機程式設計經驗但有逐步的簡單示例的使用者,開始一種務實的方法。最後,您將能夠有能力對智慧合約進行編碼。

免責聲明:

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

推荐阅读

;