2022年3月

var raw = function (args) {
  var keys = Object.keys(args);
  keys = keys.sort()
  var newArgs = {};
  keys.forEach(function (key) {
    newArgs[key.toLowerCase()] = args[key];
  });

  var string = '';
  for (var k in newArgs) {
    string += '&' + k + '=' + newArgs[k];
  }
  string = string.substr(1);
  return string;
};

var createNonceStr = function () {
  return Math.random().toString(36).substr(2, 15);
};

var createTimestamp = function () {
  return parseInt(new Date().getTime() / 1000) + '';
};

class EventBus {
  constructor() {
    this._events = [];//存储自定义事件
  }

  /**
   * 注册事件和处理函数
   * @param event
   * @param fn
   */
  on(event, fn) {
    if (Array.isArray(event)) {
      for (let i = 0, l = event.length; i < l; i++) {
        this.on(event[i], fn)
      }
    } else {
      // 存在直接push, 不存在创建为空数组再push
      (this._events[event] || (this._events[event] = [])).push(fn)
    }
  }

  /**
   * 注册事件和处理函数,触发一次后销毁
   * @param event
   * @param fn
   */
  once(event, fn) {
    let _self=this;
    function handler() {
      _self.off(event, handler);
      fn.apply(null,arguments);//emit里面调用时会给on方法传参
    }

    handler.fn = fn;//off里面根据这个判断销毁事件
    this.on(event, handler);
  }

  /**
   * 销毁事件和处理函数
   * @param event
   * @param fn
   */
  off(event, fn) {
    //不传参数表示清空所有
    if (!arguments.length) {
      this._events = [];
    }
    //数组循环清空
    if (Array.isArray(event)) {
      for (let i = 0, l = event.length; i < l; i++) {
        this.off(event[i], fn)
      }
    }
    const cbs = this._events[event];
    if (!cbs) {
      return;
    }
    //不传第二参表示清空某事件所有监听函数
    if (arguments.length == 1) {
      this._events[event] = null
    }
    let cb, i = cbs.length
    while (i--) {
      cb = cbs[i]
      if (cb === fn || cb.fn === fn) { //cb.fn===fn用来移除once注册的事件
        cbs.splice(i, 1)
        break
      }
    }
  }

  /**
   * 触发某事件所有回调并带参数
   * @param event
   */
  emit(event) {
    //once删除事件会导致下面循环过程中this._events内fn前移, 所以此处复制成新数组
    let cbs = [...this._events[event]];
    if (cbs) {
      for (let i = 0, l = cbs.length; i < l; i++) {
        try {
          cbs[i].apply(null,[...arguments].slice(1))
        } catch (e) {
          new Error(e, `event handler for "${event}"`)
        }
      }
    }
  }
}
//测试用例
let eb=new EventBus();
eb.once('event1',params=>console.log(11,params));
eb.on('event1',params=>console.log(22,params));
eb.emit('event1',33)

OKEX 测试网
新增RPC URL:
https://exchaintest.okex.org
链id (ChainID)65
符号:OKT
屏蔽管理器URL :https://www.oklink.com/okexchain-test/

火币HECO主网
新增RPC URL
https://http-mainnet.hecochain.com
链id (ChainID)128
符号:HT
火币HECO测试网

Huobi ECO Chain Testnet
新增RPC URL
https://http-testnet.hecochain.com
链id (ChainID)256

BSC 主网
新增 RPC URL
https://bsc-dataseed1.binance.org/
链id (ChainID):56
符号:BNB

BSC测试网
网络名称:BSC Testnet
新增RPC URL
https://data-seed-prebsc-2-s2.binance.org:8545
ID:97
符号:BNB

URL:https://testnet.bscscan.com
Matic主网
网络名称:Matic Mainnet
新增 URL
https://rpc-mainnet.matic.network
链id (ChainID):137

Matic测试网
网络名称:Matic Testnet
新增 URL
https://rpc-mumbai.matic.today
链 ID
链id (ChainID):80001

xDai测试网
NetWork Name: xDai
PRC URL :https://rpc.xdaichain.com/
ID:100
符号:xDai
URL:https://blockscout.com/poa/xdai

Optimistic Ethereum 测试网
NetWork Name: Optimistic Ethereum
新增 RPC URL: https://mainnet.optimism.io
链 ID(ChainID): 10
符号: ETH
区块浏览器 URL: https://mainnet-l2-explorer.surge.sh

Avalanche 主网
AVA 区块链平台测试网包含三条链:P-Chain,C-Chain 和 X-Chain,其中 C-Chain 采用 AVA Snowman 共识的以太坊虚拟机用例,实现和以太坊兼容。
NetWork Name:Avalanche Mainnet C-Chain
新增 RPC URL:https://api.avax.network/ext/bc/C/rpc
链 ID(ChainID):0xa86a
符号: AVAX

二、常用测试币水龙头领取地址
1、Ropsten测试网
https://faucet.dimensions.network/
https://faucet.ropsten.be/

2、Kovan测试网
https://gitter.im/kovan-testnet/faucet
https://faucet.kovan.network/
https://enjin.io/software/kovan-faucet
https://app.pods.finance/faucet

3、Rinkeby测试网
https://faucet.rinkeby.io

4、Goerli测试网
https://faucet.goerli.mudit.blog/

5、xDai
https://xdai-faucet.top/
https://bridge.xdaichain.com
https://blockscout.com/xdai/mainnet/faucet

6、kovan3测试网
https://faucet.arbitrum.io/

7、币安BSC测试网
https://testnet.binance.org/faucet-smart

8、欧易OKExChain测试网
https://www.okex.win/drawdex
https://docs.kswap.finance/help/gitter