溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

區(qū)塊鏈編程初學者入門知識點有哪些

發(fā)布時間:2022-01-15 14:35:28 來源:億速云 閱讀:137 作者:iii 欄目:互聯(lián)網科技

今天小編給大家分享一下區(qū)塊鏈編程初學者入門知識點有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

區(qū)塊鏈的目的

Roopa住在Delhi的一個偏遠地區(qū)。印度政府每個月都會分配她少量的食物資源。因為她屬于BPL(貧困線以下)類別。政府通過中介來分配這些食物資源。只有三分之一的食物資源可供人們使用,如Roopa,其余的則被中介出售以獲取利潤。

Sara寫小說,她在亞馬遜上發(fā)表。她很沮喪,因為亞馬遜將50%的銷售額作為傭金。這是不公平的,因為她一個人投入了寫作和營銷的努力。

區(qū)塊鏈編程初學者入門知識點有哪些

問題是中介渴望權力和金錢。他們的座右銘已成為“不惜任何代價獲利”,為了支持生產者和賦予窮人權力,我們需要中介采取道德行為。這幾乎是不可能實現(xiàn)的,但是如果我們可以用自治系統(tǒng)取代中介呢?

區(qū)塊鏈編程初學者入門知識點有哪些

由于計算機沒有偏見,因此既不需要金錢也不需要權力。這可能是Satoshi Namakato在2008年使用區(qū)塊鏈技術發(fā)明比特幣時的想法。

Blockchain是如何發(fā)明的?

區(qū)塊鏈編程初學者入門知識點有哪些

隨著時間的推移,貨幣逐漸發(fā)展,每次發(fā)展都降低了生產成本,使交易更加便利。金幣的生產成本很高。紙幣的發(fā)明解決了這個問題。但是,在計算機和互聯(lián)網的發(fā)明之后,人們找到了一種更方便,更快捷的交易方式。

為了安全地保持我們一生的收入并促進數(shù)字交易,我們需要一個中介(銀行)。這使銀行變得強大,他們可以對我們的提款/交易征收高額費用,出售我們的私人信息等。

區(qū)塊鏈編程初學者入門知識點有哪些

銀行對金錢的渴望導致了2008年的金融危機。銀行未能尊重客戶的隱私。他們薄弱的安全系統(tǒng)引發(fā)了數(shù)字欺詐。

貨幣的下一次演變必須解決以下問題。

  • 它不應存儲在中央實體。

  • 它需要高度安全。

  • 它應該確保隱私。

由于法定貨幣由政府控制,Satoshi別無選擇,只能發(fā)明一種新貨幣(比特幣)。他借助點對點網絡和密碼學解決了這些問題。

去中心化分享權力

區(qū)塊鏈編程初學者入門知識點有哪些

Torrent使用點對點技術來共享文件。torrent應用程序不會從中央服務器或單臺計算機下載文件,而是連接到其網絡中的人員,找出誰擁有該文件并從其計算機下載。

你可以從世界各地的不同計算機上獲取文件。如果網絡中的某個人離開,你的下載不會受到影響,因為還有其他人可以共享該文件。

Satoshi采用這種技術,因為它以去中心化分散的方式存儲錢。任何單一實體都無法控制它。

加密

區(qū)塊鏈編程初學者入門知識點有哪些

在密碼學中,人們可以對消息進行數(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)中加入了密碼術,以幫助人們從他們的錢包中授權比特幣交易。

隱私

區(qū)塊鏈編程初學者入門知識點有哪些

你通過生成錢包(公鑰/私鑰)注冊到比特幣。系統(tǒng)不會收集電子郵件ID,全名等信息。因此,除非你公布你的公鑰,否則你將是匿名的。

把它放在一起Satoshi使用加密技術和點對點網絡構建了一個共享分類賬。當有人向某人發(fā)送比特幣時,會以加密方式簽署一條消息并將其廣播給網絡中的所有人。他們更新了他們的分類賬,因此網絡中的每個人都知道誰擁有什么。

Blockchain

區(qū)塊鏈編程初學者入門知識點有哪些

每隔十分鐘,交易就會組合成一個塊并鏈接回以前的塊。這個過程產生一個連續(xù)的區(qū)塊鏈。挖掘是確認塊的過程,這涉及網絡中的計算機來解決數(shù)學問題。第一個解決問題的計算機/礦工獲得了憑空制造的比特幣獎勵。

區(qū)塊確認并添加到網絡后,將在整個網絡中進行復制。區(qū)塊鏈是在制作自主比特幣系統(tǒng)的過程中發(fā)明的,該系統(tǒng)在沒有人為干預的情況下確認了交易。如果你正在尋找區(qū)塊鏈的簡化說明,這里有一個故事。

以太坊和智能合約簡介

區(qū)塊鏈編程初學者入門知識點有哪些

早些時候我們談到用自治系統(tǒng)取代中介。這可以通過編程來完成。比特幣的系統(tǒng)很難讓人們對自治系統(tǒng)進行編碼。

因此,Vitalik Buterin建立了一種名為以太坊的新加密貨幣。它不僅是一個去中心化的加密貨幣,而且是一個可以以智能合約的形式托管代碼的計算機網絡。

區(qū)塊鏈編程初學者入門知識點有哪些

在智能合約中,我們可以編制條件。如果你想建立一個去中心化的書店。你編寫說明以幫助作者添加新書,在客戶進行交易后將下載鏈接發(fā)送到電子書等。

智能合約不僅存儲條件,還存儲數(shù)據。去中心化的書店的智能合約本身存儲書籍列表,購買等。

區(qū)塊鏈編程初學者入門知識點有哪些

但是,我們應該承認智能合約的局限性。有些系統(tǒng)需要人工支持,計算機無法處理。在現(xiàn)實世界中實施智能合約并不容易。一旦發(fā)布的智能合約不能改變,愚蠢的錯誤可能代價高昂。

在以太坊上編寫智能合約

區(qū)塊鏈編程初學者入門知識點有哪些

我們將建立一個簡單的智能合約,存儲和檢索學生的成績。我們將以合理的方式編寫合約。這是github repo。

pragma solidity ^0.4.18;
contract Grades{
}

第一行告訴編譯器我們正在使用哪種版本的solidity。然后我們定義合約等級。

區(qū)塊鏈編程初學者入門知識點有哪些

我們需要在合約中存儲兩項內容,學生姓名和成績。因此,我們將創(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è)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI