web3.js Сбой транзакции, но работает непосредственно на etherscan

#javascript #blockchain #solidity #web3 #web3js

#javascript #блокчейн #надежность #web3 #web3js

Вопрос:

Контракт, на который ссылается, можно найти по адресу — https://rinkeby.etherscan.io/address/0x0e04ca9e56af778424b94eb904da9d97a63582f8

Я пытаюсь вызвать функцию payUser, в которой пользователь отправляет некоторый eth, и в зависимости от суммы eth пользователю передаются некоторые токены.

Код, написанный на javascript, является

 var current_user_account = ""
var abi_token_contract = ""
var token_contract = ""
const address_token_contract = "0x0E04Ca9E56AF778424B94EB904Da9D97A63582F8"

const web = new Web3("https://rinkeby.infura.io/v3/XXXXXXXXXXXXXXXXX")

$.ajax({
    url: "https://api-rinkeby.etherscan.io/api?module=contractamp;action=getabiamp;address=0x0E04Ca9E56AF778424B94EB904Da9D97A63582F8amp;apikey=XXXXXXXXXXXXXXXXX",
    dataType: "json",
    success: function (data) {
        abi_token_contract = JSON.parse(data.result)
        token_contract = new web.eth.Contract(abi_token_contract, address_token_contract)
    }
});

window.addEventListener('load', async () => {

    if (window.ethereum) {
        try {
            const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
            current_user_account = accounts[0]
        } catch (error) {
            if (error.code === 4001) {
                // User rejected request
            }

            setError(error);
        }
        window.ethereum.on('accountsChanged', (accounts) => {
            current_user_account = accounts[0]
        });

    } else {
        window.alert(
            "Non-Ethereum browser detected. You should consider trying MetaMask!"
        );
    }
})


async function send(transaction, value = 0) {
    const params = [{
        from: current_user_account,
        to: transaction._parent._address,
        data: transaction.encodeABI(),
        gas: '0x186a0',
        gasPrice: null,
        value: web.utils.toHex(value)
    },]

    window.ethereum.request({
        method: 'eth_sendTransaction',
        params,
    })
}

function getTokens() {
    token_count_rs = parseFloat($("#token_num").val().trim()) * 10
    $.ajax({
        url: "https://min-api.cryptocompare.com/data/pricemultifull?fsyms=INRamp;tsyms=ETH",
        dataType: "json",
        success: function (data) {
            amount_tobe_payed = (data.RAW.INR.ETH.OPEN24HOUR * token_count_rs).toFixed(18);
            send(token_contract.methods.payUser(address_token_contract, current_user_account), web.utils.toWei(amount_tobe_payed, "ether"))
        }
    });
}
 

Я не понимаю, почему транзакция не выполняется с помощью javascript и работает над разделом etherscan «Write»