摘要:最后毅然決然的選擇自己同步節(jié)點(diǎn)的苦逼之路。三用連接發(fā)起智能合約交易要發(fā)起交易首先要解決的就是問題一,不可以用。自己同步節(jié)點(diǎn)就可以先解鎖在簽名交易,然后發(fā)送交易給其他節(jié)點(diǎn)。
一.前言
前文提到目前有一些公司提供公共的以太坊對外服務(wù),就是以你可以調(diào)用他的web3接口,之前一直被兩個問題困擾,一個是覺得別人的節(jié)點(diǎn)不安全,還有初步嘗試后發(fā)現(xiàn)Infura節(jié)點(diǎn)沒有開放賬戶相關(guān)的方法。沒法使用web3.eth.sendTransaction方法,以為只能進(jìn)行一些查詢服務(wù),用處就較為雞肋。最后毅然決然的選擇自己同步節(jié)點(diǎn)的苦逼之路。看了大神文章,兩個問題迎刃而解,并踩過大神文章重的一些坑,實(shí)際的寫了一個群發(fā)幣腳本。
二.申請Infura目前較為主流的以太坊服務(wù)就是Infura,到Infura官網(wǎng)申請,只要輸入一點(diǎn)基本資料和Email就可以得到API-key(輸入自己常用郵箱,回復(fù)的郵件不要刪除,因?yàn)镮nfura不存在登入系統(tǒng),所以再次使用只能去郵箱找API-key,沒保留只能再次申請了)。
三.用連接Infura發(fā)起智能合約交易要發(fā)起交易首先要解決的就是問題一,web3.eth.sendTransaction不可以用。為什么不能用呢,其實(shí)web3.eth.sendTransaction的原理是創(chuàng)建一個交易然后發(fā)給你連接的以太坊節(jié)點(diǎn),以太坊節(jié)點(diǎn)可以理解為有兩個功能,一個是發(fā)出一筆簽了名的正確交易,另一個是給本節(jié)點(diǎn)中處于解鎖狀態(tài)的賬戶中發(fā)來的交易簽名。自己同步節(jié)點(diǎn)就可以先解鎖在簽名交易,然后發(fā)送交易給其他節(jié)點(diǎn)。但I(xiàn)nfura提供給你的服務(wù)只有各種查詢和轉(zhuǎn)發(fā)交易,并沒把錢包開放給你儲存私鑰(開放也不放心存過去)。是的但你可以把簽名好的交易發(fā)給它他幫你轉(zhuǎn)發(fā)掉。所以第二個安全問題也就解決了,因?yàn)槟銢]有把私鑰發(fā)給它,只是把你認(rèn)可你自己簽名的交易發(fā)給他了。
下面是實(shí)現(xiàn)web3中用智能合約私鑰簽名的細(xì)節(jié):
1.創(chuàng)建一個交易對象
var _web3 = new Web3(yourInfuraAddress); const txData = { nonce: _web3.utils.toHex(nonce), gasLimit: _web3.utils.toHex(99000), // gasPrice: _web3.utils.toHex(10e9), // 10 Gwei to: contract_address, from: address1, value: "0x00", data: "0x"+"a9059cbb"+"000000000000000000000000"+address2+hexNum }
參數(shù)解釋:
nonce:整數(shù)類型,nonce從零開始計數(shù)每次加一,直接填寫較大的會等待它前面的數(shù)的交易完成才能交易,較小會失敗,使用與自己發(fā)送的處于pending狀態(tài)的交易相同的nonce,則會取消掉前一筆交易,所以一般錢包發(fā)給同一個人的前一筆交易被擁堵可以發(fā)送一個0eth的交易取消前面交易。我們使用下面方法獲取當(dāng)前的nonce:
_web3.eth.getTransactionCount(sendAddress).then(function(res){ nonce = res; }
gasLimit和gasPrice: gasPrice一般可以設(shè)置1G位到10G位之間,gasLimit話費(fèi)gas數(shù)量eth交易一般是固定21000個,智能合約會根據(jù)合約方法復(fù)雜程度自動變化,gaslimit可以設(shè)置消耗最大值,超過這個值將取消交易。(注意:需要轉(zhuǎn)換成16進(jìn)制,可以使用web3.utils.toHex方法。)
to:如果是智能合約交易則是智能合約地址
from:發(fā)起方的公鑰
value:轉(zhuǎn)賬的eth數(shù),智能合約交易請?zhí)?x00
data:這個有門道了,0x開頭表示十六進(jìn)制,前八位方法名一般基于erc20的tranlation方法為a9059cbb,其他的可以將合約粘貼到remix上面看,之后64位依次第一個參數(shù)接受token方第二個參數(shù)token數(shù)量(要16進(jìn)制不夠64位前面補(bǔ)0,補(bǔ)零方法在后邊,更加牛逼的用法官網(wǎng)參數(shù)解釋)
補(bǔ)零方法:
function addPreZero(num){ var t = (num+"").length, s = ""; for(var i=0; i<64-t; i++){ s += "0"; } return s+num; }
2.創(chuàng)建raw transaction
要引入另一個套件 ethereumjs-tx。記得先用 npm 安裝。建立raw transaction、
var Tx = require("ethereumjs-tx"); var tx = new Tx(rawTx);
3.使用私鑰簽名
const privateKey = new Buffer("", "hex"); tx.sign(privateKey);
4.交易序列化
const serializedTx = transaction.serialize().toString("hex")
5.發(fā)送交易及各種狀態(tài)初六
var tran = _web3.eth.sendSignedTransaction("0x" + serializedTx); tran.on("confirmation", (confirmationNumber, receipt) => { //console.log("confirmation: " + confirmationNumber); }); tran.on("transactionHash", hash => { console.log("hash"); console.log(hash); }); tran.on("receipt", receipt => { console.log("receipt:"); console.log(receipt); }); tran.on("error", (err)=>{ alert("出現(xiàn)錯誤請查看控制臺"); console.log(err); });
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/24045.html
摘要:將返回進(jìn)程碼查看實(shí)時查看日志關(guān)閉殺死進(jìn)程同步節(jié)點(diǎn)結(jié)論目前來說和都是可以同步成功節(jié)點(diǎn)完全可以放在國外,同步速度會很快,使用連接執(zhí)行腳本就好有特殊需求國內(nèi)阿里云也可以同步成功。 ETH公有鏈節(jié)點(diǎn)同步 最近區(qū)塊鏈公司很多都會搞發(fā)糖果活動,一般都能吸引幾萬粉絲,這就來了一個需求,給人家發(fā)糖果。主流的geth,parity,甚至imtoken錢包只能輸入地址一筆筆交易,幾萬筆交易人工根本無法完成...
摘要:可以解鎖,也可以將交易代碼寫函數(shù)內(nèi)。簽名交易同理封裝一個異步函數(shù),實(shí)際上簽名交易分為兩個步驟簽名一個交易發(fā)送這個簽名的交易到區(qū)塊鏈。 一.開發(fā)環(huán)境安裝及其搭建 1.安裝node 最好v8的可以使用ES6語法2.安裝ganacheganache介紹:雖說真實(shí)發(fā)布必須要使用前文說到的三種方法geth,parity,或其它服務(wù)商,但是測試開發(fā)環(huán)境下,有一款本地基于內(nèi)存的錢包,不需要等待確認(rèn)交...
本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:[使用 ethers.js 開發(fā)以太坊 Web 錢包 3 - 展示錢包信息及發(fā)起簽名交易)](https://learnblockchain.cn/20...,請讀者前往原文閱讀 以太坊去中心化網(wǎng)頁錢包開發(fā)系列,將從零開始開發(fā)出一個可以實(shí)際使用的錢包,本系列文章是理論與實(shí)戰(zhàn)相結(jié)合,一共有四篇:創(chuàng)建錢包賬號、賬號Keystore文件導(dǎo)入導(dǎo)出、展示錢包信息及發(fā)起簽...
本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:[使用 ethers.js 開發(fā)以太坊 Web 錢包 3 - 展示錢包信息及發(fā)起簽名交易)](https://learnblockchain.cn/20...,請讀者前往原文閱讀 以太坊去中心化網(wǎng)頁錢包開發(fā)系列,將從零開始開發(fā)出一個可以實(shí)際使用的錢包,本系列文章是理論與實(shí)戰(zhàn)相結(jié)合,一共有四篇:創(chuàng)建錢包賬號、賬號Keystore文件導(dǎo)入導(dǎo)出、展示錢包信息及發(fā)起簽...
摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實(shí)應(yīng)用場景,想做區(qū)塊鏈應(yīng)用開發(fā),可進(jìn)一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請讀者前往原文閱讀 本章的文章越來越多,本文是一個索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...
閱讀 1768·2021-10-11 10:57
閱讀 2352·2021-10-08 10:14
閱讀 3393·2019-08-29 17:26
閱讀 3340·2019-08-28 17:54
閱讀 3020·2019-08-26 13:38
閱讀 2885·2019-08-26 12:19
閱讀 3608·2019-08-23 18:05
閱讀 1277·2019-08-23 17:04