摘要:可以解鎖,也可以將交易代碼寫函數內。簽名交易同理封裝一個異步函數,實際上簽名交易分為兩個步驟簽名一個交易發送這個簽名的交易到區塊鏈。
一.開發環境安裝及其搭建
1.安裝node 最好v8的可以使用ES6語法
2.安裝ganache
ganache介紹:雖說真實發布必須要使用前文說到的三種方法geth,parity,或其它服務商,但是測試開發環境下,有一款本地基于內存的錢包,不需要等待確認交易,根據操作實時出塊,及其方便,它就是ganache-cli,納尼?你沒聽過它,好吧它的前身就是大名鼎鼎的testrpc,簡直不能太好用呀。
安裝命令: npm i ganache-cli -g
執行命令: ganache-cli
初始狀態說明:創建10個以太坊賬戶,公鑰私鑰上下對應,默認每個賬戶100ETH,http端口為8545。(如果有其它需求可以閱讀官方githug: https://github.com/trufflesui...)
二.基本實例 1.創建一個app.js文件,引用web3,設置http接口提供者(沒錯就是前面ganche-cli開啟的接口)var Web3 = require(‘web3’); var web3 = new Web3(new Web3.providers.HttpProvider(“https://localhost:8545”));
說明:好多教程會這么寫,不能說不對,但有個坑。
if (typeof web3 !== "undefined") { web3 = new Web3(web3.currentProvider); } else { // set the provider you want from Web3.providers web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); }
如果電腦開啟geth或者metamask,web3.currentProvider和ethereumProvider就將會返回geth和metamask而不是咱們設置的8545,尤其是metamask瀏覽器打開自動開啟。
2.測試基礎語法打印區塊高度老版本命令:
console.log(web3.eth.getBlockNumber());
新版本命令:
web3.eth.getBlockNumber().then(console.log);
說明: web3 v1.0大量使用了ES6的語法,不熟悉ES6前端和node后臺有必要盡快補習一下,1.0版方法都使用異步,并且實現了promise語法,then常規使用是放入一個函數第一個參數為成功返回值,第二個參數為失敗返回值,將console.log作為函數,傳入成功的值將直接完成打印。4.創建一個賬戶
命令:web3.eth.personal.newAccount(‘!@superpassword").then(console.log);
5.簡單交易先在封裝兩個異步函數,方便使用也避免進入回調地獄,要優雅寫代碼
發起交易函數
async function sendTransaction(send,rece,ethNum){ await web3.eth.sendTransaction({ from: send, to: rece, value: ethNum }) .then(function(receipt){ console.log(receipt); console.log("send:"); findEth(send).then(function(result){ console.log(result); }); console.log("rec:") findEth(rece).then(function(result){ console.log(result); }); }); }
用公鑰查詢eth數量函數
async function findEth(publicKey){ var ethNum; await web3.eth.getBalance(publicKey).then(function(res){ ethNum = web3.utils.fromWei(res, "ether"); }); return ethNum; }
主程序函數直接執行
async function tList(){ var accountList; await web3.eth.getAccounts().then((res)=> { accountList = res; }); await sendTransaction(accountList[0], accountList[1], 5000000000000000); console.log(findEth(accountList[0])); console.log(findEth(accountList[1])); } tList();
擴展:由于ganache-cli的自帶賬號為已經解鎖賬戶,如果自己創建的賬戶還需要先解鎖,然后才可以用這種方法交易,解鎖方法如下:
web3.eth.personal.unlockAccount(myPublicKey,"password",600) .then(function(res){ })
說明:參數依次是:公鑰、密碼、解鎖時間以秒為單位,600秒內不需要解鎖,默認為300秒??梢詀wait解鎖,也可以將交易代碼寫then函數內。6.簽名交易
同理:封裝一個異步函數,實際上簽名交易分為兩個步驟1.簽名一個交易2.發送這個簽名的交易到區塊鏈。
async function signTran(sendPri,rec,num){ web3.eth.accounts.signTransaction({ to: rec, value: num, gas: 2000000 }, sendPri) .then(function(res){ web3.eth.sendSignedTransaction(res.rawTransaction) .on("receipt", console.log); }); }
web3.eth.accounts.signTransaction參數依次為
json對象
to:(可選)接受方公鑰,如果是發布合約可以為空
data:(可選)調用智能合約需要的數據,也可以是空
value:(可選)eth數量以wei為單位
gas:(可選)gas數量最近都是21000,多了浪費少了完不成
gasPrice:gas價格有gas報價與成功率網站,正式鏈上可以參考給下
私鑰
回調將返回有簽名信息的對象
使用web3.eth.sendSignedTransaction將交易對象下的16進制編碼過的交易碼rawTransaction發送
坑點:復制私鑰一定要手動在前邊加上0x,ganache是沒有給你加的
坑點1:用ws回報錯
坑點2: 前文所說的要開啟person等api的使用
工具地址:
1.web3官網官方文檔
2.ganache-cli github地址
常見錯誤:Contract has not been deployed to detected network
小狐貍(metamask)干擾,小狐貍設置了全局web3變量,搞之前關閉小狐貍
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23996.html
摘要:最后毅然決然的選擇自己同步節點的苦逼之路。三用連接發起智能合約交易要發起交易首先要解決的就是問題一,不可以用。自己同步節點就可以先解鎖在簽名交易,然后發送交易給其他節點。 一.前言 前文提到目前有一些公司提供公共的以太坊對外服務,就是以你可以調用他的web3接口,之前一直被兩個問題困擾,一個是覺得別人的節點不安全,還有初步嘗試后發現Infura節點沒有開放賬戶相關的方法。沒法使用web...
摘要:將返回進程碼查看實時查看日志關閉殺死進程同步節點結論目前來說和都是可以同步成功節點完全可以放在國外,同步速度會很快,使用連接執行腳本就好有特殊需求國內阿里云也可以同步成功。 ETH公有鏈節點同步 最近區塊鏈公司很多都會搞發糖果活動,一般都能吸引幾萬粉絲,這就來了一個需求,給人家發糖果。主流的geth,parity,甚至imtoken錢包只能輸入地址一筆筆交易,幾萬筆交易人工根本無法完成...
摘要:安裝命令使用命令安裝完成后,直接輸入即可。函數名函數名用于修改狀態變量的函數的調用,可以簡寫為后面這種。訪問內有使用教程。文件夾中沒有,取而代之的是,內容是個簡單的,功能是修改一個狀態變量的值為然后讀取它。 Truffle ubuntu下安裝truffle truffle安裝的依賴環境有:Nodejs,git ,python2.7(ubuntu自帶)安裝git sudo apt-get...
閱讀 1890·2021-11-24 09:39
閱讀 2535·2021-10-14 09:43
閱讀 3318·2021-10-08 10:10
閱讀 2266·2021-09-22 15:54
閱讀 2340·2019-08-29 17:20
閱讀 1573·2019-08-28 18:14
閱讀 2374·2019-08-26 13:28
閱讀 1111·2019-08-26 12:16