主頁 > 區塊鏈 > 手把手教你一步步開發第一個Dapp(使用solidity語言實作投票合約)——Ubuntu版本

手把手教你一步步開發第一個Dapp(使用solidity語言實作投票合約)——Ubuntu版本

2021-02-09 11:40:14 區塊鏈

手把手教你一步步開發第一個Dapp(使用solidity語言實作投票合約)——Ubuntu版本

前言

現在流行的技術區塊鏈算一個熱門,我也在學習的路上,寫下博客旨在為了記錄一些自己遇到的問題和解決方法,希望可以多多幫助學習路上的小白,

提到區塊鏈不得不提到位元幣,但是現在熱門的開發就是go語言開發和基于以太坊的開發,我目前在學的是以太坊的一些東西,之前沒有接觸很多,所以也是從無到有的程序,

經過這些天的學習我發現中國對于這塊技術的討論還是相對較少(在遇到問題的時候通過百度很難找出答案,不知道是因為大牛的封閉,還是我們確實缺乏這方面技術的研究),

什么是Dapp?

App我們都知道是客戶端應用,是application的簡稱,再說dapp就是D+app,d是英文單詞decentralization的首字母,單詞翻譯中文是去中心化,即dapp為去中心化應用,主要強調的是一個可以被我們直觀看見的一個頁面這樣子的應用,里面集成了我們的區塊鏈技術(去中心化技術),

接上一篇的文章,上一篇我們是在Windows上實作了Dapp,那么我沒也可以在Linux上實作我們的Dapp投票合約,按理來說后者更加的適合我們的需求和環境,

本文參考基礎:

如果想在Windows上搭建Dapp的可以參看上文:手把手教你一步步開發第一個Dapp(使用solidity語言實作投票合約)——Remix版本——這篇文章中的合約和前一篇一樣,后面的web部署代碼也一樣

在Ubuntu上挖礦:全網最詳細的Ubuntu挖礦教程(私有鏈搭建、挖礦、轉賬和交易)

看完這篇文章后你會學會:


  1. 熟悉Linux(Ubuntu)的作業系統
  2. 會基本的腳本語言
  3. 安裝環境(solc,web3,Ganache,node)
  4. 安裝geth挖礦環境以及挖礦操作
  5. Dapp的基礎開發

目錄

前言

1. 挖礦

2.部署

1)安裝node

2)安裝solc

方法一:安裝solc

方法二:安裝指定版本的solc

3)安裝web3

4)安裝Ganache

(1)通過源得到Ganache并下載

(2)修改權限

(3)啟動Ganache

3.搭建Dapp

(1)進入node.js

(2)獲取web3支持

(3)定義變數地址

(4)web3連接地址

(5)獲取地址賬戶

(6)定義變數獲取solc

(7)定義變數拿到合約

(8)定義變數編譯合約

(9)定義變數創建abi

(10)定義變數得到合約編譯后的bytecode

(11)定義變數連接abi

(12)定義變數(支付費用的賬戶和最高gas)

(13)部署合約

(14)獲取合約地址

(15)合約執行(驗證)

報錯總結

(1)呼叫函式

(2)創建合約(初始化合約)

(3)web3連接錯誤

(4)合約版本和你裝的solc版本不對應

后言


1. 挖礦

這一部分的內容我單獨的寫了一篇文章來細細講解,有需要的可以看:全網最詳細的Ubuntu挖礦教程(私有鏈搭建、挖礦、轉賬和交易)

2.部署

1)安裝node

sudo apt-get install nodejs

因為我已經安裝過了,所以你們可能和我的界面有不一樣的地方,

安裝完成查看node.js的版本:

yeyuheng@yeyuheng-virtual-machine:~/桌面/web$ node -v

能查到版本就是安裝成功了,

也可以下載源檔案進行鏈接安裝(參考):https://blog.csdn.net/liuweihui521/article/details/84141545

2)安裝solc

需要注意的是,這個solc需要安裝在你專案檔案夾下,比如我的Dapp專案的檔案夾是web,那么你就要定位到web檔案夾下然后進行下一步的安裝步驟,

還有一點就是你安裝的solc版本最好和我們的智能合約中的版本一致,這樣可以減少報錯的可能,

定位檔案夾:

進行安裝:

方法一:安裝solc

>sudo add-apt-repository ppa:ethereum/ethereum
>sudo apt-get update
>sudo apt-get install solc

