PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/bech32-buffer/examples

Просмотр файла: demo.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
  <meta name="keywords" content="bech32, base32, bitcoin">
  <meta name="description" content="Demo of bech32-buffer package capabilities">

  <title>Bech32 Demo</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous">
  <style>
  textarea {
    resize: none;
    height: 80px;
  }

  input[type=number] {
    max-width: 5rem;
  }

  .content {
    max-width: 1080px;
    margin: 0 auto;
    padding: 1rem;
  }

  .body-header {
    padding: 1rem;
    background: #f4f4f4;
    border-bottom: 1px solid #eee;
    margin-bottom: 2rem;
  }

  .page-footer {
    margin: 4rem -0.5rem 0 -0.5rem;
    padding: 2rem 0 1.5rem;
    border-top: 1px solid rgba(0,0,0,0.15);
  }

  .align-height {
    min-height: 152px;
  }
  .card-header.align-header-height {
    height: 49px;
  }

  .qr-placeholder {
    display: inline-block;
    width: 132px;
    height: 132px;
    background: rgba(0,0,0,0.15);
    color: white;
  }
  .qr-placeholder:before {
    content: '?';
    font-size: 72px;
    line-height: 1;
    height: 72px;
    position: relative;
    top: 50%;
    margin-top: -36px;
    display: inline-block;
  }

  #encode:after {
    content: ' ↓';
  }
  #decode:after {
    content: ' ↑';
  }
  @media (min-width: 768px) {
    #encode:after {
      content: ' →';
    }
    #decode:after {
      content: ' ←';
    }
  }
  </style>
