不知道多少人和營長一樣,在結束一天的工作后,就想癱在沙發上玩玩游戲,一掃一天的疲憊。不過現在的游戲都越來越氪金了,就像玩家們常說的:不充錢你怎么能變強!!!
但要說氪金,很少有哪個游戲能比得上區塊鏈游戲,因為區塊鏈上的游戲都建立在一筆筆真實的加密貨幣交易之上。
就拿最火的去中心化游戲加密貓來說,其剛上線時一只加密貓能賣到上千元人民幣,最貴的一只竟賣到了125673個以太幣,在當時約合人民幣2.6億元。
當時最貴的一只加密貓
不禁讓人直呼:玩不起,玩不起。
玩不起又想玩怎么辦?
手把手開發一款區塊鏈游戲,不就OK了,何況又那么簡單,10分鐘就夠了
這是一款怎樣的DApp?
從現在開始,我們將構建一個類似于加密貓的簡單DApp,我們稱之為加密蛇
你可能會問為什么是蛇呢,但為什么不能是蛇呢?Python翻譯過來也是蛇呀。
在這個DApp中,你可以購買蛇和養殖蛇,應用頁面是這樣的:
加密蛇程序的頁面
其功能列表如下:
創造蛇–用戶能夠通過購買或讓兩條蛇交配來創造新的蛇。
查看蛇的詳細信息–用戶應該能夠查看自己擁有的蛇的詳細信息并進行顯示。
創建加密蛇,你至少需要用到以下工具
智能合約相關:
智能合約編程語言Solidity
開源智能合約開發環境Remix
用于調試和測試智能合約的Metamask
前端技術相關:
用于與本地以太坊節點進行通信的js庫Web3.js
構建用戶界面的漸進式框架Vue.js
用于創建vue項目的Vue-cli
前端框架Boostrap-vue
此外,你還需要使用Git來克隆一些代碼模板。
在進行編程之前,這里先假定你已經對以下的知識有了基本的了解。
了解智能合約及其編程語言Solidity。
了解使用MetaMask進行智能合約的調試和測試。
了解使用RemixIDE進行智能合約的編譯和部署。
當然了,如果你對這一些知識還有欠缺,也不用擔心,本文會詳細介紹每一個細節。
深入了解ERC-721標準
ERC-721是一個用來描述如何在以太坊區塊鏈上制造不可替代token的標準。滿足ERC-721標準的每個token或其他數字資產都是唯一的,這意味著它不等同于任何其他token。你可以把它們想象成一種特殊的,獨一無二的收藏品。
觀點:NFT出現了越來越多的使用場景,這將促進其繼續發展:5月29日消息,由Wikiexpo主辦,金色財經、Wikifx、Wikibit協辦的Wiki Finance Expo Singapore 2023活動中,多位嘉賓就“Web3領域NFT如何推動創作經濟發展”這一問題進行討論,嘉賓指出在Web3的世界中,NFT是對加密資產所有權的證明,加密資產可以包括藝術品、游戲道具、創作的內容。在2021年NFT大熱,出現了許多泡沫,但隨著從業者和參與者在這個領域的深耕,NFT漸漸產生了實際價值,例如與游戲結合的NFT道具可以進一步拓展游戲市場,并讓許多經濟不發達地區的人獲得收入。同時,NFT也可能作為一種獲得社區共識的標志,有相同喜好和追求的人通過NFT匯聚在一起,形成社區、凝聚共識。[2023/5/29 9:49:22]
ERC-721標準的接口
根據標準的官方文檔,ERC-721規定了智能合約用以管理、持有和交易唯一token必須實現的最小接口:
balanceOf-返回特定所有者_owner錢包中的token余額。
ownerOf-返回特定token所有者的錢包地址。
totalSupply-返回創建的token總數。
transfer-將_tokenId標記的token從發送者的錢包轉移到指定接收者的錢包。
takeOwnership-聲明給定ID的token的所有權。
approve-批準另一個地址來聲明給定ID的token所有權。
此外,它還定義了兩個事件:Transfer和Approval。當token從一個錢包轉移到另一個錢包時,會觸發轉移事件。另一方面,當一個賬戶批準另一個賬戶聲明他擁有的某個token的所有權時,會觸發批準事件。
OpenZeppelin的ERC-721token實現
OpenZeppelin是一款開源智能合約開發框架,它提供了可重復使用的智能合約模板,包括ERC-20和ERC-721等標準token的實現模板。在這里,我們將導入他們的ERC-721token實現,這樣我們就不必從頭開始編寫它,避免了重復造輪子。
創建智能合約
此DApp是基于以太坊平臺開發,所以需要使用Solidity語言發行token。
首先,在開源智能合約開發環境Remix中,創建一個名為ViperToken.sol的新文件并在其中添加以下代碼:
1//WewillbeusingSolidityversion0.5.32pragmasolidity0.5.3;3//ImportingOpenZeppelin'sERC-721Implementation4import"https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol";5//ImportingOpenZeppelin'sSafeMathImplementation6import"https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/math/SafeMath.sol";789contractViperTokenisERC721Full{10usingSafeMathforuint256;11//Thisstructwillbeusedtorepresentoneviper12structViper{13uint8genes;14uint256matronId;15uint256sireId;16}1718//Listofexistingvipers19Viperpublicvipers;2021//Eventthatwillbeemittedwheneveranewviperiscreated22eventBirth(23addressowner,24uint256viperId,25uint256matronId,26uint256sireId,27uint8genes28);2930//InitializinganERC-721Tokennamed'Vipers'withasymbol'VPR'31constructor()ERC721Full("Vipers","VPR")public{32}3334//Fallbackfunction35function()externalpayable{36}3738/**5354/**);75uint256newViperId=vipers.push(newViper).sub(1);76super._mint(viperOwner,newViperId);77emitBirth(78viperOwner,79newViperId,80newViper.matronId,81newViper.sireId,82newViper.genes83);84returnnewViperId;85}8687/**9495/**104105/**113114/**else{122uint256memoryresult=newuint256(viperCount);123uint256totalVipers=vipers.length;124uint256resultIndex=0;125uint256viperId=0;126while(viperId<totalVipers){127if(ownerOf(viperId)==msg.sender){128result=viperId;129resultIndex=resultIndex.add(1);130}131viperId=viperId.add(1);132}133returnresult;134}135}136}
Satoshi Action Fund創始人:比特幣是我們擁有的最強大的工具之一:金色財經報道,Satoshi Action Fund 創始人 Dennis Porter 在社交媒體上稱,比特幣是我們擁有的最強大的工具之一,可以克服世界上一些最困難的挑戰。我們正處在多個創新浪潮的風口浪尖上,這些創新將為我們不穩定的世界帶來增長和穩定。我們很幸運地見證了這一歷史的形成。[2023/4/23 14:21:51]
由GitHub托管的ViperToken.sol
在上面的代碼中,我們套用了OpenZeppelin的ERC-721token實現,并在其中添加了自定義函數。此外,還在代碼中導入了SafeMath庫以避免出現整數的上溢和下溢漏洞。
接下來,詳細介紹一下代碼的功能:
首先,函數generateViperGenes用來確定新出生蛇的基因,主要用在兩條蛇繁育新蛇時。我們選擇了一種非常簡單的實現方式,在這種情況下,我們使用1到6這幾個簡單的數字來確定新出生蛇的長相。當然了,你也可以修改代碼,創造出更多獨具特色的蛇。
然后,我們實現了一個createViper函數,這個函數用來創建一條新的蛇,并通過傳入函數的參數“viperOwner”指定該新創建蛇的所有者。
函數buyViper是一個可以接受以太幣付款的函數,函數中調用了我們之前定義的createViper函數。Payable這個標記是一個修飾符,用于指出此函數在執行時可以接收以太幣付款。相信你能從這行明擺著就是要錢的代碼中看出來:
1require(msg.value==0.02ether);
代碼中的require語句會檢查是否滿足給定的條件,并在不滿足條件時報錯。在Solidity語言中,msg.value語句用來存儲調用該函數的用戶發送的以太幣數量。
在上面的代碼中,我們要求用戶支付0.02個以太幣來購買一條隨機分配的蛇。在這里,你就是上帝,你可以隨意修改這個金額,如果你愿意的話,甚至還可以刪除這條語句,這樣每個用戶都可以訪問這個函數來免費得到一條蛇。
函數breedVipers在調用時代價更為昂貴,它需要用戶支付0.05個以太幣,不過這并不是為了蒙騙小白,因為該函數允許用戶根據兩條蛇父母的基因創建一條新的蛇,也就是說可以讓用戶得到一條高身價的蛇。
當然了,我們還需要定義一個能夠查看蛇詳細信息的函數。函數getViperDetails在被調用時會返回給定蛇的基因和父母ID之類的細節。
最后是一個ownVipers函數,該函數可以返回調用者擁有的蛇的ID列表。具體的實現是通過msg.sender這個語句,它用來標記調用函數的用戶的地址。
涉嫌20億美元欺詐案的加密交易所Thodex創始人已引渡至土耳其:金色財經報道,據土耳其國家電視臺TRT Haber,加密交易所Thodex創始人Faruk Fatih Ozer已從阿爾巴尼亞引渡至土耳其。
據悉,土耳其司法部于2021年宣布,它已獲得國際刑警組織的“紅色通緝令”,要求逮捕Ozer,因為他涉嫌參與該國有史以來規模最大的欺詐案,價值約20億美元(20億歐元),此前去年8月,Faruk Fatih ?ze在阿爾巴尼亞被捕。[2023/4/20 14:15:42]
現在,所有的函數都已定義完畢,接下來,我們需要編譯ViperToken智能合約,這里需要注意的是,請在Remix界面的右側選擇編譯器的版本,指定版本為0.5.3commit.10d17f24,因為我們使用的是0.5.3版本的Solidity語言,完成后我們就可以將智能合約部署到以太坊Ropsten測試網絡上了。
這里我們編譯并部署了ViperToken智能合約,由于操作步驟較多,你最好檢查一下每一步是否都已正確完成。
如果所有的步驟都沒有出錯,智能合約得到了正確的部署,你會看到如下頁面:
智能合約編譯成功的頁面
智能合約已被成功部署并加入到“已部署智能合約”中
構建Web應用程序
到這里,智能合約就可以正常運行了,但如果沒有一個與之交互的Web應用程序,那么運行起來就只能看到一些數字。為了讓這個DApp更有意思,接下來營長帶你制作一個簡單的Web應用程序。
配置開發環境
構建Web應用程序首先需要配置開發環境,在這里廢話不多說,讓我們直接切入正題。讓我們在終端中執行以下操作來克隆GitHub上的代碼模板:
1#CloningtheboilerplatefromGitHub2gitclone-bboilerplate--single-branchhttps://github.com/openberry-ac/cryptovipers.git3#Navigatingtothedirectoryandinstallingpackages4cdcryptovipers5npminstall6#InstallingWeb37npminstall-s1.0.0-beta.378#Toruntheapp9npmrundev
克隆GitHub上的代碼模板
這可能需要幾分鐘的執行時間,操作完成后,你的Web應用程序就運行起來了。
你可以在瀏覽器中訪問http://localhost:8080看到它,應用程序界面長這樣:
加密蛇的頁面
BendDAO借貸利率已超100%,用戶提取ETH致使流動性缺乏:金色財經報道,據推特用戶“shrimpwen”介紹,BendDAO借貸利率已超過100%,而DefiLlama數據顯示:這幾天BendDAO的ETH一直在凈流出,原因是BAYC因價格下跌致使大量被清算,用戶發現BendDAO機制有一定的問題,會讓存ETH的人損失,所以紛紛提出了存入的ETH,導致流動性缺乏。
其認為BendDAO的機制存在三個問題。1、選擇“藍籌”做借貸,但藍籌也可能大跌;2、錨定地板價清算,NFT地板價容易被擠壓;3、清算機制的不合理,這一點的理由在于:BendDao清算拍賣出價需大于地板價的 95%,不然就會流拍。如圖官方文檔,流拍后平臺期待“藍籌”價格遲早會回來。
那如果“藍籌”價格永遠回不來了呢?損失就會由把ETH存入BendDAO的人承擔。 這和AAVE等借貸完全不一樣,相信大家也是發現這點,這兩天才取出了許多ETH。[2022/8/22 12:39:05]
連接到智能合約實例
為了使我們的Web應用程序能夠與先前部署的智能合約進行交互,這里我們會用到與本地以太坊節點進行通信的js庫web3.js。在配置開發環境時我們已經安裝好了軟件包,現在我們要在“contracts”文件夾下名為web3.js的文件中加入如下代碼來調用它:
1importWeb3from'web3';23constgetWeb3=()=>newPromise((resolve)=>{4window.addEventListener('load',()=>{5letcurrentWeb3;67if(window.ethereum){8currentWeb3=newWeb3(window.ethereum);9try{10//Requestaccountaccessifneeded11window.ethereum.enable();12//Acccountsnowexposed13resolve(currentWeb3);14}catch(error){15//Userdeniedaccountaccess...16alert('Pleaseallowaccessfortheapptowork');17}18}elseif(window.web3){19window.web3=newWeb3(web3.currentProvider);20//Acccountsalwaysexposed21resolve(currentWeb3);22}else{23console.log('Non-Ethereumbrowserdetected.YoushouldconsidertryingMetaMask!');24}25});26});2728exportdefaultgetWeb3;
知情人士:美國穩定幣法案今年通過的可能性很小:金色財經消息,據知情人士透露,美國穩定幣監管法案今年通過的可能性很小。該法案由眾議院金融服務委員會主席、加州民主黨眾議員Maxine Waters和北卡羅萊納州共和黨議員Patrick McHenry共同發起,但因兩黨爭議,審議時間表一再推遲。消息人士稱,由于本周眾議院休會,以及11月選舉前后的不確定性,該法案的最終敲定“將是一場艱苦的拉鋸戰”,最好的情況是,該法案在8月公布,隨后在9月進入“討論”階段,委員會的政客們在此階段進行權衡,然后再將立法提交討論,因此消息人士認為,穩定幣法案在年底前通過的可能性不大。[2022/8/3 2:55:05]
由GitHub托管的web3.js
上面的代碼加載了MetaMask瀏覽器擴展初始化的web3實例,稍后我們將用它來和先前部署的智能合約進行交互。
在這個過程中你可能會遇到MetaMask的彈出窗口,它會要求獲取訪問權限。這是因為我們在代碼中加入了ethereum.enable,所以在Web應用程序請求訪問帳戶時窗口就會自動彈出,這時你只需要像下圖一樣點擊“Connect”按鈕即可:
MetaMask的彈出窗口
現在,我們需要讓這個Web應用程序連接到智能合約的ABI上。要獲取ABI我們需要返回到Remix的界面,轉到Compile選項卡,然后單擊Details按鈕旁邊的ABI按鈕,具體操作如下圖所示:
點擊ABI按鈕來復制智能合約的ABI
獲取了ABI后,在contract文件夾下打開名為abi.js的文件,然后將ABI粘貼為變量contractAbi的值,如下所示:
1constcontractAbi=//PASTEABICODEHERE23exportdefaultcontractAbi;
由GitHub托管的abi.js
文件中應該會有一個示例代碼,遇到問題時你可以隨時參考它。然后,我們還必須指定智能合約實例的地址,你需要回到Remix界面的Deploy選項卡,然后單擊已部署智能合約上的復制圖標,具體操作如下圖所示:
點擊“復制”按鈕復制智能合約實例地址
在src文件夾下找到的App.vue,打開并將你的智能合約地址粘貼到第86行,作為變量contractAddress的值:
1constcontractAddress='';//Righthere!2//Ex:constcontractAddress='0xf59c4c3c79071d3e11034a9344789bd3';
定義實現的方法
現在你可能會注意到用戶界面一切都正常,但點擊按鈕卻不起任何作用。這是因為我們還沒有定義Web應用程序的功能,接下來我們就開動。首先返回到App.vue文件中,轉到第116行,你可以在其中查到所有的方法,但所有方法的實現都只包含一個輸出方法名的console.log。
Web應用程序的第一個功能是購買蛇。讓我們用以下代碼修改buyViper方法:
1buyViper(){2this.isLoading=true;3this.contractInstance.methods.buyViper().send({4from:this.account,5value:web3.toWei(0.02,'ether'),6}).then((receipt)=>{7this.addViperFromReceipt(receipt);8this.isLoading=false;9}).catch((err)=>{10console.log(err,'err');11this.isLoading=false;12});13},
由GitHub托管的App.vue
還記得我們在智能合約中的規定么?購買一條蛇我們需要收取0.02個以太幣的費用,因此在代碼中我們需要同時發送我們的帳戶信息和0.02個以太幣來進行支付。然后我們就可以調用智能合約中的buyViper函數,該函數會返回新生成蛇的詳細信息,緊接著我們將這些細節保存在vipers數組中。
接下來,修改繁殖蛇的功能breedVipers:
1breedVipers(){2this.isLoading=true;3this.contractInstance.methods.breedVipers(this.matron,this.sire).send({4from:this.account,5value:web3.toWei(0.05,'ether'),6}).then((receipt)=>{7this.addViperFromReceipt(receipt);8this.isLoading=false;9}).catch((err)=>{10console.log(err,'err');11this.isLoading=false;12});13},
由GitHub托管的App.vue
在智能合約中,我們規定了用戶需要支付0.05個以太幣才能訪問繁殖蛇的函數,同時,在調用breedVipers函數時需要傳入兩個整數參數,matron和sire,所以在上面的代碼中我們將兩個整數參數傳遞給函數。這個函數在執行后會返回新出生蛇的詳細信息,我們需要將其保存到vipers數組中。
最后,定義檢索自己擁有蛇的詳細信息的方法,稱為getVipers:
1getVipers(){2this.isLoading=true;3this.contractInstance.methods.ownedVipers().call({4from:this.account,5}).then((receipt)=>{6for(leti=0;i<receipt.length;i=1){7this.contractInstance.methods.getViperDetails(receipt).call({8from:this.account,9}).then((viper)=>{10this.vipers.push({11id:viper,12genes:viper,13matron:viper,14sire:viper,15url:vipersMap],16});17}).catch((err)=>{18console.log(err,'err');19});20}21this.isLoading=false;22}).catch((err)=>{23console.log(err,'err');24this.isLoading=false;25});26},
由GitHub托管的App.vue
想要獲取你所擁有蛇的詳細信息,你可以采用以下兩種方法:ownedVipers方法和getViperDetails方法。第一種方法能獲取存有我們蛇詳細信息的數組,而第二方法能獲取每條蛇的詳細信息。在獲取每條蛇的詳細信息后,我們將其保存到vipers數組中。
恭喜你,完成了所有的開發工作!
加密蛇游戲的玩法示范:花費0.02個以太幣購買一條新的蛇,然后讓編號為15和編號為16的蛇繁殖一條蛇寶寶,恭喜你,你做到了!
寫在最后
剛剛我們開發了一個類似于加密貓的DApp!同時,也學習了如何創建自己的ERC-721標準實現,并定義了DApp的自定義函數,學習了如何使用Vue.js開發項目,并創建了一個簡單的Web應用程序。
如果你覺得這樣太簡單了,還想挑戰一下自己,這是我的一點建議:
首先,你可以鍛煉一下自己的token開發能力,在本文中我們直接使用了現成的ERC-721token代碼,你可以試著自己從頭來開始編寫,在這個過程中你可以參考開源智能合約開發框架OpenZeppelin的實現或以太坊ERC-721token的標準規范。
或者,你可能試著擴展一下我們已經完成的工作,在這個去中心化應用程序中添加更多的功能,就比如說加入與其他用戶進行蛇交易的功能,這也是一個不錯的主意。
老鐵們,學到干貨了嗎?
Tags:VIPVIPERWEBTOKEBBVIP TokenVIPER價格web3域名.tidKizuna Global Token
據IMEOS報道,RatingDapp目前收錄EOS,ETH和TRONDApp數量總共2247個,三條公鏈上周總交易額達到3.1億美元,總活躍用戶數量45萬.
1900/1/1 0:00:00區塊鏈重塑跨境支付業務,通過與美元掛鉤的銀行代幣來吸收世界財富流到美國,幫助美國繼續穩固美元霸權.
1900/1/1 0:00:00DragonExSupportstheLoopring(LRC)SmartContractUpgrade 2019-05-07 DearCommunities.
1900/1/1 0:00:00隨著加密貨幣的興起,作為加密貨幣行業中最重要的一環,交易所市場也變得尤為繁榮,不過就交易所行業的發展趨勢而言,在經歷了18年上半年平均每天數十家交易所上線的野蠻生長期后.
1900/1/1 0:00:00那些聽不見音樂的人認為那些跳舞的人瘋了—尼采 摘要: 受Bitfinex&Tether被NYAG指控影響,USDT價格出現折價波動、平臺資金出逃或推高Bitfinex上BTC溢價.
1900/1/1 0:00:00導讀: 1999年,6位中國臺灣新竹交通大學的學生聚在一起,從學校的文字BBS開始,一步步摸索,建立起了世界排名的前20的網站——「無名小站」.
1900/1/1 0:00:00