方法二:安裝指定版本的solc

(1)先安裝npm

>sudo apt install npm

如果有報錯的話可以嘗試:sudo apt-get install update 然后在執行上面的陳述句,

如果報錯如下:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 npm : Depends: node-gyp (>= 0.10.9) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

可以使用以下代碼解決:sudo apt-get install nodejs-dev node-gyp libssl1.0-dev,然后再次的執行安裝命令,

(2)安裝指定版本的solc

>sudo npm install solc@0.4.25

出現進度條表示開始安裝,只需要耐心的等待一下就好了,

安裝成功:

可以使用sudo npm list solc對其版本查詢:

3)安裝web3

安裝web3和solc的方法大差不差

sudo npm install web3@0.20.1

安裝完畢(出現的結果可能不同,因為我之前已經安裝了好幾個web3的版本,這都是小問題):

查詢web3版本查看是否安裝成功:

yeyuheng@yeyuheng-virtual-machine:~/桌面/web$ sudo npm list web3

可以看到查詢出來的版本就是我們剛剛安裝的版本,說明安裝成功,

4)安裝Ganache

wget https://github.com/trufflesuite/ganache/releases/download/v1.0.1/ganache-1.0.1-x86_64.AppImage  //下載ganache
chmod +x ganache-1.0.1-x86_64.AppImage //修改權限
sudo ./ganache-1.0.1-x86_64.AppImage //啟動ganache

(1)通過源得到Ganache并下載

yeyuheng@yeyuheng-virtual-machine:~/桌面/web$ wget https://github.com/trufflesuite/ganache/releases/download/v1.0.1/ganache-1.0.1-x86_64.AppImage

(2)修改權限

yeyuheng@yeyuheng-virtual-machine:~/桌面/web$ chmod +x ganache-1.0.1-x86_64.AppImage

(3)啟動Ganache

yeyuheng@yeyuheng-virtual-machine:~/桌面/web$ sudo ./ganache-1.0.1-x86_64.AppImage

點擊yes出現Ganache圖形界面

啟動成功就是安裝成功了,對于Ganache界面有啥不懂的可以看:手把手教你一步步開發第一個Dapp(使用solidity語言實作投票合約)——Remix版本這里面的Ganache部分介紹,

到此我們需要在Ubuntu上開發Dapp的所有前期準備全部完成了,

下面才是進入我們這片文章的重點部分:

3.搭建Dapp

進入到我們的源檔案的位置,開始操作,(合約還是上一篇的合約

(1)進入node.js

yeyuheng@yeyuheng-virtual-machine:~/桌面/web$ node

(2)獲取web3支持

> var Web3=require('web3')

(3)定義變數地址

> var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))

(4)web3連接地址

>web3.isConnected()

(5)獲取地址賬戶

>web3.eth.accounts

注意:我連接的是自己虛擬機上的私有鏈,并沒有用Ganache,如想使用Ganache把第三步的http換掉即可,

(6)定義變數獲取solc

>var solc = require('solc')

(7)定義變數拿到合約

>var sourceCode = fs.readFileSync('Voting.sol').toString()

列印查看:

(8)定義變數編譯合約

>var compiledCode = solc.compile(sourceCode)

列印查看:

(9)定義變數創建abi

>var abi = JSON.parse(compiledCode.contracts[':Voting'].interface);

注意:引數里面的Voting是我們編譯合約后得到的一個類似標識的一個東西,可以在剛剛列印的編譯好的合約中找到:

(10)定義變數得到合約編譯后的bytecode

> var byteCode = compiledCode.contracts[':Voting'].bytecode

注意:最后合約部署的時候要求的bytecode是一個十六進制的數,但是我們從上圖看出來了這個編譯出來的bytecode不是十六進制的一個數,所以我們需要將其轉化,不然后面部署的時候可能會報錯,

加上0x即可:> byteCode="0x"+byteCode

(11)定義變數連接abi

> var VotingContract = web3.eth.contract(abi)

(12)定義變數(支付費用的賬戶和最高gas)

>var deployTx0bj = {data:byteCode, from:web3.eth.accounts[0], gas:3000000}

(13)部署合約

部署合約的時候需要開啟挖礦否則不會出現合約的address

>var contractInstance = VotingContract.new(['Allice','Bob','Cary'],deployTx0bj);

