1、比特幣的轉帳過程網絡
我在第五篇講UTXO的時候,有提到比特幣的轉帳過程,如今來回顧一下這個過程。區塊鏈
- Bob想要轉給Jack一百個比特幣,Bob須要先建立一筆交易,由於這筆交易只有被礦工驗證並打包進區塊的時候纔算完成交易,Bob在填寫交易信息的時候除了須要提供支付比特幣的數額以及雙方的地址外,還須要提供本身的公鑰以及用私鑰生成的數字簽名,還有就是上一筆交易的Hash(也就是Bob從哪裏獲得這些比特幣);信息填完後(其實在現實中沒這麼複雜,只須要在錢包中填寫轉入轉出地址以及交易金額便可,其餘的都是自動的)即可以點擊確認,當這筆交易廣播到全網中時,礦工開始對這筆交易進行驗證,第一步會去找到上一筆交易,確認支付方的比特幣來源;接着第二步算出支付方公鑰的指紋,確認與支付方的地址一致,從而保證公鑰屬實;而後第三步是使用公鑰去解開數字簽名,保證私鑰屬實。驗證經過後礦工便會將這筆交易打包進區塊中,若是獲得六次以上的確認,則能夠認爲這筆交易不會再被改變。
講這個過程就是爲了引出今天的知識點–智能合約。對象
2、比特幣與智能合約事件
在上面我有講到Bob須要提供的交易信息有一個是上一筆的交易Hash,咱們能夠來看一下區塊鏈中時如何記錄這筆交易的(這其實就是一個UTXO),以下圖所示:
能夠看出Bob轉給Jack的100個比特幣是從Alice那獲得的,圖中還能夠看到一個解鎖信息,這個解鎖信息時候用來證實這100個比特幣的歸屬,由於只有Bob的私鑰才能進行解鎖,其餘人進行解鎖是無效的。
到這裏咱們能夠將這個UTXO看作是一個簡單的智能合約,由於它是一個可自動執行而且自我驗證協議,Bob只要輸入本身的私鑰,解鎖腳本就會自動運行校驗,解鎖成功便說明Bob是這100個比特幣的擁有者,反之則說明不是。
由於比特幣所支持的腳本語言只跟交易有關,而且不是圖靈完備的語言,所能作的事頗有限,可是比特幣的出現極大地促進了智能合約的發展,如今支持編寫智能合約的平臺中最有名的當屬以太坊。內存
3、智能合約開發
上世紀90年代,密碼學家尼克薩博從自動販賣機獲得靈感首次提出「智能合約」的概念,看一下智能合約的定義:部署
- 智能合約是指一種計算機協議,這類協議一旦制定和部署成功就能實現自我執行(self-executing)和自我驗證(self-verifying),並且再也不須要人爲的干預。
智能合約會對接收到的信息進行迴應,它能夠接收和儲存價值,也能夠向外發送信息和價值。看一張圖:
從圖中能夠看出一段代碼(智能合約),被部署在分享的、複製的帳本上,它能夠維持本身的狀態,控制本身的資產和對接收到的外界信息或者資產進行迴應。
舉個例子,如今咱們對銀行帳戶內存款的操做都須要中心化的銀行進行受權,一旦離開了銀行的監管,用戶就連最基本的存取款操做都沒法進行,可是若是是使用智能合約來處理的話狀況就不同了,只要事先正確的經過嚴謹的邏輯寫好代碼,即可以不須要人工參與,一切都將按事先寫好的邏輯運行,而且結果是公平公正的,所以也有人宣稱「代碼即法律」,這個觀點保留意見,至少以目前的狀況來看事情沒那麼簡單。
智能合約的概念雖然很早就被提出來了,可是由於不少技術的不成熟,因此發展很緩慢,可是由於比特幣的出現或者說由於區塊鏈技術的出現,智能合約開始成爲研究人員與業內人士重點研究的對象,這都極大促進了智能合約的發展。it
4、智能合約的優缺點效率
參考《區塊鏈技術指南》簡單列出智能合約的優勢。比特幣
- 首先是高效的實時更新,由於智能合約的執行是去中心化的,也就是不須要認爲的干預,因此它的執行效率是很高的,你再也不須要親自去相關部門提交排隊提交申請資料,而後還須要等幾個工做日才能獲得結果,如今只須要在網上填好資料點擊提交,若是網絡通暢,幾分鐘內便能辦完手續,方便快捷。
- 第二即是較低的人爲干預風險,由於智能合約是一開始就制定好的,而且是沒法更改的,因此一旦出現毀約的狀況,那麼時間的責任人就會獲得相應的懲罰,這保證了公平公正性,也就是說在智能合約面前,人人平等,沒有誰有特權。
- 第三就是準確運行, 智能合約是一段執行在計算機上的代碼,因此只要運行的計算機沒錯縣錯誤,那麼這個合約的執行結果都是準確無誤的,不會出現不可預料的狀況,之因此能作到這一點也是得益於密碼學的發展和區塊鏈技術的發明。
- 第四是去中心化權威,在區塊鏈網絡中通常不存在一個絕對的權威來監督合約的執行,而是由絕大部分的用戶來判斷合約是否正常執行,這種絕大多數人監督的方式是由POW或POS等共識機制來實現的。
- 第五即是較低的運行成本,正由於智能合約具備去人爲干預的特色,其可以大大減小合約履行、裁決和強制執行所產生的人力成本。
關於智能合約的缺點,我講一下個人理解,由於智能合約的一段可執行的代碼,是代碼便不可避免的會存在bug,一旦出現bug或者不可預料的狀況,這對於採用智能合約的應用都是極大的挑戰(能夠參考The DAO事件),這是由於智能合約是去人工干預的。智能合約的優勢目前也是它的缺點,可是隨着技術的發展,它的這個缺點或許能夠被忽略。
5、以太坊與智能合約
說到智能合約就不能不講到以太坊,與比特幣相比,以太坊最大的不一樣點是它能夠支持更增強大的腳本語言(圖靈完備的腳本語言),容許開發者在上面開發任意應用,實現任意智能合約,這也是以太坊的最強大之處。做爲平臺,以太坊能夠類比於蘋果的應用商店,任何開發者均可以在上面開發應用,並出售給用戶。以太坊也是目前支持智能合約的區塊鏈平臺中比較成熟的平臺。