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