Получение функции toWei с помощью window.ethereum

#javascript #ethereum #metamask

Вопрос:

Я просто пытаюсь получить доступ toWei к функции utils на интерфейсном веб-сайте на JavaScript.

Поскольку мы удалили наш window.web3, MetaMask больше не перезагружает страницу автоматически при изменении цепочки / сети.

(Источник: https://docs.metamask.io/guide/provider-migration.html#summary-of-breaking-changes )

Итак, я использую window.ethereum то, что до сих пор было в порядке. Но я не могу найти, даже при значительном поиске в Google, прямой пример использования window.ethereum для доступа .toWei(..) к функции.

Например, я бы хотел что-то вроде:

 var weiVal = window.ethereum.toWei(String(eth_float), 'ether');
 

Но этот конкретный вызов функции не существует. Как я могу это сделать?

Ответ №1:

toWei() Функция была частью удаленного web3 модуля и больше не является частью расширения браузера MetaMask.

В настоящее время 0 результатов в коде: https://github.com/MetaMask/metamask-extension/search ?q = toWei


Однако вы можете импортировать пакет web3 JS в свой интерфейс и использовать функцию отсюда.

 <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
<script>
    const web3 = new Web3();
    const weiAmount = web3.utils.toWei("1", "ether");
    console.log(weiAmount);
</script>
 

Источник уменьшенного пакета: официальный web3.js репо — https://github.com/ChainSafe/web3.js

Комментарии:

1. Спасибо за информативный ответ! Приветствия

Ответ №2:

Преобразование из ethereum в wei — это просто умножение на 10 ^ -18 (и наоборот на 10 ^ 18). Вот демонстрация:

 function e2w() {
  val = document.getElementById("numberInput").value;
  console.log("Wei: "   val * 10 ** 18);
}

function w2e() {
  val = document.getElementById("numberInput").value;
  console.log("Ethereum: "   val * 10 ** -18);
} 
 <form>
  <label for="numberInput">Enter value</label><br>
  <input type="number" step="any" id="numberInput"><br>
  <button onclick="e2w()">Eth --> Wei</button>
  <button onclick="w2e()">Wei --> Eth</button>
</form> 

Более общее решение для преобразования единиц измерения среди всех единиц Ethereum здесь:

 BigNumber.config({
  DECIMAL_PLACES: 50
});

const units = {
  "wei": 1,
  "kwei": 10 ** 3,
  "mwei": 10 ** 6,
  "gwei": 10 ** 9,
  "microether": 10 ** 12,
  "milliether": 10 ** 15,
  "ether": 10 ** 18,
}

function unitConverter() {
  fromUnit = document.getElementById("from").value;
  toUnit = document.getElementById("to").value;
  inputNumber = document.getElementById("inputNumber").value;
  result = new BigNumber(inputNumber).times(units[fromUnit]).div(units[toUnit]).toString(10);
  document.getElementById("outputNumber").innerHTML = resu<
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/9.0.1/bignumber.min.js"></script>
<label for="from">from:</label>
<select id="from" name="fromUnits" onchange="unitConverter()">
  <option value="wei">Wei</option>
  <option value="kwei">Kwei (babbage)</option>
  <option value="mwei">Mwei (lovelace)</option>
  <option value="gwei">Gwei (shannon)</option>
  <option value="microether">microether (szabo)</option>
  <option value="milliether">milliether (finney)</option>
  <option value="ether">Ether</option>
</select>
<p>
  <label for="to">to:</label>
  <select id="to" name="toUnits" onchange="unitConverter()">
    <option value="wei">Wei</option>
    <option value="kwei">Kwei (babbage)</option>
    <option value="mwei">Mwei (lovelace)</option>
    <option value="gwei">Gwei (shannon)</option>
    <option value="microether">microether (szabo)</option>
    <option value="milliether">milliether (finney)</option>
    <option value="ether">Ether</option>
  </select>
  <p>
    <label>Input</label>
    <input id="inputNumber" type="number" placeholder="Input:" value=1 oninput="unitConverter()" onchange="unitConverter()">
    <p>
      <p>Output: <span id="outputNumber">1</span></p>