国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

NODEJS如何發(fā)送以太坊交易

付倫 / 1317人閱讀

摘要:是將與以太坊交互的模塊。在路由器內(nèi)部我需要我的以太坊地址,我將發(fā)送我的交易地址,合約地址和合約。你可以通過以太坊錢包或搜索合約。我們?yōu)橐蕴粍?chuàng)建了我們的一個(gè)極小的后端。

“ 注意:在本教程中我使用web3js 1.0版本 ”

大家好,我將解釋如何從NodeJS后端發(fā)送交易。我將使用rinkeby testnet并將創(chuàng)建一個(gè)路由器,還添加一些節(jié)點(diǎn)模塊并使用infura http接口來完成教程。

我們需要web3jsexpressethereumjs-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

相關(guān)文章

  • Java開發(fā)區(qū)塊鏈的三大sdk庫

    摘要:是企業(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)行交互嗎?以...

    iKcamp 評(píng)論0 收藏0
  • 以太DApp開發(fā)入門教程——Node.js和truffle框架打造區(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)。 ...

    zebrayoung 評(píng)論0 收藏0
  • 以太DApp開發(fā)入門教程——Node.js和truffle框架打造區(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)。 ...

    MASAILA 評(píng)論0 收藏0
  • 區(qū)塊鏈開發(fā)中使用的最流行的編程語言

    摘要:我們目前正處于一個(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)與眾不同的繁榮。由于許多...

    2shou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<