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

本文共 3248 字,大约阅读时间需要 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版本'<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@0.20.6/dist/web3.min.js"></script>'	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版本'<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.0.0-beta.36/dist/web3.min.js"></script>'	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 + "<br/>"});

监听事件

合约中设置事件 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/

你可能感兴趣的文章
日志切分神器--logrotate
查看>>
C#3.0新增功能08 Lambda 表达式
查看>>
C#开发BIMFACE系列35 服务端API之模型对比6:获取模型构建对比分类树
查看>>
C# 规范建议
查看>>
.NET 5.0正式发布,新功能特性(翻译)
查看>>
重磅推出:AutoProject Studio 自动化项目生成器
查看>>
INotifyPropertyChanged 接口
查看>>
一些有趣的线段树玩法
查看>>
DP做题记录
查看>>
Go语言中的数组与数组切片
查看>>
操作系统启动过程
查看>>
进程管理
查看>>
物理层
查看>>
内建函数
查看>>
C/C++分文件编写
查看>>
80x86指令系统-1-数据传送指令
查看>>
C语言+easyX图形库的推箱子实现
查看>>
结构体内存偏移量
查看>>
应用程序与dll的静态库通信
查看>>
反汇编-流程控制语句-2-循环控制语句分析
查看>>