出現報錯:可以看見是賬戶沒有解鎖的問題,對賬戶進行解鎖,不會可以查看: 全網最詳細的Ubuntu挖礦教程(私有鏈搭建、挖礦、轉賬和交易)

解鎖完成再次執行:

挖礦界面同步出現資料:

(14)獲取合約地址

> contractInstance.address                          //需要等待一會才會部署成功出現地址

注意:如果你是執行了部署合約再開啟挖礦的話可能會導致address出不來,建議先開啟挖礦在執行剛剛的一系列操作

(15)合約執行(驗證)

> contractInstance.voteForCandidate('Alice',{from: web3.eth.accounts[0]})   
'0xd7bad76d185da8a187d82b1712eea3bcbf83f831574e905b945e638954cbb49e'
> contractInstance.totalVotesFor.call('Alice')
BigNumber { s: 1, e: 0, c: [ 1 ] }
> contractInstance.totalVotesFor.call('Alice').toString()
'1'

現在我們有了合約的地址和abi和部署的http地址,我們就可以開發我們的Dapp來實作投票系統了:

后面一部分和手把手教你一步步開發第一個Dapp(使用solidity語言實作投票合約)——Remix版本中的第三章是一樣的操作,我就不累贅了,大家可以去那邊查看具體的實作程序,

報錯總結

(1)呼叫函式

當你進行呼叫函式的時候一定用加上contractInstance.setInfo(name,age,{from: web3.eth.accounts[0]})

當你輸入>contractInstance.setInfo(name,age)就會報錯無效的地址(Error: invalid address)

(2)創建合約(初始化合約)

> var contractInstance = VotingContract.new([],deployTx0bj);

Error: invalid argument 0: json: cannot unmarshal hex string without 0x prefix into Go struct field SendTxArgs.data of type hexutil.Bytes

    at Object.InvalidResponse (/home/yeyuheng/桌面/new/node_modules/web3/lib/web3/errors.js:38:16)

    at RequestManager.send (/home/yeyuheng/桌面/new/node_modules/web3/lib/web3/requestmanager.js:61:22)

    at Eth.send [as sendTransaction] (/home/yeyuheng/桌面/new/node_modules/web3/lib/web3/method.js:145:58)

    at ContractFactory.new (/home/yeyuheng/桌面/new/node_modules/web3/lib/web3/contract.js:228:33)

大概率就是出現了那里沒有加上0x,經過查看是 deployTx0bj這個引數中有一個地方沒有加上0x

(3)web3連接錯誤

> web3.isConnected()

false

那么可能你的賬戶沒有解鎖,可以先解鎖試試

(4)合約版本和你裝的solc版本不對應

> sourceCode

'pragma solidity ^0.4.24;\r\n \r\ncontract MeetingInfoContract{\r\n  string name;\r\nuint age;\r\nfunction setInfo(string _name,uint _age) public{\r\nname = _name;\r\nage = _age;\r\n}\r\nfunction getInfo() public view returns(string,uint){\r\nreturn(name,age);\r\n}\r\n}'

選擇一個合適的solc版本進行安裝

后言

本次開發是在Ubuntu上進行的投票系統,全程用到了ubuntu這個作業系統,其實后面部署到web端上操作和我之前的那篇投票的blog大差不差(所以我也偷了一下懶,大家可以看之前那篇文章的第三章),

自己總結一下我的兩篇姊妹篇的文章的差異:主要是得到abi和合約地址的方法的差異,這篇文章可以直接連接到我們自己創建的私有鏈上進行一系列的具體操作,而那個在windows上搭建的雖然可以通過matemask等錢包和remix編譯器等工具來進行自己私有鏈的連接,但是沒有這個來的直觀,在Ubuntu上開發唯一的去缺點就是要自己安裝很多的環境,有些人可能在這一步的時候就會放棄,但是反過來想想多學點東西未嘗不是一件好事呢!

兩篇文章各有千秋,建議剛剛開始學這方面知識的小白,可以兩條路都走一下看看,多學總是好的,

整理不易多點關注+點贊+收藏,感謝各位大哥,持續關注后續更加精彩,

打個廣告:代做Web畢設,專業團隊值得信任,可以私聊,

這一次的分享到此結束,

No pains No results

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/258073.html

標籤:區塊鏈

上一篇:golang學習之路—VSCode下載安裝

下一篇:Synchronized

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more