Skip to content

web3.eth Starter

引入web3js

js
const { Web3 } = require("web3");

var web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:7545"));

这里使用的地址是"HTTP://127.0.0.1:7545",是Ganache的默认地址。

web3.eth

随便敲了几下
js
var eth = web3.eth;

getAccounts

返回节点所控制的账户列表。

js
eth.getAccounts().then(console.log);

getBlockNumber

返回当前区块号。

js
eth.getBlockNumber().then(console.log);

getBalance

返回地址在指定区块的余额。

js
const address = "0x022344806d93a80A347a0CA9C7b13a4F63aee128";

eth.getBalance(address).then(console.log);

getBlock

返回与区块号或区块哈希匹配的区块

js
const blockHashOrBlockNumber = 0;

eth.getBlock(blockHashOrBlockNumber).then(console.log);

getTransaction

返回匹配给定交易哈希的交易对象

js
eth.getTransaction(transactionHash).then(console.log);

部署智能合约

一个节点(providers)控制的账号是有限的

代码
Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Starter {
    uint256 number;

    constructor() {
        number = 0;
    }

    function setNumber(uint256 _number) public {
        number = _number;
    }

    function getNumber() public view returns(uint256) {
        return number;
    }
}
Typescript
import { Web3 } from 'web3';

const web3: Web3 = new Web3(
	new Web3.providers.HttpProvider('http://127.0.0.1:7545')
);

const abi = [{ "inputs": [{ "internalType": "uint256", "name": "_number", "type": "uint256" }], "name": "setNumber", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "getNumber", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }];
const bytecode = '608060405234801561001057600080fd5b5060008081905550610150806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80633fb5c1cb1461003b578063f2c9ecd814610057575b600080fd5b610055600480360381019061005091906100c3565b610075565b005b61005f61007f565b60405161006c91906100ff565b60405180910390f35b8060008190555050565b60008054905090565b600080fd5b6000819050919050565b6100a08161008d565b81146100ab57600080fd5b50565b6000813590506100bd81610097565b92915050565b6000602082840312156100d9576100d8610088565b5b60006100e7848285016100ae565b91505092915050565b6100f98161008d565b82525050565b600060208201905061011460008301846100f0565b9291505056fea264697066735822122010a07a685f1ed8a7a03ab9cad25fcd4a46adb1ea32b8097df2d39d556d0a36ea64736f6c63430008120033';
const MyContract = new web3.eth.Contract(abi);


async function deploy() {
	const providerAccounts = await web3.eth.getAccounts();
	const defaultAccount = providerAccounts[0]
	// console.log(providerAccounts);

	const myContract = MyContract.deploy({
		data: '0x' + bytecode
	});

	const gas = await myContract.estimateGas({
		from: defaultAccount
	});
	console.log(gas);

	try {
		const tx = await myContract.send({
			from: defaultAccount,
			gas: gas.toString(),
			gasPrice: '20000000000'
		});
		console.log(tx.options.address);
	} catch (err) {
		console.log(err);
	}

}

deploy();
One day we will climb the highest mountain, and suvey the smallest point.