博客
关于我
[区块链笔记11] web3.js实用代码段
阅读量:322 次
发布时间:2019-03-04

本文共 3055 字,大约阅读时间需要 10 分钟。

检查环境web3环境

window.addEventListener('load', function() {   	if (typeof web3 !== 'undefined') {   		web3 = new Web3(web3.currentProvider);		if (web3.currentProvider.isMetaMask == true) {   			//metamask可用		} else {   			//非metamask环境		}	} else {   		//需要安装metamask	}})

检查网络环境

web3.version.getNetwork((err, netId) => {   	switch (netId) {   		case '1': 	//mainnet		break		case '2':	//deprecated morden test network		break		case '3': 	//ropsten test network 		break		case '4': 	//Rinkeby test network		break		default:			console.log('This is an unknown network.');	}});

获取账户信息

//0.20.x版本''	ethereum.enable();	if (typeof web3 !== 'undefined') {   		web3 = new Web3(web3.currentProvider);	} else {   		web3 = new Web3(new Web3.providers.HttpProvider('http:127.0.0.1:7545'));		console.log('web3 local provider:' + web3);	}	var accounts = web3.eth.accounts;	console.log('accounts[0]: ' + accounts);	web3.eth.getAccounts(function callback1(err1, result) {   		web3.eth.getBalance(result[0], function callback2(err2, value) {   			$('#info').html(value);		})	})//1.x.x版本''	ethereum.enable();	if (typeof web3 !== 'undefined') {   		web3 = new Web3(web3.currentProvider);	} else {   		web3 = new Web3(new Web3.providers.HttpProvider('http:127.0.0.1:7545'));		console.log('web3 local provider:' + web3);	}	web3.eth.getAccounts()		.then((res) => web3.eth.getBalance(res[0]))		.then((value) => $('#info').html(value));

部署合约

var infoContract  = web3.eth.contract(ABI);var info = infoContract.at("address");//这部分代码可以通过remix获取infoContract.new({   	from: mySenderAddress,	data:bytecode,	gas:gasEstimate});

调用合约

info.getInfo(function(err, result) {   })info.setInfo(name, age, function(err, result) {   	})

发送交易

//检查钱包web3.eth.getAccounts(function(err, accounts) {   	//检查accounts内容})//自动指定gasvar message = {   from: fromAccount, to:toAccount, value:web3.toWei(amount, 'ether'),				gas:gas, gasPrice:gasPrice};//使用默认账号web3.eth.defaultAccount = fromAccount;var message = {   to:toAccount, value:web3.toWei(amount, 'ether')};web3.eth.sendTransaction(message, (err, res) => {   	var output = "";	if (!err) {   		output += res;	} else {   		output = "Error";	}	document.getElementById('transactionResponse').innerHTML = "Transaction response " + output + "
"});

监听事件

合约中设置事件 event EventName(uint param);

合约中触发事件 emit EventName(10);

pragma solidity ^0.4.23;contract InfoContract {       string name;    uint age;        event doneEvent(string name, uint age);        function setInfo(string _name, uint _age) public {           name = _name;        age = _age;        emit doneEvent(name, age);    }        function getInfo() public view returns (string, uint) {           return (name, age);    }}
var infoEvent = info.doneEvent();infoEvent.watch(function(error, result) {   	if (!error) {   		//$('#loader').hide();		$('#info').html(result.args.name + '(' + result.args.age + ' years old)');	} else {   		//$('#loader').hide();		$('#info').hmtl('Error:' + error);	}})

最后这个监听事件的地方出了一点问题,就是var infoEvent = info.doneEvent();这行代码中,js的console里说donEvent不是一个函数。搞了半天都没搞好

后来从谷歌换成了火狐就好了。

转载地址:http://yknh.baihongyu.com/

你可能感兴趣的文章
机器学习是什么
查看>>
《小王子》里一些后知后觉的道理
查看>>
《自私的基因》总结
查看>>
《山海经》总结
查看>>
《血酬定律》总结
查看>>
《非暴力沟通》总结
查看>>
《你当像鸟飞往你的山》总结
查看>>
MySQL开启profiling分析SQL
查看>>
HTTP报文头加上Vary让CDN缓存不同版本
查看>>
《哲学家们都干了些什么》总结
查看>>
《我是猫》总结
查看>>
《黄金时代》总结
查看>>
《抗糖化书》总结
查看>>
apache虚拟主机配置
查看>>
光盘作为yum源
查看>>
jquery实现点击文字后变成文本框且可修改
查看>>
PHP 正则表达式资料
查看>>
php扩展编译方法
查看>>
PHP官方网站及PHP手册
查看>>
递归转义多维数组
查看>>