赞
踩
--需要先安装web3.js库,命令行执行
npm install web3
1. 账户
- import Web3 from "web3";
- import myContractJSON from "../contract/contract.json";//从solidity复制的合约json文件
-
- //创建web3示例,我这里使用goerli测试地址
- const web3 = new Web3(Web3.givenProvider || "wss://goerli.infura.io/ws/v3/c0b3b16253fb4528962978ae6b6ed58b");
-
- // 1. 链接metamask账户,返回结果是promise对象,对象里有账户信息,该方法会启动Chrome的metamask插件,并链接
- const linkCount = async() =>{
- const account = await web3.eth.requestAccounts()
- console.log(account);
- }
-
- /*
- 2. 创建账号web3.eth.accounts.create(), 参数是密码,不填参数默认生成密码
- */
- const account = web3.eth.accounts.create("123");
-
-
- /*
- 3. 获取余额web3.eth.getBalance(), 参数是账户的地址,返回的结果是promise
- */
- web3.eth.getBalance(account.address).then((money) => {
- console.log(money);
- });
-
- /*
- 4. 换算wei: Web3.utils.toWei(), 参数是字符串的数字,参数以以太为单位,返回结果换算成wei
- wei换算其他单位: Web3.utils.fromWei(), 参数有两个,第一个是字符串的wei单位,第二个是要换算成的单位
- */
- const num1 = web3.utils.toWei("0.3");
- const num2 = web3.utils.fromWei("3000000000000000000", "ether");
- console.log(num1);
- console.log(num2);
-
-
2. 转账
--转账需要安装ethereumjs-tx,用来签名
npm install ethereumjs-tx
- const send = async () => {
- // 1.转账需要的参数
- let params = {
- from: '',//谁要转账
- to: '',//要转给谁
- nonce: '',//转账的次数,获得方式:await web3.eth.getTransactionCount(account.address)
- gasPrice: '',//燃料费的价格,获得方式:await web3.eth.getGasPrice()
- value: web3.utils.toWei(info.money.toString()),//转多少以太币
- data: "0x0000",//写固定
- };
- // 2.生成serializedTx,做交易签名
- // 转化私钥
- const privateKey = Buffer(privateKey.slice(2), "hex");//privateKey是私钥
- params.gas = await web3.eth.estimateGas(params);//得到消耗的燃料
- info.gas = params.gas
- const tx = new Tx(params);//new出签名实例
- tx.sign(privateKey);//签名
- const serializedTx = "0x" + tx.serialize().toString("hex"); //序列化
-
- // 3.开始转账
- const trans = web3.eth.sendSignedTransaction(serializedTx);//转账,返回结果是个对象
- /*
- 用on方法监听是否交易完毕
- "transactionHash",交易完毕触发
- "receipt",收到触发
- "confirmation"其他节点确认
- */
- trans.on("transactionHash", (txid) => {
- console.log('交易id:'+txid);
- // reGetEth();
- });
- };
3. 智能合约
- import myContractJSON from "../contract/contract.json";//从solidity复制的合约json文件
-
- /*
- 用new web3.eth.Contract()实例化abi,参数有两个,第一个是合约abi,第二个合约地址
- 返回结果是合约的实例对象,可以调用合约上的属性
- */
- const myContractAbi = new web3.eth.Contract(myContractJSON.abi,myContractJSON.address);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。