web1.0~3.0,很多年前,互聯(lián)網(wǎng)沒(méi)有那么發(fā)達(dá),剛出來(lái)的時(shí)候,僅僅只能在網(wǎng)上瀏覽觀看信息,這就是1.0,后來(lái)出現(xiàn)了很多的軟件,人們不僅可以瀏覽還可以發(fā)表自己的看法,手機(jī)app百花齊放,每個(gè)應(yīng)用都有自己的數(shù)據(jù)庫(kù),存儲(chǔ)數(shù)據(jù),這就是2.0,現(xiàn)如今出現(xiàn)了3.0,去中心化的思想擺脫了數(shù)據(jù)庫(kù),即可實(shí)現(xiàn)不用數(shù)據(jù)庫(kù)也可以使用的DAPP。
用戶創(chuàng)造內(nèi)容后不是成為大廠的內(nèi)容和數(shù)據(jù),而是自己擁有其所有權(quán),誰(shuí)想使用,必須要經(jīng)過(guò)授權(quán)或是付費(fèi)只用,也就是說(shuō)內(nèi)容的創(chuàng)造者也是內(nèi)容的擁有者。
web3.0生態(tài)包括:
去中心化身份,用戶界面,去中心化應(yīng)用,去中心化存儲(chǔ),去中心化通信計(jì)算,零信任。低信任交互協(xié)議(區(qū)塊鏈)
區(qū)塊鏈的透明溯源,穩(wěn)定幣和中央銀行數(shù)字貨幣,創(chuàng)造者經(jīng)濟(jì),鏈游。
什么是區(qū)塊鏈?
區(qū)塊鏈?zhǔn)且环N新型去中心化協(xié)議,能安全地存儲(chǔ)比特幣交易或其它數(shù)據(jù),信息不可偽造和篡改,可以自動(dòng)執(zhí)行智能合約,無(wú)需任何中心化機(jī)構(gòu)的審核。 交易既可以是比特幣這樣的數(shù)字貨幣,也可以是債權(quán)、股權(quán)、版權(quán)等數(shù)字資產(chǎn),區(qū)塊鏈技術(shù)解決了拜占庭將軍問(wèn)題,大大降低了現(xiàn)實(shí)經(jīng)濟(jì)的信任成本與會(huì)計(jì)成本,重新定義了互聯(lián)網(wǎng)時(shí)代的產(chǎn)權(quán)制度。
區(qū)塊鏈(Blockchain)是由節(jié)點(diǎn)參與的分布式數(shù)據(jù)庫(kù)系統(tǒng), 它的特點(diǎn)是不可更改,不可偽造,也可以將其理解為賬簿系統(tǒng)(ledger)。它是比特幣的一個(gè)重要概念,完整比特幣區(qū)塊鏈的副本,記錄了其代幣(token)的每一筆交易。通過(guò)這些信息,我們可以找到每一個(gè)地址,在歷史上任何一點(diǎn)所擁有的價(jià)值。
區(qū)塊鏈?zhǔn)怯梢淮褂妹艽a學(xué)方法產(chǎn)生的數(shù)據(jù)塊組成的,每一個(gè)區(qū)塊都包含了上一個(gè)區(qū)塊的哈希值(hash),從創(chuàng)始區(qū)塊(genesis block)開(kāi)始連接到當(dāng)前區(qū)塊,形成塊鏈。每一個(gè)區(qū)塊都確保按照時(shí)間順序在上一個(gè)區(qū)塊之后產(chǎn)生,否則前一個(gè)區(qū)塊的哈希值是未知的。 這些特征使得比特幣的雙花(double-spending)非常困難。區(qū)塊鏈?zhǔn)潜忍貛诺暮诵膭?chuàng)新。
區(qū)塊鏈概念的出現(xiàn),首先是在中本聰?shù)谋忍貛虐灼?shū)[2]中提到的,但是以工作量證明鏈(proof-of-work chain)的形式而存在,以下是中本聰對(duì)區(qū)塊鏈概念的描述:
時(shí)間戳服務(wù)器通過(guò)對(duì)以區(qū)塊(block)形式存在的一組數(shù)據(jù),實(shí)施隨機(jī)散列而加上時(shí)間戳,并將該隨機(jī)散列進(jìn)行廣播,就像在新聞或世界性新聞組網(wǎng)絡(luò)(Usenet)的發(fā)帖一樣 。 顯然,該時(shí)間戳能夠證實(shí)特定數(shù)據(jù)必然于某特定時(shí)間是的確存在的,因?yàn)橹挥性谠摃r(shí)刻存在了才能獲取相應(yīng)的隨機(jī)散列值。 每個(gè)時(shí)間戳應(yīng)當(dāng)將前一個(gè)時(shí)間戳納入其隨機(jī)散列值中,每一個(gè)隨后的時(shí)間戳都對(duì)之前的一個(gè)時(shí)間戳進(jìn)行增強(qiáng)(reinforcing),這樣就形成了一條鏈(Chain)。
區(qū)塊鏈應(yīng)用:眾籌行為,公證書(shū),供應(yīng)鏈,股權(quán)證等。我們所寫(xiě)的驅(qū)動(dòng)區(qū)塊鏈的程序就是DAPP。區(qū)塊鏈就像是database,所有的操作都將被記錄在區(qū)塊鏈上,不可刪除。
以太坊
以太坊是一個(gè)開(kāi)源的有智能合約功能的公共區(qū)塊鏈平臺(tái),通過(guò)其專業(yè)加密貨幣以太幣Ether,簡(jiǎn)稱ETH,提供去中心化的一臺(tái)虛擬機(jī)來(lái)處理點(diǎn)對(duì)點(diǎn)合約。我們可以利用以太坊平臺(tái)來(lái)部署我們自己的智能合約,但是每一次的交易被記錄下來(lái)都需要算法,需要花一定的費(fèi)用支付給礦工,簡(jiǎn)單理解就是每次的交易都會(huì)生成一道算法題,然后能夠解決的礦工會(huì)收取一定的費(fèi)用或者小費(fèi),同時(shí)交易記錄會(huì)被記錄在區(qū)塊鏈上。
哈希算法
將任意長(zhǎng)度的二進(jìn)制值串映射為固定長(zhǎng)度的二進(jìn)制值串,這個(gè)映射的的規(guī)則就是哈希算法,而通過(guò)原始數(shù)據(jù)映射之后得到的二進(jìn)制值串就是哈希值。
構(gòu)成哈希算法的條件:
從哈希值不能反向推導(dǎo)出原始數(shù)據(jù)(所以哈希算法也叫單項(xiàng)哈希算法)
對(duì)輸入數(shù)據(jù)非常敏感,哪怕原始數(shù)據(jù)修改了一個(gè)Bit,最后得到的哈希值也大不相同
散列沖突的概率要很小,對(duì)于不同的原始數(shù)據(jù),哈希值相同的概率非常小
哈職算法的執(zhí)行效率要盡量高效,針對(duì)較長(zhǎng)的文本,也能快速的計(jì)算出哈希值
智能合約
solidity應(yīng)該屬于后端語(yǔ)言,是一種智能合約高級(jí)語(yǔ)言,運(yùn)行在Ethereum虛擬機(jī)(EVM)上,借鑒了很多語(yǔ)言,包括js,c++等,但是和傳統(tǒng)的后端語(yǔ)言java等web2.0的后端有很大區(qū)別,web3.0提出 去中心化,通俗來(lái)說(shuō),就是指不再有傳統(tǒng)后端那種,請(qǐng)求服務(wù)器,從數(shù)據(jù)庫(kù)存儲(chǔ)或者讀取數(shù)據(jù),而是在區(qū)塊鏈的基礎(chǔ)上記錄每一個(gè)發(fā)生的事件,不需要數(shù)據(jù)庫(kù)的存儲(chǔ)。
以太坊底層是基于賬戶,而非UTXO的,所以有一個(gè)特殊的Address的類型,用于定位用戶,定位合約,定位合約的代碼(合約本身也是一個(gè)賬戶)。
由于語(yǔ)言內(nèi)嵌框架是支持支付的,所以提供了一些關(guān)鍵字,如payable,可以在語(yǔ)言層面直接支持支付,而且超級(jí)簡(jiǎn)單。
存儲(chǔ)是使用網(wǎng)絡(luò)上的區(qū)塊鏈,數(shù)據(jù)的額每一個(gè)狀態(tài)都可以永久儲(chǔ)存,所以需要確定變量使用內(nèi)存,還是區(qū)塊鏈。
運(yùn)行環(huán)境是在去中心化的網(wǎng)絡(luò)上,會(huì)比較強(qiáng)調(diào)合約或函數(shù)執(zhí)行的調(diào)用方式。因?yàn)樵瓉?lái)一個(gè)簡(jiǎn)單的函數(shù)調(diào)用變?yōu)榱艘粋€(gè)網(wǎng)絡(luò)上的節(jié)點(diǎn)中的代碼執(zhí)行,分布式的感覺(jué)。
最后一個(gè)非常大的不同則是它的異常機(jī)制,一旦出現(xiàn)異常,所有的執(zhí)行都將會(huì)被撤回,這主要是為了保證合約執(zhí)行的原子性,以避免中間狀態(tài)出現(xiàn)的數(shù)據(jù)不一致。
paragma solidity ^0.4.0
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-448233.html
contract Helloworld{
? ? ? ? uint balance;
? ? ? ? fuunction update(uint amount) returns (address,uint){
? ? ? ? ? ? ? ? balance+=amount;
? ? ? ? ? ? ? ? return (msg.sender,balance)
????????}
}
Web3.js
智能合約寫(xiě)好以后,部署到以太坊,前端不需要發(fā)送請(qǐng)求,但是要和合約交互,那么就需要Web3.js庫(kù)
Web3.js是一個(gè)庫(kù),他有很多的函數(shù),使它可以在以太坊生態(tài)系統(tǒng)中通過(guò)HTTP或IPC與本地或者以太坊遠(yuǎn)程節(jié)點(diǎn)交互,如查看鏈上信息等。
各種高級(jí)語(yǔ)言編寫(xiě)的程序可以適應(yīng)web3 interface來(lái)與EVM交互,再次過(guò)程中使用時(shí)JSON-RPC(一個(gè)無(wú)狀態(tài)且輕量級(jí)的遠(yuǎn)程過(guò)程調(diào)用(RPC)傳送協(xié)議,其傳遞內(nèi)容透過(guò)JSON為主)
可以使用web3.js來(lái)讀取和寫(xiě)入以太坊區(qū)塊鏈,而不是使用ajax從web服務(wù)器讀取和寫(xiě)入數(shù)據(jù)。
const web3 = new Web3(
web3.givenProvider || "http://localhost:8584"
);
//獲取當(dāng)前節(jié)點(diǎn)下的賬號(hào)信息
const accounts = await web3.eth.requestAccount()//會(huì)返回當(dāng)前的賬號(hào)
console.log("accounts",accounts)
?DApp
DApp的部分或者全部邏輯是被存儲(chǔ)在去中心化的網(wǎng)絡(luò)中,而這個(gè)去中心化的網(wǎng)絡(luò)在區(qū)塊鏈的時(shí)間叫做公有鏈。前端加智能合約,構(gòu)成DApp
MetaMask
MetaMask是一個(gè)瀏覽器插件,可作為MetaMask Chrome擴(kuò)展或Firefox附加組件使用。它的核心是它作為以太坊錢(qián)包:通過(guò)安裝它,可以訪問(wèn)一個(gè)獨(dú)特的以太坊錢(qián)包地址,使用它開(kāi)始發(fā)送和接收以太幣或ERC20通證??梢越灰撞榭醋约旱囊蕴粠?。
但MetaMask不僅僅是以太坊錢(qián)包,作為瀏覽器擴(kuò)展,他可以與你正在瀏覽的當(dāng)前網(wǎng)頁(yè)進(jìn)行交互。它通過(guò)在訪問(wèn)的每個(gè)網(wǎng)頁(yè)注入一個(gè)名為web3.js的javascript庫(kù)來(lái)實(shí)現(xiàn),注入后,web3將通過(guò)window.web3的js代碼為訪問(wèn)的每個(gè)頁(yè)面提供一個(gè)對(duì)象。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-448233.html
?
到了這里,關(guān)于DAPP開(kāi)發(fā)(一)——web3.0和智能合約的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!