web.js 使用教程第二篇(version:1.3.5)- 合约交互,发送ETH,发送ERC20代币

这篇文章主要介绍了web.js 使用教程第二篇(version:1.3.5)- 合约交互,发送ETH,发送ERC20代币 ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。

https://www.interchains.cc/21544.html

web.js 使用教程第二篇(version:1.3.5)- 合约交互,发送ETH,发送ERC20代币是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,web.js 使用教程第二篇(version:1.3.5)- 合约交互,发送ETH,发送ERC20代币学习起来其实是很简单的,

不多的几个较为抽象的概念也很容易理解,之所以很多人感觉web.js 使用教程第二篇(version:1.3.5)- 合约交互,发送ETH,发送ERC20代币比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难

web.js 使用教程第二篇(version:1.3.5)- 合约交互,发送ETH,发送ERC20代币

  • Web3.js
  • Web3j
  • web3js
  • DApp

vue项目中使用web3.js 学会如何用最新的web3.js版本

web3.js API参考文档:API文档

在web3.js 大于1.0的版本中,也就是目前的通过metamask获取web对象的方法

构建web3对象

//在和以太坊eth兼容的浏览器中使用 web3.js 时,当前环境的原生 provider 会被浏览器设置   //例如安装了MetaMask,它在浏览器中注入了window.ethereum下的提供者对象,我们就可以通过window.ethereum来初始化web3对象   var web3Provider;   if (window.ethereum) {     web3Provider = window.ethereum;     try {       // 请求用户授权       await window.ethereum.enable();     } catch (error) {       //用户不授权时,这里处理异常情况,同时可以设置重试等机制       console.log(error)     }   } else if (window.web3) {// 老版 MetaMask Legacy dapp browsers...     web3Provider = window.web3.currentProvider;   } else {     // 这里处理连接在不支持dapp的地方打开的情况     web3Provider = new Web3.providers.HttpProvider('https://eth-testnet.tokenlon.im');     console.log("Non-Ethereum browser detected. You should consider trying MetaMask!")      //这种情况下表示用户在不支持dapp的浏览器打开,无法初始化web3      //这里一般的处理逻辑是:使用第一篇中的那种自己初始化,获得区块上的基础数据,但是没法获取用户的账户信息     //或者直接提示错误,不进行任何处理   }   this.web3 = new Web3(web3Provider);

初始化后就可以通过web3对象进行相关操作

基础

获取账户地址

console.log("获取账户地址Coinbase",  this.web3.eth.getCoinbase());

获取metamask中连接的所有账户

console.log(this.web3.eth.getAccounts());

获取网络ID,用来区分在测试网还是正式网

