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

資訊專欄INFORMATION COLUMN

web3公測版本教程(二)-基礎(chǔ)異步語法,交易,簽名交易,ganache-cli

Martin91 / 2824人閱讀

摘要:可以解鎖,也可以將交易代碼寫函數(shù)內(nèi)。簽名交易同理封裝一個(gè)異步函數(shù),實(shí)際上簽名交易分為兩個(gè)步驟簽名一個(gè)交易發(fā)送這個(gè)簽名的交易到區(qū)塊鏈。

一.開發(fā)環(huán)境安裝及其搭建

1.安裝node 最好v8的可以使用ES6語法
2.安裝ganache
ganache介紹:雖說真實(shí)發(fā)布必須要使用前文說到的三種方法geth,parity,或其它服務(wù)商,但是測試開發(fā)環(huán)境下,有一款本地基于內(nèi)存的錢包,不需要等待確認(rèn)交易,根據(jù)操作實(shí)時(shí)出塊,及其方便,它就是ganache-cli,納尼?你沒聽過它,好吧它的前身就是大名鼎鼎的testrpc,簡直不能太好用呀。

安裝命令: npm i ganache-cli -g 
執(zhí)行命令: ganache-cli

初始狀態(tài)說明:創(chuàng)建10個(gè)以太坊賬戶,公鑰私鑰上下對應(yīng),默認(rèn)每個(gè)賬戶100ETH,http端口為8545。(如果有其它需求可以閱讀官方githug: https://github.com/trufflesui...)

二.基本實(shí)例 1.創(chuàng)建一個(gè)app.js文件,引用web3,設(shè)置http接口提供者(沒錯(cuò)就是前面ganche-cli開啟的接口)
var Web3 = require(‘web3’);
var web3 = new Web3(new Web3.providers.HttpProvider(“https://localhost:8545”));
說明:好多教程會這么寫,不能說不對,但有個(gè)坑。
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而不是咱們設(shè)置的8545,尤其是metamask瀏覽器打開自動開啟。

2.測試基礎(chǔ)語法打印區(qū)塊高度

老版本命令:

console.log(web3.eth.getBlockNumber());

新版本命令:

web3.eth.getBlockNumber().then(console.log);
說明: web3 v1.0大量使用了ES6的語法,不熟悉ES6前端和node后臺有必要盡快補(bǔ)習(xí)一下,1.0版方法都使用異步,并且實(shí)現(xiàn)了promise語法,then常規(guī)使用是放入一個(gè)函數(shù)第一個(gè)參數(shù)為成功返回值,第二個(gè)參數(shù)為失敗返回值,將console.log作為函數(shù),傳入成功的值將直接完成打印。
4.創(chuàng)建一個(gè)賬戶

命令:web3.eth.personal.newAccount(‘!@superpassword").then(console.log);

5.簡單交易

先在封裝兩個(gè)異步函數(shù),方便使用也避免進(jìn)入回調(diào)地獄,要優(yōu)雅寫代碼

發(fā)起交易函數(shù)
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數(shù)量函數(shù)
async function findEth(publicKey){
    var ethNum;
    await web3.eth.getBalance(publicKey).then(function(res){
        ethNum = web3.utils.fromWei(res, "ether");
    });
    return ethNum;
}
主程序函數(shù)直接執(zhí)行
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();
擴(kuò)展:由于ganache-cli的自帶賬號為已經(jīng)解鎖賬戶,如果自己創(chuàng)建的賬戶還需要先解鎖,然后才可以用這種方法交易,解鎖方法如下:
web3.eth.personal.unlockAccount(myPublicKey,"password",600)
.then(function(res){

})
說明:參數(shù)依次是:公鑰、密碼、解鎖時(shí)間以秒為單位,600秒內(nèi)不需要解鎖,默認(rèn)為300秒。可以await解鎖,也可以將交易代碼寫then函數(shù)內(nèi)。
6.簽名交易

同理:封裝一個(gè)異步函數(shù),實(shí)際上簽名交易分為兩個(gè)步驟1.簽名一個(gè)交易2.發(fā)送這個(gè)簽名的交易到區(qū)塊鏈。

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參數(shù)依次為

json對象
to:(可選)接受方公鑰,如果是發(fā)布合約可以為空
data:(可選)調(diào)用智能合約需要的數(shù)據(jù),也可以是空
value:(可選)eth數(shù)量以wei為單位
gas:(可選)gas數(shù)量最近都是21000,多了浪費(fèi)少了完不成
gasPrice:gas價(jià)格有g(shù)as報(bào)價(jià)與成功率網(wǎng)站,正式鏈上可以參考給下

私鑰

回調(diào)將返回有簽名信息的對象

使用web3.eth.sendSignedTransaction將交易對象下的16進(jìn)制編碼過的交易碼rawTransaction發(fā)送
坑點(diǎn):復(fù)制私鑰一定要手動在前邊加上0x,ganache是沒有給你加的

坑點(diǎn)1:用ws回報(bào)錯(cuò)
坑點(diǎn)2: 前文所說的要開啟person等api的使用

工具地址:
1.web3官網(wǎng)官方文檔
2.ganache-cli github地址

常見錯(cuò)誤:Contract has not been deployed to detected network
小狐貍(metamask)干擾,小狐貍設(shè)置了全局web3變量,搞之前關(guān)閉小狐貍

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23996.html

相關(guān)文章

  • web3公測版本教程(三)-不用自己同步以太坊節(jié)點(diǎn),直接發(fā)起簽名交易

    摘要:最后毅然決然的選擇自己同步節(jié)點(diǎn)的苦逼之路。三用連接發(fā)起智能合約交易要發(fā)起交易首先要解決的就是問題一,不可以用。自己同步節(jié)點(diǎn)就可以先解鎖在簽名交易,然后發(fā)送交易給其他節(jié)點(diǎn)。 一.前言 前文提到目前有一些公司提供公共的以太坊對外服務(wù),就是以你可以調(diào)用他的web3接口,之前一直被兩個(gè)問題困擾,一個(gè)是覺得別人的節(jié)點(diǎn)不安全,還有初步嘗試后發(fā)現(xiàn)Infura節(jié)點(diǎn)沒有開放賬戶相關(guān)的方法。沒法使用web...

    The question 評論0 收藏0
  • web3公測版本教程(一)-ETH公有鏈節(jié)點(diǎn)同步

    摘要:將返回進(jìn)程碼查看實(shí)時(shí)查看日志關(guān)閉殺死進(jìn)程同步節(jié)點(diǎn)結(jié)論目前來說和都是可以同步成功節(jié)點(diǎn)完全可以放在國外,同步速度會很快,使用連接執(zhí)行腳本就好有特殊需求國內(nèi)阿里云也可以同步成功。 ETH公有鏈節(jié)點(diǎn)同步 最近區(qū)塊鏈公司很多都會搞發(fā)糖果活動,一般都能吸引幾萬粉絲,這就來了一個(gè)需求,給人家發(fā)糖果。主流的geth,parity,甚至imtoken錢包只能輸入地址一筆筆交易,幾萬筆交易人工根本無法完成...

    flybywind 評論0 收藏0
  • truffle安裝以及使用示例

    摘要:安裝命令使用命令安裝完成后,直接輸入即可。函數(shù)名函數(shù)名用于修改狀態(tài)變量的函數(shù)的調(diào)用,可以簡寫為后面這種。訪問內(nèi)有使用教程。文件夾中沒有,取而代之的是,內(nèi)容是個(gè)簡單的,功能是修改一個(gè)狀態(tài)變量的值為然后讀取它。 Truffle ubuntu下安裝truffle truffle安裝的依賴環(huán)境有:Nodejs,git ,python2.7(ubuntu自帶)安裝git sudo apt-get...

    RiverLi 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<