Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 视频教程 | 打赏(Donations) | About
知乎专栏多维度架构微信号 netkiller-ebook | QQ群:128659835 请注明“读者”

第 16 章 web3.js - 1.0.0

目录

16.1. 开发环境
16.1.1. Ropsten 测试网
16.2. truffle-contract
16.3. 连接到以太坊客户端
16.3.1. http 方式
16.3.2. WebSocket 方式
16.3.3. IPC 方式
16.4. web3
16.4.1. version 显示web3版本号
16.5. web3.eth
16.5.1. 查看账号列表
16.5.2. 查询矿工账号
16.5.3. 获得余额
16.5.4. web3.eth.sendTransaction()
16.5.5. web3.eth.sendSignedTransaction() 私钥签名转账
16.5.5.1. 例子1
16.5.5.2. 例子2
16.5.6. web3.eth.getBlock() 获取区块
16.6. 账号管理
16.6.1. web3.eth.personal.unlockAccount()
16.7. 智能合约
16.7.1. 部署合约
16.7.2. 使用最佳手续费创建合约
16.7.3. 调用合约
16.7.4. event
16.8.
16.8.1.
16.8.2. 订阅 newBlockHeaders
16.8.3. 订阅 log
16.8.4. 订阅同步状态
16.9. utils
16.9.1. web3.utils.toWei()
16.9.2. 将 Wei 转换到指定单位
16.10. web3 编译合约
16.10.1. solc.compile
16.11. web3admin
16.12. ABI-encoded
16.13. 实用例子
16.13.1. 数据写入到区块链中
16.13.2. 编译部署智能合约
16.13.3. 部署合约
16.13.4. ERC20 Example
16.14. HD Wallet(Hierarchical Deterministic wallet)
16.14.1. 创建项目
16.14.2. 生成第二个钱包
16.14.3. Mnemonic Code Converter
16.14.4. HD Wallet 例子
16.14.5. 获得钱包地址和私钥
16.14.6. truffle.js 例子
16.14.7. Mnemonic To Seed 加密
16.14.8. 中文助记词
16.14.9. 代币转账
16.15. 从 .ethereum/keystore 文件导入私钥
16.16. Express + web3.js 实现简单网页钱包
16.16.1. 创建项目
16.16.2. 主程序 main.js
16.16.3. ABI 文件 abi/NKC.abi
16.16.4. 页面视图
16.16.4.1. views/account.ejs
16.16.4.2. views/balance.ejs
16.16.4.3. views/done.ejs
16.16.4.4. views/header.ejs
16.16.4.5. views/index.ejs
16.16.4.6. views/showbalance.ejs
16.16.4.7. views/transfer.ejs
16.16.5. 启动 Node 服务

注意本章采用 web3.js v1.0.0 版本,这个版本仍在beta阶段,还没有 release。

你看到网上很多实例,安照例子的步骤操作,发现无法成功,很可能跟版本有关。v1.0.0 与之前的版本还是有很大差异,所以选择版本很重要。因为 v1.0.0 很快就会 release 所以本章不会在用早起版本举例。

16.1. 开发环境

		
npm init
npm install web3 --save
npm install solc
		
		

16.1.1. Ropsten 测试网

			
geth --testnet --syncmode light --cache 1024 --ipcpath /Users/neo/Library/Ethereum/geth.ipc
			
			

Ropsten 测试网上转账的例子

			
fs = require('fs');
var net = require('net');
var Web3 = require('web3');
var web3 = new Web3('/Users/neo/Library/Ethereum/geth.ipc', net);

console.log(web3.version)
const abi = fs.readFileSync('output/TokenERC20.abi', 'utf-8');

const contractAddress = "0x70682386d0dE84B1e549DC3c4305CCB2D261b2a8";
const coinbase = "0xB94054c174995AE2A9E7fcf6c7924635FBa8ECF7";
const toAddress = "0xf56b81a2bcb964D2806071e9Be4289A5559BB0fA";

balanceWei = web3.eth.getBalance(coinbase);
console.log(balanceWei);

const contract = new web3.eth.Contract(JSON.parse(abi), contractAddress, { from: coinbase , gas: 100000});

web3.eth.personal.unlockAccount(coinbase, "netkiller").then(function(result){
	console.log(result)
	contract.methods.balanceOf(coinbase).call().then(console.log).catch(console.error);
	contract.methods.balanceOf(toAddress).call().then(console.log).catch(console.error);
});


contract.methods.transfer(toAddress, 10000).send().then(function(receipt){

	console.log(receipt);

}).catch(console.error);

contract.methods.balanceOf(coinbase).call().then(console.log).catch(console.error);
contract.methods.balanceOf(toAddress).call().then(console.log).catch(console.error);