console.log("获取链 ID",this.web3.eth.net.getId()) console.log("ChainId获取链 ID",this.web3.eth.getChainId())this.web3.eth.net.getId((err, netID) => {     // Main Network: 1   表示主网     // Ropsten Test Network: 3  //测试网Ropsten     // Kovan Test Network: 42  //测试网Kovan     // Rinkeby Test Network: 4  //测试网Rinkeby    console.log(netID)});

查询当前区块高度

console.log("查询当前区块高度", this.web3.eth.getBlockNumber()) this.web3.eth.getBlockNumber().then(console.log);

查询某个地址的余额,单位是wei

this.web3.eth.getBalance("0xFedC0F66dDba0a7EE51F47b894Db35b222b0EF42").then(console.log);

获取当前metamask账户地址的eth余额

this.web3.eth.getCoinbase((err, coinbase) =>{      this.web3.eth.getBalance(coinbase).then(console.log); })

通过hash查询交易

console.log("查询交易",this.web3.eth.getTransaction('0x0f77813b2f252b0b189824bcac09d19d0d8e0a3ae506dfbb0a90906d115d4d2c'))

查询交易Receipt,一般通过这里的status来判断交易是否成功

console.log("查询交易receipt",this.web3.eth.getTransactionReceipt('0x0f77813b2f252b0b189824bcac09d19d0d8e0a3ae506dfbb0a90906d115d4d2c'))

发送ETH相关

发送交易ETH 说明:from是你metamask里的账户地址

//发送交易https://learnblockchain.cn/docs/web3.js/web3-eth.html#sendtransaction this.web3.eth.sendTransaction({   from:'0xFedC0F66dDba0a7EE51F47b894Db35b222b0EF42',//如果from为空,默认取this.web3.eth.defaultAccount   to:'0x96B4250b8F769Ed413BFB1bb38c5d28C54f81618',   value:10000000000000000, //发送的金额,这里是0.01 ether   gas: 21000 //一个固定值,可选 })

发送一笔eth转账(使用回调)

this.web3.eth.sendTransaction({   from:'0xFedC0F66dDba0a7EE51F47b894Db35b222b0EF42',   to:'0x96B4250b8F769Ed413BFB1bb38c5d28C54f81618',   value:10000000000000000,   gas: 21000 //一个固定值 }, function(error, hash){   if (error){     console.log("发送交易失败", error)   }else {     console.log("发送交易成功,hash:", hash)   } });

发送一笔eth转账(使用 promise)

this.web3.eth.sendTransaction({   from:'0xFedC0F66dDba0a7EE51F47b894Db35b222b0EF42',   to:'0x96B4250b8F769Ed413BFB1bb38c5d28C54f81618',   value:10000000000000000 }).then(function (receipt) {   //待区块确认后会回调,通过receipt判断交易是否成功   console.log(receipt)   console.log("交易状态:", receipt.status) });

使用事件发生器

this.web3.eth.sendTransaction({   from:'0xFedC0F66dDba0a7EE51F47b894Db35b222b0EF42',   to:'0x96B4250b8F769Ed413BFB1bb38c5d28C54f81618',   value: '10000000000000000' }).on('transactionHash', function(hash){   console.log("发送成功,获取交易hash:",hash) }).on('receipt', function(receipt){   console.log("链上结果返回,返回数据:",receipt) }).on('confirmation', function(confirmationNumber, receipt){   console.log("链上confirmation结果返回,确认数:",confirmationNumber)   console.log("链上confirmation结果返回,返回数据:",receipt) }).on('error', console.error); // 如果是 out of gas 错误, 第二个参数为交易收据

ERC20相关

获取erc20代币余额 导入的ABI文件,这个就是区块浏览器https://kovan.etherscan.io/address/0x78616d23e97967ee072f21e82864f55826f674bb#code里的Contract ABI的内容 web.js 使用教程第二篇(version:1.3.5)- 合约交互,发送ETH,发送ERC20代币

新建一个WZGLTokenABI.json,里面的内容就是Contract ABI

获取erc20代币余额

//导入erc20代币合约的ABI文件 import WZGLTokenABI from '../ABI/WZGLTokenABI.json'  //发送代币的地址 var from = "0xFedC0F66dDba0a7EE51F47b894Db35b222b0EF42"; //接收代币的地址 var to = "0x96B4250b8F769Ed413BFB1bb38c5d28C54f81618"; //erc20代币合约地址: 我自己在kovan发行的一个代币0x78616D23E97967eE072f21e82864F55826F674Bb var contractAddress = "0x78616D23E97967eE072f21e82864F55826F674Bb";  //WZGLTokenABI在前面已经导入 console.log(WZGLTokenABI) var WZGLToken = new this.web3.eth.Contract(WZGLTokenABI, contractAddress,{   from: '0xFedC0F66dDba0a7EE51F47b894Db35b222b0EF42' }); //获取代币余额 WZGLToken.methods.balanceOf(from).call({   from: from }, function call(error, result){   if (!error) {     console.log("balanceOf", result)   } else {     console.log(error)   } });

发送erc20代币

//发送代币的地址 var from = "0xFedC0F66dDba0a7EE51F47b894Db35b222b0EF42"; //接收代币的地址 var to = "0x96B4250b8F769Ed413BFB1bb38c5d28C54f81618"; //erc20代币合约地址: 我自己在kovan发行的一个代币0x78616D23E97967eE072f21e82864F55826F674Bb var contractAddress = "0x78616D23E97967eE072f21e82864F55826F674Bb";  //WZGLTokenABI在前面已经导入 console.log(WZGLTokenABI) var WZGLToken = new this.web3.eth.Contract(WZGLTokenABI, contractAddress,{   from: from }); //发送一个代币 WZGLToken.methods.transfer(to, '1000000000000000000').send({   from: from }, function(error, transactionHash){   if (!error) {     console.log("交易hash:", transactionHash)   } else {     console.log(error)   } }).then(function (receipt) {//监听后续的交易情况   console.log(receipt)   console.log("交易状态:", receipt.status) });

和其他的Dapp合约交互的逻辑和这个erc20转账是类似的

通过ABI和合约地址参数化合约对象,然后通过合约对象进行合约调用

var myContract = new web3.eth.Contract(abi, 合约地址); //toPay是合约里的一个方法 myContract.methods.toPay().send({from: '0x...'});

具体的可以参考文档:https://learnblockchain.cn/docs/web3.js/web3-eth-contract.html#methods-mymethod-send

部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/21544.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 ! QQ3039046426
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » web.js 使用教程第二篇(version:1.3.5)- 合约交互,发送ETH,发送ERC20代币

提供最优质的资源集合

立即查看 了解详情