日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用web3.js进行开发

發(fā)布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用web3.js进行开发 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考地址:here?and?here

零、在私有鏈上部署合約

// 本文中用到的MetaCoin合約 pragma solidity ^0.4.2;contract MetaCoin {mapping (address => uint) balances;event Transfer(address indexed _from, address indexed _to, uint256 _value);function MetaCoin() {balances[tx.origin] = 10000;}function sendCoin(address receiver, uint amount) returns(bool sufficient) {if (balances[msg.sender] < amount) return false;balances[msg.sender] -= amount;balances[receiver] += amount;Transfer(msg.sender, receiver, amount);return true;}function getBalance(address addr) returns(uint) {return balances[addr];} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

一、新建一個項目

新建一個node.js項目并初始化

$ mkdir web3test && cd web3test $ npm init
  • 1
  • 2

二、導(dǎo)入web3.js

npm install web3 --save
  • 1

三、創(chuàng)建web3對象

var Web3 = require("web3"); //創(chuàng)建web3對象 var web3 = new Web3(); // 連接到以太坊節(jié)點 web3.setProvider(new Web3.providers.HttpProvider("http://localhost:8545"));
  • 1
  • 2
  • 3
  • 4
  • 5

可以測試一下:

var version = web3.version.node; console.log(version); ==> 在app目錄下,終端輸入: prodeMacBook-Pro:web3test pro$ node app.js 輸出: Geth/linoy/v1.6.5-stable-cf87713d/darwin-amd64/go1.8.3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

四、調(diào)用合約

部署合約:?
私有鏈上查看地址,abi可以通過here獲取

