Blockchain | web3.js 合约交互模板

Blockchain | web3.js 合约交互模板

最近发现ethers.js没有想象的那么好用了。。。
就换成了web3.js。
环境是node和web3.js v4。
这玩意儿还是得看文档,很麻烦,嗐,方法又多又烂,难用。

const Web3 = require('web3');
const fs = require('fs');

const rpcURL = 'http://47.98.124.6:8545';
//const addr = '0xda8e0A6Becd46E3C1d25BEbcc0E8f6723Cf2F924';
const web3 = new Web3.Web3(rpcURL);    // 链接网络节点

const privateKey = '0x957c03cef7400defc7585d5dd81c48455557aa29c12c627ad0fd17d73effe696';
web3.eth.accounts.wallet.add(privateKey);
const wallet = web3.eth.accounts.wallet[0];
console.log(wallet)
var money = 0;
web3.eth.getBalance(wallet.address).then((res)=>{console.log(res); money=res});



let deploy_contract_addr = "0xDaa6907f63956f0a00D161A6A9a45422DC855166";
let deploy_token = "v4.local.viQJVcRdcskiuQlHbQsQrrIhVGpfHnAOuOZd9eDRagKPfrP8C3HVb_w2-hl0kiAT1vEzsX3wdw21Y3iiXcbg1vlRRsAbIOFOfU-9v8STWHdEOu0g6YK63S-DeK5XXX2THYo6MaAnbx8KNihIGFp8L8rnHXuzrT1_xpPxZVhZmXL_aA.R3JlZXRlcg"

// const transaction = {
//   from: wallet.address,
//   to: deploy_contract_addr,
//   value: '10000000000000000'
// }
// web3.eth.sendTransaction(transaction).then(console.log);   // 转账至部署合约的账户



const contract_addr = "0x1F8A0F51706fA67D31eF9DCe855A4FaD23cB92A6";

let jsonabi = JSON.parse(fs.readFileSync('Greeter.json', 'utf8')).abi
var myContract = new web3.eth.Contract(jsonabi, contract_addr, {
    from: wallet.address
});

let h_jsonabi = JSON.parse(fs.readFileSync('Hack.json', 'utf8')).abi
let h_bytecode= JSON.parse(fs.readFileSync('Hack.json', 'utf8')).bytecode
var h_myContract = new web3.eth.Contract(h_jsonabi);

// 调用hack合约函数
const run = async function(){
	// 读取合约存储
	var num = await web3.eth.getStorageAt(contract_addr, 1);
	console.log(num);
	
	var result = await myContract.methods.isSolved().call(
		{from: wallet.address}
	);
	console.log(result);

	// 部署合约
	var h_contract = await h_myContract.deploy({
			data: h_bytecode,
		}).send({
					from: wallet.address,
					gas: 1000000,
		            gasPrice: 10000000000,
		            value: 1200000000000000000,   // 打钱
		        });
	console.log('合约部署完毕');
	var ret = await h_contract.methods.exp(contract_addr).send(
			{
				from: wallet.address,
				gas: 1000000,
				gasPrice: 10000000000,
	        }
		);
	console.log(ret);
	result = await myContract.methods.isSolved().call(
		{from: wallet.address}
	);
	console.log(result);
}

run();

另外附上eth单位换算:
image
也可以用web3.js的接口进行转换:

web3.utils.toWei('0.5', 'ether');
web3.utils.toWei('50000000000000000', 'ether');
web3.utils.toBN(value);  // 用于大整数计算
posted @ 2023-08-20 15:02  Mz1  阅读(94)  评论(0)    收藏  举报