Как при интеграции metamask брать количество токенов из инпута?
к нему подключен код из примера Metamask:
const ethereumButton = document.querySelector('.enableEthereumButton');
const sendEthButton = document.querySelector('.sendEthButton');
let accounts = [];
//Sending Ethereum to an address
sendEthButton.addEventListener('click', () => {
ethereum
.request({
method: 'eth_sendTransaction',
params: [
{
from: accounts[0],
to: '0x2f318C334780961FB129D2a6c30D0763d9a5C970',
value: '0x29a2241af62c0000',
gasPrice: '0x09184e72a000',
gas: '0x2710',
},
],
})
.then((txHash) => console.log(txHash))
.catch((error) => console.error);
});
ethereumButton.addEventListener('click', () => {
getAccount();
});
async function getAccount() {
accounts = await ethereum.request({ method: 'eth_requestAccounts' });
}
Мне надо что бы пользователь мог вводить в форму количество токенов и после нажатия кнопки покупки, в переводе уже было выбранное кол-во токенов
Вопрос: Как это сделать?
Ответы (1 шт):
Автор решения: Neakit
→ Ссылка
В документации все указано ссылка
sendEthButton.addEventListener('click', () => {
const decimals = 18; // decimals для ETH
const amount = 2; // кол-во эфира, которое нужно отправить
const amountWithDecimals = amount * Math.pow(10, decimals) // кол-во токенов с учетом decimals
const value = amountWithDecimals.toString(16); // превращаем в Hex
window.ethereum
.request({
method: 'eth_sendTransaction',
params: [
{
from: accounts[0],
to: '0x104017c4B28fBFd4A789d2B8b0E872562E3139f5',
value: value,
gasPrice: '0x09184e72a000',
gas: '0x2710',
},
],
})
.then((txHash) => console.log(txHash))
.catch((error) => console.error);
});
Важные замечания на будущее:
- Для мат расчетов (кол-ва монет, перерасчет в USD и т.д.) лучше использовать библиотеку BN.js, чтобы исключить ошибок типа 0.1 + 0.2 = 0.30000004 в js. Либо другую на выбор BigNumber например.
- Посмотрите в сторону библиотеки web3.js. В будущем будет проще масштабировать приложение.
- Формулу amount * Math.pow(10, decimals) можно использовать для любых токенов, помимо ETH. Правда, для этого вам нужен готовый смарт контракт