var abi = [{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"sendCoin","outputs":[{"name":"sufficient","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"}];var address = "0x6a0a87bd4da65b39a1b27597edb1a5b505a55a0b";var metacoin = web3.eth.contract(abi).at(address);
  • 1
  • 2
  • 3
  • 4
  • 5

調(diào)用合約:

/* 查看賬戶余額 */ var account_one = web3.eth.accounts[0]; var account_one_balance = metacoin.getBalance.call(account_one); console.log("account one balance: ", account_one_balance.toNumber()); ===> 終端查看: prodeMacBook-Pro:web3test pro$ node app.js account one balance: 10000/* 轉(zhuǎn)賬操作 */ var account_one = web3.eth.accounts[0]; var account_two = web3.eth.accounts[1];var txhash = metacoin.sendCoin.sendTransaction(account_two, 100, { from: account_one });var myEvent = metacoin.Transfer(); myEvent.watch(function (err, result) {if (!err) {if (result.transactionHash == txhash) {var account_one_balance = metacoin.getBalance.call(account_one);console.log("account one balance after sendCoin:", account_one_balance.toNumber());}} else {console.log(err);}myEvent.stopWatching(); }); ====> 這里可能會遇到錯誤:Error: authentication needed: password or unlock 原因是賬戶沒有解鎖:在終端,personal.unlockAccount(user1, "123456") 然后再次嘗試可以看到: account one balance: 10000 account one balance after sendCoin: 9900
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

創(chuàng)建賬戶:

var account_three = web3.personal.newAccount("123456"); console.log(account_three);
  • 1
  • 2

五、與web界面交互

1 . 安裝express

查看:here

npm install express --save
  • 1

2 . 導(dǎo)入BigNumber.js

處理大數(shù)字需要使用BigNumber庫

npm install --save bignumber.js ===> var BigNumber = require('bignumber.js');
  • 1
  • 2
  • 3

3 . 調(diào)用合約

a. call

var returnValue = metacoin.getBalance.call(address).toString();
  • 1

b. sendTransaction

var txhash = metacoin.sendCoin.sendTransaction(address_b, trans_value, {from:address_a});
  • 1

4 . 界面

?
?

六、代碼部分

1 . app.js代碼

/* 現(xiàn)連接到geth節(jié)點,并獲取已部署合約的引用 */ var express = require("express"); var app = express(); var server = require("http").createServer(app); var io = require("socket.io")(server); var BigNumber = require('bignumber.js');app.use(express.static("public"));app.get("/", function(req, res){res.sendFile(__dirname + "/index.html"); })// 現(xiàn)連接到geth節(jié)點 var Web3 = require("web3"); web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); /* 部署合約 */ var abi = [{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"sendCoin","outputs":[{"name":"sufficient","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"}];var address = "0x6a0a87bd4da65b39a1b27597edb1a5b505a55a0b";var metacoin = web3.eth.contract(abi).at(address);app.get("/register", function(req, res){//獲取輸入的密碼var password = req.query.password;//創(chuàng)建賬戶var account = web3.personal.newAccount(password);res.send(account);})app.get("/getBalance", function(req, res){var address = req.query.address;//獲取address的余額var returnValue = metacoin.getBalance.call(address).toString();res.send(returnValue);})app.get("/sendcoin", function(req, res){var address_a = req.query.address_a;var address_b = req.query.address_b;var trans_value = req.query.trans_value;//轉(zhuǎn)賬操作var txhash = metacoin.sendCoin.sendTransaction(address_b, trans_value, {from:address_a});res.send(txhash);}) server.listen(8080);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

2 . html代碼

<!DOCTYPE html> <html> <head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>轉(zhuǎn)賬操作</title><link rel="stylesheet" href=""> </head> <body><div><div> <h3>注冊:</h3><br><label for="identity">請輸入密碼:</label><input type="text" id="password" ></input><button type = "submit" onclick="register()">注冊</button><p id = "address_test">地址:</p></div><div> <h3>查詢余額:</h3><br><label for="identity">請輸入地址:</label><input type="text" id="address" ></input><button type = "submit" onclick="getBalance()">查詢余額</button><p id = "address_balance">余額:</p></div> <div><h3>轉(zhuǎn)賬</h3><label for="identity">轉(zhuǎn)出用戶地址</label><input type="text" id="address_a" ></input><br><label for="identity">轉(zhuǎn)入用戶地址</label><input type="text" id="address_b" ></input><br><label for="identity">金額</label><input type="text" id="trans_value" ></input><button type = "submit" onclick="sendcoin()">確定</button><p id = "tx_hash">交易:</p></div></div><script type="text/javascript" src="/sha1.min.js"></script><script type="text/javascript" src="/jquery.min.js"></script><script type="text/javascript" src="/socket.io.min.js"></script><script type="text/javascript" src="/main.js"></script><script type="text/javascript" src="/bignumber.js"></script></body> </html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

3 . main.js代碼

function register() {var password = document.getElementById("password").value;$.get("/register?password=" + password, function(data){if(data == "Error"){$("#address_test").text("An error occured.");}else{$("#address_test").html("地址: " + data);}}); }function getBalance() {var address = document.getElementById("address").value;$.get("/getBalance?address=" + address, function(data){if(data == "Error"){$("#address_balance").text("An error occured.");}else{$("#address_balance").html("余額: " + data);}}); }function sendcoin() {var address_a = document.getElementById("address_a").value;var address_b = document.getElementById("address_b").value;var trans_value = document.getElementById("trans_value").value;var tx_hash = document.getElementById("tx_hash").value;//轉(zhuǎn)賬$.get("/sendcoin?address_a=" + address_a + "&address_b=" + address_b + "&trans_value=" + trans_value, function(data){$("#tx_hash").html("交易: " + data);});}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 http://blog.csdn.net/loy_184548/article/details/79517264

總結(jié)

以上是生活随笔為你收集整理的使用web3.js进行开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一级色片 | 欧美一级片免费看 | 偷拍欧美亚洲 | 中文成人无字幕乱码精品区 | 亚洲爱爱网站 | 日日草草| 日韩精品一区二区三区久久 | 亚洲AV无码成人精品区麻豆 | 国产21区 | 日韩成人精品在线观看 | 91无限观看 | 欧美成人手机在线视频 | 久久久久久久久蜜桃 | 一二三在线视频 | 波多野结衣一区二区在线 | 久久人精品 | 国产尤物视频在线观看 | 中文在线不卡 | 午夜影院在线观看视频 | 在线观看视频日韩 | 激情偷乱人成视频在线观看 | 国产主播毛片 | 男女日批 | 国产黄视频在线观看 | 日韩色黄大片 | 欧美极品视频在线观看 | 精品在线播放 | 91久久精品一区二区别 | 亚洲天堂资源在线 | 特黄一区二区 | 久久四色 | 夜夜视频 | 日本高清免费视频 | 中文在线免费视频 | 国产精品天堂 | 国内露脸中年夫妇交换 | chinese麻豆gay勾外卖 | 麻豆视频一区二区 | 日韩精品电影网 | 邻居少妇张开腿让我爽了在线观看 | 自拍偷拍第 | 亚洲a黄| 中文字幕乱码无码人妻系列蜜桃 | 污的网站 | 国产精品一区二区网站 | 国产成人无码专区 | 欧美11一13sex性hd | 91久久精品日日躁夜夜躁欧美 | 中文字幕97| 欧美综合社区 | 视频福利一区 | 免费无码不卡视频在线观看 | 午夜久久久精品 | 久久伊人亚洲 | 欧美日韩在线视频 | 亚洲激情偷拍 | 黑人vs日本人ⅹxxxhd | 99国产精品人妻噜啊噜 | 亚洲吧 | 真人一及毛片 | 夜夜导航| 精品日本一区二区三区在线观看 | 各种含道具高h调教1v1男男 | 97视频在线观看免费高清完整版在线观看 | 玩偶姐姐在线看 | 一区免费| 中文字幕av专区 | 综合五月天 | 美女热逼| 星空大象在线观看免费播放 | 色肉色伦交av色肉色伦 | 澳门久久久 | 特黄av| 免费网站观看www在线观 | 欧美怡红院视频一区二区三区 | 怡红院av亚洲一区二区三区h | 免费一区二区三区视频在线 | 日本wwww视频 | 中文字幕乱码人妻一区二区三区 | 国产精品自拍网站 | 国产电影一区在线观看 | 动漫美女揉胸 | 中文字幕国产剧情 | 成年在线视频 | 91av小视频| 天干夜天干天天天爽视频 | 欧美激情综合 | 99在线视频观看 | 自拍视频一区 | 啪啪免费视频网站 | 色婷婷久久综合中文久久蜜桃av | 欧美 日韩 国产 中文 | 成人免费自拍视频 | 丁香九月婷婷 | 午夜神马福利 | 欧美不卡在线 | 在线精品视频一区 | 成人h在线观看 | 99在线免费观看视频 |