摘要:是將與以太坊交互的模塊。在路由器內(nèi)部我需要我的以太坊地址,我將發(fā)送我的交易地址,合約地址和合約。你可以通過以太坊錢包或搜索合約。我們?yōu)橐蕴粍?chuàng)建了我們的一個(gè)極小的后端。
“ 注意:在本教程中我使用web3js 1.0版本 ”
大家好,我將解釋如何從NodeJS后端發(fā)送交易。我將使用rinkeby testnet并將創(chuàng)建一個(gè)路由器,還添加一些節(jié)點(diǎn)模塊并使用infura http接口來完成教程。
我們需要web3js,express和ethereumjs-tx模塊來執(zhí)行交易。之后你需要從Infura輸入你自己的api key,登錄到infura。
開始首先,你需要為此項(xiàng)目創(chuàng)建一個(gè)空文件夾,以便更輕松地訪問它。創(chuàng)建文件夾后,你需要在該文件夾中打開命令shell。我假設(shè)你的計(jì)算機(jī)上安裝了npm。npm是由nodejs分發(fā)的,所以如果你安裝了nodejs,你也會(huì)得到npm。如果你沒有從這個(gè)網(wǎng)站下載包含npm的nodejs。安裝npm后你需要調(diào)用它。
npm init
如果要保留默認(rèn)設(shè)置(包括默認(rèn)名稱,即文件夾名稱),可以通過輸入enter鍵跳過所有行。在此過程結(jié)束時(shí),你將擁有一個(gè)package.json文件。
啟動(dòng)項(xiàng)目后,在文件夾中需要?jiǎng)?chuàng)建一個(gè)js文件,其中包含你想要的名稱,這將是我們的后端。
獲取模塊在我的代碼中,你可以看到有模塊要求,我們只需通過npm下載將它們包含到項(xiàng)目中。他們的npm調(diào)用:
npm install web3 --save npm install express --save npm install ethereumjs-tx --save
你需要從命令行多帶帶調(diào)用此行以將它們安裝到項(xiàng)目中。完成安裝過程后,可以看到有一個(gè)文件夾名稱是節(jié)點(diǎn)模塊,它是模塊下載的文件夾。
INFURA完成下載模塊后。你需要一個(gè)infura api密鑰。Api 密鑰是完成本教程的關(guān)鍵部分。你可以通過登錄Infura來獲得它。獲得infura api密鑰后,需要使用api密鑰更改第7行(YOUR_API_KEY)。
順便說一句,infura是非常好的接口。你也可以通過infura api訪問ipfs ,這是一個(gè)區(qū)塊鏈存儲(chǔ)服務(wù)。可以從他們的網(wǎng)站獲得有關(guān)ipfs的更多信息。
通過獲取infura api密鑰,我們完成了代碼的預(yù)請(qǐng)求。我們可以開始編碼了。從現(xiàn)在開始,我將逐行解釋代碼。
在前3行,我將模塊添加到j(luò)s文件中。
web3是將與以太坊交互的模塊。
創(chuàng)建路由器需要Express。
ethereumjs-tx是創(chuàng)建交易所必需的。
在第5行,我使用Express模塊創(chuàng)建我的應(yīng)用程序。
創(chuàng)建應(yīng)用程序后,我們需要編寫文件的最后一行:
app.listen(3000, () => console.log("Example app listening on port 3000!"))
在第8行,我使用httpprovider創(chuàng)建web3js對(duì)象,這是在nodejs后端的infura。如果你在看到本教程之前搜索過以太坊后端開發(fā),你可以看到其中許多都是由reactjs編碼的,并且他們使用metamask作為接口服務(wù)。NodeJS后端無法訪問瀏覽器資源,因此NodeJS后端無法使用metamask作為服務(wù)接口程序,我對(duì)其進(jìn)行了處理并使用infura作為接口服務(wù)提供程序。
在web3的某些功能中,需要web3的websocket提供程序,因此需要在用的時(shí)候更改第8行。
web3js = new web3(new web3.providers.WebsocketProvider("wss://mainnet.infura.io/_ws"));
在第10行,我創(chuàng)建了我的路由器,這是一個(gè)get,但它需要在邏輯上發(fā)布。我創(chuàng)建本教程只是為了展示如何完成發(fā)送交易,所以這個(gè)無關(guān)緊要。
在路由器內(nèi)部我需要我的rinkeby以太坊地址(myAddress),我將發(fā)送我的交易地址(toAddress),合約地址(contractAddress)和合約abi(con??tractABI)。你可以通過以太坊錢包或etherscan搜索合約abi 。我從ethereum wallet部署本教程合約,你不需要部署任何合約。你可以簡單地使用現(xiàn)有的一個(gè)。
我們需要的最后一件事是我的私鑰(privateKey)。這不是一種安全的方式,但由于我們的前端沒有任何錢包(因?yàn)槲覀儧]有前端:))我們此時(shí)手動(dòng)執(zhí)行操作。你無法通過以太坊錢包訪問你的私鑰,因此你需要將你的rinkeby以太坊帳戶導(dǎo)入類似MyEtherWallet的網(wǎng)站。
在定義變量后的路由器中,我們創(chuàng)建原始交易,然后使用我們的私鑰對(duì)其進(jìn)行簽名。簽署交易后,我們通過web3js將其發(fā)送到rinkeby testnet。
完成編碼后,我們需要對(duì)其進(jìn)行測(cè)試。在同一文件夾中打開命令shell并啟動(dòng)后端。我的文件名是backend.js所以我是通過代碼啟動(dòng)的。
node backend.js
這意味著可以使用代碼啟動(dòng)后端:
node
啟動(dòng)后端后,需要打開瀏覽器,并且需要將http://localhost:3000/sendtx寫入地址行。
如此而已。我們?yōu)橐蕴粍?chuàng)建了我們的一個(gè)極小的后端。代碼如下:
const web3 = require("web3"); const express = require("express"); const Tx = require("ethereumjs-tx"); const app = express(); //Infura HttpProvider Endpoint web3js = new web3(new web3.providers.HttpProvider("https://rinkeby.infura.io/YOUR_API_KEY")); app.get("/sendtx",function(req,res){ var myAddress = "ADDRESS_THAT_SENDS_TRANSACTION"; var privateKey = Buffer.from("YOUR_PRIVATE_KEY", "hex") var toAddress = "ADRESS_TO_SEND_TRANSACTION"; //contract abi is the array that you can get from the ethereum wallet or etherscan var contractABI =YOUR_CONTRACT_ABI; var contractAddress ="YOUR_CONTRACT_ADDRESS"; //creating contract object var contract = new web3js.eth.Contract(contractABI,contractAddress); var count; // get transaction count, later will used as nonce web3js.eth.getTransactionCount(myAddress).then(function(v){ console.log("Count: "+v); count = v; var amount = web3js.utils.toHex(1e16); //creating raw tranaction var rawTransaction = {"from":myAddress, "gasPrice":web3js.utils.toHex(20* 1e9),"gasLimit":web3js.utils.toHex(210000),"to":contractAddress,"value":"0x0","data":contract.methods.transfer(toAddress, amount).encodeABI(),"nonce":web3js.utils.toHex(count)} console.log(rawTransaction); //creating tranaction via ethereumjs-tx var transaction = new Tx(rawTransaction); //signing transaction with private key transaction.sign(privateKey); //sending transacton via web3js module web3js.eth.sendSignedTransaction("0x"+transaction.serialize().toString("hex")) .on("transactionHash",console.log); contract.methods.balanceOf(myAddress).call() .then(function(balance){console.log(balance)}); }) }); app.listen(3000, () => console.log("Example app listening on port 3000!"))
如果希望快速進(jìn)行以太坊開發(fā),那請(qǐng)看我們精心打造的教程:
以太坊開發(fā)實(shí)戰(zhàn)進(jìn)階,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn),適合進(jìn)階。
匯智網(wǎng)原創(chuàng)翻譯,轉(zhuǎn)載請(qǐng)標(biāo)明出處。這里是原文
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/24306.html
摘要:是企業(yè)與區(qū)塊鏈相遇的地方。的框架旨在成為開發(fā)區(qū)塊鏈解決方案的支柱。以太坊,主要是針對(duì)工程師使用進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。 如果你想將區(qū)塊鏈合并到一個(gè)Java項(xiàng)目中,現(xiàn)在我們來看看就是這個(gè)細(xì)分領(lǐng)域中三個(gè)最大的OSS玩家。 好的伙計(jì)們,我們都聽說過比特幣,以太坊或其他加密貨幣,其中有一些時(shí)髦的名字圍繞著我們常見的新聞,但我們作為Java開發(fā)人員知道如何輕松地與這些區(qū)塊鏈技術(shù)進(jìn)行交互嗎?以...
摘要:第一節(jié)課程概述本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個(gè)基于以太坊的完整去中心化應(yīng)用區(qū)塊鏈投票系統(tǒng)。第七節(jié)以太坊世界計(jì)算機(jī)以太坊是一種區(qū)塊鏈的實(shí)現(xiàn)。交易數(shù)據(jù)以太坊中每筆交易都存儲(chǔ)在區(qū)塊鏈上。 第一節(jié) 課程概述 本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個(gè) 基于以太坊的完整去中心化應(yīng)用 —— 區(qū)塊鏈投票系統(tǒng)。 ...
摘要:第一節(jié)課程概述本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個(gè)基于以太坊的完整去中心化應(yīng)用區(qū)塊鏈投票系統(tǒng)。第七節(jié)以太坊世界計(jì)算機(jī)以太坊是一種區(qū)塊鏈的實(shí)現(xiàn)。交易數(shù)據(jù)以太坊中每筆交易都存儲(chǔ)在區(qū)塊鏈上。 第一節(jié) 課程概述 本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個(gè) 基于以太坊的完整去中心化應(yīng)用 —— 區(qū)塊鏈投票系統(tǒng)。 ...
摘要:我們目前正處于一個(gè)新興的區(qū)塊鏈開發(fā)行業(yè)中。,一種在以太坊開發(fā)人員中流行的新的簡單編程語言,因?yàn)樗怯糜陂_發(fā)以太坊智能合約的語言。它是全球至少萬開發(fā)人員使用的世界上最流行的編程語言之一。以太坊,主要是針對(duì)工程師使用進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。 我們目前正處于一個(gè)新興的區(qū)塊鏈開發(fā)行業(yè)中。區(qū)塊鏈技術(shù)處于初期階段,然而這種顛覆性技術(shù)已經(jīng)成功地風(fēng)靡全球,并且最近經(jīng)歷了一場(chǎng)與眾不同的繁榮。由于許多...
閱讀 4746·2021-10-13 09:39
閱讀 1956·2019-08-29 11:12
閱讀 1150·2019-08-28 18:16
閱讀 1863·2019-08-26 12:16
閱讀 1249·2019-08-26 12:13
閱讀 2996·2019-08-26 10:59
閱讀 2302·2019-08-23 18:27
閱讀 2996·2019-08-23 18:02