您好,登錄后才能下訂單哦!
今天小編給大家分享一下區塊鏈編程初學者入門知識點有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Roopa住在Delhi的一個偏遠地區。印度政府每個月都會分配她少量的食物資源。因為她屬于BPL(貧困線以下)類別。政府通過中介來分配這些食物資源。只有三分之一的食物資源可供人們使用,如Roopa,其余的則被中介出售以獲取利潤。
Sara寫小說,她在亞馬遜上發表。她很沮喪,因為亞馬遜將50%的銷售額作為傭金。這是不公平的,因為她一個人投入了寫作和營銷的努力。
問題是中介渴望權力和金錢。他們的座右銘已成為“不惜任何代價獲利”,為了支持生產者和賦予窮人權力,我們需要中介采取道德行為。這幾乎是不可能實現的,但是如果我們可以用自治系統取代中介呢?
由于計算機沒有偏見,因此既不需要金錢也不需要權力。這可能是Satoshi Namakato在2008年使用區塊鏈技術發明比特幣時的想法。
隨著時間的推移,貨幣逐漸發展,每次發展都降低了生產成本,使交易更加便利。金幣的生產成本很高。紙幣的發明解決了這個問題。但是,在計算機和互聯網的發明之后,人們找到了一種更方便,更快捷的交易方式。
為了安全地保持我們一生的收入并促進數字交易,我們需要一個中介(銀行)。這使銀行變得強大,他們可以對我們的提款/交易征收高額費用,出售我們的私人信息等。
銀行對金錢的渴望導致了2008年的金融危機。銀行未能尊重客戶的隱私。他們薄弱的安全系統引發了數字欺詐。
貨幣的下一次演變必須解決以下問題。
它不應存儲在中央實體。
它需要高度安全。
它應該確保隱私。
由于法定貨幣由政府控制,Satoshi別無選擇,只能發明一種新貨幣(比特幣)。他借助點對點網絡和密碼學解決了這些問題。
Torrent使用點對點技術來共享文件。torrent應用程序不會從中央服務器或單臺計算機下載文件,而是連接到其網絡中的人員,找出誰擁有該文件并從其計算機下載。
你可以從世界各地的不同計算機上獲取文件。如果網絡中的某個人離開,你的下載不會受到影響,因為還有其他人可以共享該文件。
Satoshi采用這種技術,因為它以去中心化分散的方式存儲錢。任何單一實體都無法控制它。
在密碼學中,人們可以對消息進行數字簽名。為了做到這一點,我們需要三個東西:公鑰,私鑰和消息。
公鑰和私鑰是一組數學連接的長字符。公鑰就像你的用戶名一樣公開,私鑰就像你的密碼一樣是秘密。
消息是你要授權的信息,例如:“我授權你向John支付100美元”。
如果你使用公鑰,私鑰和消息輸入算法。加密算法將產生簽名。這是該消息內容唯一的另一組字符。
Public Key -----BEGIN EC PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE50uE+YSxqDgMkFByhpcgTVqXCqHOh78Ljt1z0jklDff/WV7xo+U6o3REBtK/C0/LM+Ef3FB3wR9aXMGNMLb9EA== -----END EC PUBLIC KEY----- Private Key -----BEGIN EC PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgwqIsXl9FqsgrzMdxaxI6flBwWIev0Z7i+WF4j8BGnrKhRANCAATnS4T5hLGoOAyQUHKGlyBNWpcKoc6HrwuO3XPSOSUN9/9ZXvGj5TqjdEQG0r8LT8sz4R/cUHfBH1pcwY0wtv0Q -----END EC PRIVATE KEY----- Message Hello World Signature B0A9A4F641D3A2E3A65576B7311DCD62ABE78BBF4D3F5FE856598508E24FCB2E6F0277C2F8D57E9E2E108B7C493986E783F5316B8046597019951669B4EE6922
要驗證消息,必須輸入公鑰,消息和簽名。加密算法可以驗證消息是否由公鑰的所有者簽名。
破解加密算法需要1000年的時間。由于我們的計算限制,這不能更快地完成。未來的量子計算機可能會挑戰這一點。但是,可以升級比特幣系統以確保安全性。
Satoshi在他的系統中加入了密碼術,以幫助人們從他們的錢包中授權比特幣交易。
你通過生成錢包(公鑰/私鑰)注冊到比特幣。系統不會收集電子郵件ID,全名等信息。因此,除非你公布你的公鑰,否則你將是匿名的。
把它放在一起Satoshi使用加密技術和點對點網絡構建了一個共享分類賬。當有人向某人發送比特幣時,會以加密方式簽署一條消息并將其廣播給網絡中的所有人。他們更新了他們的分類賬,因此網絡中的每個人都知道誰擁有什么。
每隔十分鐘,交易就會組合成一個塊并鏈接回以前的塊。這個過程產生一個連續的區塊鏈。挖掘是確認塊的過程,這涉及網絡中的計算機來解決數學問題。第一個解決問題的計算機/礦工獲得了憑空制造的比特幣獎勵。
區塊確認并添加到網絡后,將在整個網絡中進行復制。區塊鏈是在制作自主比特幣系統的過程中發明的,該系統在沒有人為干預的情況下確認了交易。如果你正在尋找區塊鏈的簡化說明,這里有一個故事。
早些時候我們談到用自治系統取代中介。這可以通過編程來完成。比特幣的系統很難讓人們對自治系統進行編碼。
因此,Vitalik Buterin建立了一種名為以太坊的新加密貨幣。它不僅是一個去中心化的加密貨幣,而且是一個可以以智能合約的形式托管代碼的計算機網絡。
在智能合約中,我們可以編制條件。如果你想建立一個去中心化的書店。你編寫說明以幫助作者添加新書,在客戶進行交易后將下載鏈接發送到電子書等。
智能合約不僅存儲條件,還存儲數據。去中心化的書店的智能合約本身存儲書籍列表,購買等。
但是,我們應該承認智能合約的局限性。有些系統需要人工支持,計算機無法處理。在現實世界中實施智能合約并不容易。一旦發布的智能合約不能改變,愚蠢的錯誤可能代價高昂。
我們將建立一個簡單的智能合約,存儲和檢索學生的成績。我們將以合理的方式編寫合約。這是github repo。
pragma solidity ^0.4.18; contract Grades{ }
第一行告訴編譯器我們正在使用哪種版本的solidity。然后我們定義合約等級。
我們需要在合約中存儲兩項內容,學生姓名和成績。因此,我們將創建一個數組來存儲學生姓名和一個關聯數組來存儲他們的成績。
pragma solidity ^0.4.18; contract Grades{ mapping (bytes32 => string) public grades; bytes32[] public studentList; }
現在,我們將創建一種方式來發送合約,即學生姓名列表。我們將在構造函數中執行此操作。
pragma solidity ^0.4.18; contract Grades{ mapping (bytes32 => string) public grades; bytes32[] public studentList; function Grades(bytes32[] studentNames) public { studentList = studentNames; } }
在Solidity中,我們只調用一次構造函數。我們將學生名稱作為參數傳遞,該參數將存儲在我們之前聲明的studentList數組中。
現在,我們需要編寫一個函數來為學生分配他們的成績。我們還需要另一個功能來檢查學生是否有效。
pragma solidity ^0.4.18; contract Grades{ mapping (bytes32 => string) public grades; bytes32[] public studentList; function Grades(bytes32[] studentNames) public { studentList = studentNames; } function giveGradeToStudent(bytes32 student, string grade) public { require(validStudent(student)); grades[student] = grade; } function validStudent(bytes32 student) view public returns (bool) { for(uint i = 0; i < studentList.length; i++) { if (studentList[i] == student) { return true; } } return false; } }
giveGradeToStudent
函數有兩個參數,學生姓名和成績。require
函數檢查validStudent
函數是返回true還是false。如果返回false,則取消執行。
最后,我們需要編寫一個函數來獲取學生的成績。getGradeForStudent
函數將學生姓名作為參數,從關聯數組中返回相應的成績。
pragma solidity ^0.4.18; contract Grades{ mapping (bytes32 => string) public grades; bytes32[] public studentList; function Grades(bytes32[] studentNames) public { studentList = studentNames; } function giveGradeToStudent(bytes32 student, string grade) public { require(validStudent(student)); grades[student] = grade; } function validStudent(bytes32 student) view public returns (bool) { for(uint i = 0; i < studentList.length; i++) { if (studentList[i] == student) { return true; } } return false; } function getGradeForStudent(bytes32 student) view public returns (string) { require(validStudent(student)); return grades[student]; } }
為了本教程的目的,你可以將其部署在個人區塊鏈上。你可以用Ganache創建。以下是安裝和運行ganache的命令。
npm install ganache-cli web3@0.20.3 solc node_modules/.bin/ganache-cli
保持ganache運行,在新終端上我們將部署我們的智能合約。請將智能合約保存為Grades.sol
。
讓我們編譯代碼。
node code = fs.readFileSync('Grades.sol').toString() solc = require('solc') compiledCode = solc.compile(code)
現在讓我們部署智能合約。在區塊鏈上部署合約會花費你的gas,這是為了獎勵那些向你租用計算能力的人。所以我們必須指定你愿意分配的gas量。你可以使用gas計算器估算。但是,你現在無需付費,因為你正在使用個人區塊鏈進行部署,這是你正在使用的資源。在公共以太坊區塊鏈上部署合約時,你必須付費。
Web3 = require('web3') web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); abiDefinition = JSON.parse(compiledCode.contracts[':Grades'].interface) GradesContract = web3.eth.contract(abiDefinition) byteCode = compiledCode.contracts[':Grades'].bytecode deployedContract = GradesContract.new(['John','James'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
現在讓我們調用我們的函數給我們的學生John提供成績A +
。稍后,我們將使用getGradeForStudent
函數檢查它是否已更新。
deployedContract.giveGradeToStudent('John', 'A+', {from: web3.eth.accounts[0]}) deployedContract.getGradeForStudent.call('John') 'A+'
恭喜,你已經部署了智能合約。
以上就是“區塊鏈編程初學者入門知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。