请选择 进入手机版 | 继续访问电脑版
开启辅助访问
链路首页链路财经目前收录 币种 : 4908 交易所 : 310钱包 : 17 24H 交易量 : $43,403,137,051 总市值 : $245,388,183,835
2019
03/14
08:00
分享
评论
  • web3.js是一个库集合,你可以使用HTTP或IPC连接本地或远程以太它节点进行交互。 web3的JavaScript库能够与以太坊区块链交互。 它可以检索用户帐户,发送交易,与智能合约交互等。

    Version : 1.0.0-beta.36



    Web3.js API类型

    1. eth:Etherum区块链相关方法;

    2. net:节点的网络状态;

    3. personal:帐户功能和发送;

    4. db:获取/放置本地LevelDB;

    5. shh:使用Whisper的P2P消息传递;


    安装Web3.js

    node


    npm install web3


    <script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.0.0-beta.34/dist/web3.js">
    <script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.0.0-beta.34/dist/web3.min.js">


    实例化web3

    // Modern dapp browsers...
    if (window.ethereum) {
      App.web3Provider = window.ethereum;
      try {
        // Request account access
        await window.ethereum.enable();
      } catch (error) {
        // User denied account access...
        console.error("User denied account access")
      }
    }
    // Legacy dapp browsers...
    else if (window.web3) {
      App.web3Provider = window.web3.currentProvider;
    }
    // If no injected web3 instance is detected, fall back to Ganache
    else {
      App.web3Provider = new Web3.providers.HttpProvider('http://localhost:7545');
    }
    web3 = new Web3(App.web3Provider);


    首先,我们检查是否使用的dapp浏览器或更新版本的MetaMask,将以太坊提供程序注入到window object中。 如果是这样,我们使用它来创建我们的web3 object,但我们还需要使用ethereum.enable()显式请求访问帐户。


    如果以ethereum object不存在,我们将检查注入的web3实例。 如果它存在,则表示我们正在使用较旧的dapp浏览器(如Mist或较旧版本的MetaMask)。 如果是这样,我们可以获取到它的提供者并使用它来创建我们的web3 object。


    如果没有注入web3实例,我们将根据本地提供程序创建web3对象。 (这种后备适用于开发环境,但不安全且不适合生产环境。)


    Web3.js的例子


    PS:不推荐使用web3.version.getNode。


    web3.eth.getNodeInfo(function(error, result){
          if(error){
             console.log( “error” ,error);
          }
          else{
             console.log( “result”,result );  //Ganaache - "EthereumJS TestRPC/v2.1.0/ethereum-js"
          }
     });


    余额

    检查用户的余额

    1. web3.eth.getAccounts:从以太坊节点获取帐户,不推荐使用web3.eth.accounts。

    2. web3.eth.getBalance:获取帐户的余额。

    3. web3.utils.fromWei:将wei转换为ether,不推荐使用web3.fromWei。

    web3.eth.getAccounts(function(error, accounts) {
      if(error) {
        console.log(error);
      }

      web3.eth.getBalance(accounts[0]).then(function(result){
       console.log"Balance : " ,web3.utils.fromWei(result, 'ether'));
      });
     });


    nonce:


    每个以太坊帐户都有一个名为nonce的字段,用于跟踪帐户已执行的事务总数。 对于每个新事务,Nonce都会递增,这允许网络知道需要执行事务的顺序。 Nonce也用于重放保护。


    txnCount = web3.eth.getTransactionCount(web3.eth.accounts[0])


    转移

    将以太网从“A”转移到“B”


    txnObject(事务对象)是web3.eth.sendTransaction的第一个参数。 txnObject由JSON组成。


    from:String  - 发送帐户的地址。


    to:String  - 目标钱包地址。


    value:Number | String | BigNumber  - (可选)您希望发送到目标地址的以太网的数量。


    gas:Number | String | BigNumber  - (可选,默认:待定)用于交易的gas量(未使用的gas将被退还)。


    gasPrice:Number | String | BigNumber  - (可选,默认:待定)wei中此交易的gas价格,默认为平均网络gas价格。


    data:String  - (可选)包含消息的关联数据的字节字符串,或者在合同创建事务的情况下,初始化代码。


    nonce:Number  - (可选)nonce的整数。 这允许覆盖使用相同nonce的自己的挂起事务。

    var txnObject = {
            "from":_from,
            "to": _to,
            "value": web3.utils.toWei(_Amount,'ether'),
            // "gas": 21000,         (optional)
            // "gasPrice": 4500000,  (optional)
            // "data": 'For testing' (optional)
            // "nonce": 10           (optional)
         }

      web3.eth.sendTransaction(txnObject, function(error, result){
         if(error){
           console.log( "Transaction error" ,error);
         }
         else{
           var txn_hash = result; //Get transaction hash
         }
      });


    实践练习

    我使用上面的方法制作了一个网页。


    • 获取以太坊节点信息

    • 获得用户的余额

    • 转移以太币



    您将使用MetaMask或Ganache。 我建议你使用Ganache,这是一个用于以太坊开发的个人区块链,可用于部署合同,开发应用程序和运行测试。 如果您还没有安装,请下载Ganache并双击该图标安装应用程序。 这将生成在端口7545上本地运行的区块链同时将端口更改为8545。



    完整的源码地址: https://github.com/kennethhutw/Web3JsPractice


    作者:Hu Kenneth


    扫描下放二维码添加我,拉您进入技术交流群



主题帖 143 关注 0 粉丝 0
情感指数

链路大数据分析置信度 21.22 %

TA的主题帖
主题相关
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表