Testnets

如何為我的乙太坊專用網路創建水龍頭作為 https://faucet.ropsten.be/ 的複製

  • October 17, 2019

我在 azure 上建立了一個有 5 個節點的乙太坊網路。現在我想做一個像https://faucet.ropsten.be/這樣的水龍頭。任何人都可以去那裡放錢包地址,並可以獲得我的網路 testether。所以為此我在我的網路上部署了一個智能合約。在該智能合約中,使用者必須執行該功能才能獲得測試乙太幣。但是因為他們沒有任何 testether,所以他們無法為此功能執行支付 gas,我將不得不實施一個解決方案,其中 gas 由儲存我網路的 testether 的智能合約支付。解決方案有點複雜,必須使用簽名交易,就像本文中一樣(為乙太坊專用網路創建水龍頭以獲取乙太幣.So)我想知道是否有人可以提出一個簡單的解決方案,在該解決方案中,我的發送使用者只需輸出他/她的錢包地址並點擊前端上的一個按鈕,他們就可以在不向他們顯示任何簽名的情況下獲得 testether 以及像 rinkbey 或 ropsten testnet faucet 之類的任何東西。

經過嘗試,我發現我們可以將水龍頭作為傳統的客戶端-伺服器 Web 應用程序。為此,我們可以在外部錢包中儲存大量乙太幣(您可以從 geth 控制台手動將大量乙太幣發送到從伺服器發送乙太幣的錢包)。下面給出了執行伺服器的程式碼。訪問這個http://localhost:3000/sendtx。這會將 1 個乙太幣發送到提供的錢包地址。我用這篇文章回答了https://medium.com/coinmonks/ethereum-tutorial-sending-transaction-via-nodejs-backend-7b623b885707 你可以用一個按鈕和一個表單來輸入一個前端

const web3 = require('web3');
const express = require('express');
const Tx = require('ethereumjs-tx');
const app = express();
web3js = new web3(new web3.providers.HttpProvider("https://rinkeby.infura.io/YOUR_API_KEY")); //You can use your costom RPC also
app.get('/sendtx',function(req,res){
   var myAddress = 'Your address';//'ADDRESS_THAT_SENDS_TRANSACTION';
   var privateKey = Buffer.from('PrivateKey', 'hex')
   var toAddress = '0x';//Address to which sending transaction.
   var amount = 1000000000000000000 //in wei

   web3js.eth.getTransactionCount(myAddress).then(function(v){
       console.log("Count: "+v);
       count = v;
       //creating raw tranaction
       var rawTransaction = {"from":myAddress, "gasPrice":web3js.utils.toHex(20* 1e9),"gasLimit":web3js.utils.toHex(210000),"to":toAddress,"value":web3js.utils.toHex(amount),"data":"0x0","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);
   })
});
app.listen(3000, () => console.log('Example app listening on port 3000!'))

引用自:https://ethereum.stackexchange.com/questions/60658