</head>
<body>
  <header class="body-header">
    <div class="content">
      <h1>bech32-buffer</h1>
      <p class="lead">Bech32 is a Bitcoin address format proposed by Pieter Wuille and Greg Maxwell in <a href="https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki">BIP 173</a> and later amended by <a href="https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki">BIP 350</a>.
      Besides Bitcoin addresses, Bech32 can encode any short binary data.</p>
    </div>
  </header>

  <div class="content">
    <div class="row">
      <div class="col-md-6 mb-3 mb-md-0">
        <div class="card">
          <div class="card-header align-header-height">
            <ul class="nav nav-tabs card-header-tabs">
              <li class="nav-item" role="presentation">
                <button class="nav-link active" id="encode-btc-tab" data-bs-toggle="tab" data-bs-target="#encode-btc" type="button" role="tab" aria-controls="home" aria-selected="true">BTC Address</button>
              </li>
              <li class="nav-item">
                <button class="nav-link" id="encode-data-tab" data-bs-toggle="tab" data-bs-target="#encode-data" type="button" role="tab" aria-controls="home" aria-selected="false">Data</button>
              </li>
            </ul>
          </div>
          <div class="card-block p-2">
            <form>
              <div class="align-height tab-content">
                <div class="tab-pane" id="encode-data" role="tabpanel" aria-labelledby="encode-data-tab">
                  <div class="mb-3 row">
                    <label for="hrp" class="col-3 col-form-label">Tag</label>
                    <div class="col-9">
                      <input type="text" id="hrp" class="form-control" placeholder="Tag"/>
                    </div>
                    <div class="col-12 form-text text-muted small">A short tag describing what a Bech32-encoded string is used for.</div>
                  </div>
                  <div class="mb-3 row">
                    <label class="col-3 col-form-label">Encoding</label>
                    <div class="col-9">
                      <div class="btn-group" role="group">
                        <input type="radio" class="btn-check" name="encoding-options" id="encoding-bech32" autocomplete="off">
                        <label for="encoding-bech32" class="btn btn-outline-primary" title="Original encoding proposed in BIP 173">Bech32</label>
                        <input type="radio" class="btn-check" name="encoding-options" id="encoding-bech32m" autocomplete="off" checked>
                        <label for="encoding-bech32m" class="btn btn-outline-primary" title="Amended encoding from BIP 350">Bech32m</label>
                      </div>
                    </div>
                  </div>
                </div>
                <div class="tab-pane active" id="encode-btc" role="tabpanel" aria-labelledby="encode-btc-tab">
                  <div class="mb-3 row">
                    <label class="col-3 col-form-label">Network</label>
                    <div class="col-9">
                      <div class="btn-group" role="group">
                        <input type="radio" class="btn-check" name="btc-network-options" id="btc-mainnet" autocomplete="off" checked>
                        <label for="btc-mainnet" class="btn btn-outline-primary">Mainnet</label>
                        <input type="radio" class="btn-check" name="btc-network-options" id="btc-testnet" autocomplete="off">
                        <label for="btc-testnet" class="btn btn-outline-primary">Testnet</label>
                      </div>
                    </div>
                  </div>
                  <div class="mb-3 row">
                    <label for="script-version" class="col-3 col-form-label">Script ver.</label>
                    <div class="col-9">
                      <input type="number" id="script-version" min="0" max="16" size="6" value="0">
                    </div>
                    <div class="col-12 form-text">Note that version 0 scripts should have length 20 or 32 bytes.</div>
                  </div>
                </div>
              </div>
              <div class="mb-4">
                <label for="data" class="form-label">Data</label>
                <textarea id="data" class="form-control" placeholder="Hex data"></textarea>
                <div class="form-text text-muted small">Binary data (in hex) to be encoded into Bech32.</div>
              </div>

              <button type="button" id="encode" class="btn btn-primary" data-container="body" data-toggle="popover" data-placement="bottom" data-content="">Encode</button>
              <a id="random" title="Generate random data" class="ms-3" href="#">Random data</a>
            </form>
          </div>
        </div>
      </div>

      <div class="col-md-6">
        <div class="card">
          <h3 class="card-header align-header-height">Bech32</h3>
          <div id="qrcode" class="card-img-top text-center py-2 align-height" title="QR code with the latest encoded or decoded message"><div class="qr-placeholder"></div></div>
          <div class="card-block p-2">
            <form>
              <div class="mb-4">
                <label for="encoded" class="form-label">Encoded data</label>
                <textarea id="encoded" class="form-control" placeholder="Bech32 string"></textarea>
                <div class="form-text text-muted small">Encoded Bech32 string.</div>
              </div>

              <button type="button" id="decode" class="btn btn-primary" data-container="body" data-toggle="popover" data-placement="top" data-content="">Decode</button>
            </form>
          </div>
        </div>
      </div>
    </div>

    <footer class="page-footer small text-muted">
      <span class="copyright">© 2021 Alex Ostrovski</span>
      <div class="float-none float-sm-end">
        <a href="https://github.com/slowli/bech32-buffer">GitHub</a>&nbsp;•
        <a href="https://npmjs.com/package/bech32-buffer">Npm</a>&nbsp;•
        <a href="../dist/bech32-buffer.min.js" download="bech32-buffer.min.js">Browser version</a>
      </div>
    </footer>
  </div>

  <script src="https://code.jquery.com/jquery-3.6.0.slim.min.js" integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI=" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-p34f1UUtsS3wqzfto5wAAmdvj+osOnFyQFpp4Ua3gs/ZVWx6oOypYoCJhGGScy+8" crossorigin="anonymous"></script>

  <script src="qrcode.min.js"></script>
  <script src="../dist/bech32-buffer.min.js"></script>

  <script>
  /* eslint-env browser, jquery */
  /* global bech32 */
  (function () {
    /**
     * Converts a byte array into a hex string.
     */
    function toHexString(buffer) {
      return buffer.reduce((s, byte) => {
        let hex = byte.toString(16);
        if (hex.length === 1) hex = '0' + hex;
        return s + hex;
      }, '');
    }

    /**
     * Converts a hex string into a byte array.
     *
     * @returns {?Uint8Array}
     *   decoded array, or `null` if the supplied string is not a valid hex string
     */
    function fromHexString(str) {
      if (str.length % 2 !== 0 || !/^[0-9a-f]+$/i.test(str)) {
        return null;
      }
      let buffer = new Uint8Array(str.length / 2);
      for (let i = 0; i < buffer.length; i++) {
        buffer[i] = parseInt(str.substr(2 * i, 2), 16);
      }
      return buffer;
    }

    const hrp = $('#hrp');
    const data = $('#data');
    const encoded = $('#encoded');
    const encodeBtn = $('#encode');
    const decodeBtn = $('#decode');
    const randomBtn = $('#random');
    const scriptVersion = $('#script-version');

    const timeouts = {};

    function report(type, btn, message) {
      const id = btn[0].id;
      const timeout = timeouts[id];
      if (timeout) clearTimeout(timeout);

      btn.attr('data-bs-content', '<span class="text-' + type + '">' + message + '</span>');
      btn[0].popover.show();
      timeouts[id] = setTimeout(function() {
        btn[0].popover.hide();
        delete timeouts[id];
      }, 3000);
    }

    encodeBtn.click(function() {
      let enc;
      const btc = $('#encode-btc').hasClass('active');

      try {
        const buffer = fromHexString(data.val());
        if (!buffer) throw new TypeError('Invalid hex encoding of data');

        if (btc) {
          const prefix = $('#btc-mainnet').prop('checked') ? 'bc' : 'tb';
          const version = parseInt(scriptVersion.val());
          const btcAddress = new bech32.BitcoinAddress(prefix, version, buffer);
          enc = btcAddress.encode();
        } else {
          const encoding = $('#encoding-bech32').prop('checked') ? 'bech32' : 'bech32m';
          enc = bech32.encode(hrp.val(), buffer, encoding);
        }
        encoded.val(enc);
      } catch (e) {
        report('danger', encodeBtn, 'Error: ' + e.message);
        return;
      }

      report('success', encodeBtn, 'Data encoded (' + enc.length + ' chars)');
      const qr = qrcode(0, 'M');
      qr.addData(enc.toUpperCase(), 'Alphanumeric');
      qr.make();
      $('#qrcode').html(qr.createSvgTag(4, 0));
    });

    decodeBtn.click(function() {
      let dec;
      const btc = $('#encode-btc').hasClass('active');

      try {
        if (btc) {
          dec = bech32.BitcoinAddress.decode(encoded.val());
          scriptVersion.val(dec.scriptVersion);

          var selectedNetwork = (dec.prefix === 'bc') ? $('#btc-mainnet') : $('#btc-testnet');
          $('input[name=btc-network-options]').parent().removeClass('active');
          selectedNetwork.prop('checked', true);
          selectedNetwork.parent().addClass('active');
        } else {
          dec = bech32.decode(encoded.val());
          hrp.val(dec.prefix);

          var selectedEncoding = (dec.encoding === 'bech32') ? $('#encoding-bech32') : $('#encoding-bech32m');
          $('input[name=encoding-options]').parent().removeClass('active');
          selectedEncoding.prop('checked', true);
          selectedEncoding.parent().addClass('active');
        }
        data.val(toHexString(dec.data));
      } catch (e) {
        report('danger', decodeBtn, 'Error: ' + e.message);
        return;
      }

      report('success', decodeBtn, 'Data decoded (' + dec.data.length + ' bytes)');
      const qr = qrcode(0, 'M');
      qr.addData(encoded.val().toUpperCase(), 'Alphanumeric');
      qr.make();
      $('#qrcode').html(qr.createSvgTag(4, 0));
    });

    $('#encode,#decode').each(function () {
      this.popover = new bootstrap.Popover(this, {
        trigger: 'manual',
        html: true
      });
    });

    randomBtn.click(function(e) {
      e.preventDefault();
      const btc = $('#encode-btc').hasClass('active');

      // Not secure! Don't use in production.
      const length = (btc && parseInt(scriptVersion.val()) === 0)
        ? (Math.random() > 0.5 ? 32 : 20)
        : 8 + Math.floor(Math.random() * 32);
      const buffer = new Uint8Array(length);
      for (let i = 0; i < length; i++) {
        buffer[i] = Math.floor(Math.random() * 256);
      }
      data.val(toHexString(buffer));
    });

    scriptVersion.change(function() {
      const version = parseInt(scriptVersion.val());
      if (version < 0) scriptVersion.val(0);
      if (version > 16) scriptVersion.val(16);
    });
  })();
  </script>
</body>
</html>

Выполнить команду


Для локальной разработки. Не используйте в интернете!