Перенесите токен ERC20 в основную сеть с помощью web3js (успешно в ropsten, не удалось в основной сети)

Я хочу перевести несколько токенов ERC20 в Ethereum. Я сделал некоторую подготовительную работу и попробовал в ropsten, это удалось. Затем я изменил используемый API, адрес кошелька, httpProvicer, адрес контракта и запустил код, но это не помогло. Я не нашел почему. Не могли бы вы помочь мне?

Ниже приведена основная часть моего кода.

web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/xxxx"));
let WALLETBASE = "xxx";      
let contractAddr = "xxx";    
let gasPrice = web3.utils.toHex(41 * 10^9); //41gwei

let abi = JSON.parse(fs.readFileSync("./file.abi").toString("utf8"));
let contractInstance = new web3.eth.Contract(abi, contractAddr);
function setAllocation(_nonce, _to, _amount){
console.log('prepare for new transaction: %s %s', _to, _amount);
var transfer_amount = _amount + '000000000000000000';
let data = web3.utils.sha3("transfer(address,uint256)").substr(0,10)    
            + "000000000000000000000000"                                
            + _to.substr(2,40)                                          
            + "00000000000000000000000000000000"                        
            + toHex32(transfer_amount);                                         
var noncehex = "0x" + _nonce.toString(16);
// console.log('data: ' + data);

web3.eth.estimateGas({
    "from" : WALLETBASE,
    "nonce": noncehex,
    "to"   : contractAddr,
    "data" : data
}).then((value) => {
    console.log("gas limit: " + value);
    var signedTx = {
        "from"      : WALLETBASE,       
        "nonce"     : noncehex, 
        "gasPrice"  : gasPrice,         
        "gasLimit"  : value,
        "to"        : contractAddr,     
        "value"     : "0x00",
        "data"      : data,
        "chainId"   : 1
    }

    var privateKey = new Buffer.from("xxxx", 'hex');
    var tx = new Tx(signedTx);
    tx.sign(privateKey);
    var serializedTx = tx.serialize();

    try{
        web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'),
            function(err, hash) {
            if (!err) {
                console.log("-------------------");
                console.log("to: " + _to);
                console.log("TxHash: " + hash);
            } else {
                console.log("=====error occur=====");
                console.log(err);
            }
        });
    }catch(err){
        console.log('ERROR: ' + err);
    }
});
}

когда я запускаю код, он занимает много времени без ответа. около 5 минут, я получил ошибку:

(node:1336) UnhandledPromiseRejectionWarning: Error: Transaction was not mined within750 seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!
at /Users/.../node_modules/web3-core-method/src/index.js:392:42
at process._tickCallback (internal/process/next_tick.js:178:7)
(node:1336) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1336) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

PS: адрес кошелька мне не принадлежит. Владелец дал мне закрытый ключ, и я передаю токены от его имени. Есть ли проблемы с авторизацией личности?

Какую ошибку вы получаете?
я добавил информацию об ошибке!
У вас есть хэш транзакции? Газа вроде хватает. Как получить одноразовый номер транзакции? Формат ввода транзакции кажется недостаточно гибким, если вы пропустите «0», вы можете закончить отправку на неправильный адрес или неправильную сумму. Почему бы вам не использовать библиотеку, например web3, для форматирования транзакции? ERC20 довольно распространены, и вы можете легко получить ABI.
привет Исмаэль, да, у меня есть хэш транзакции. но когда я искал его, он сказал, что txhash не может быть расположен. До сих пор прошло уже 18 часов, а этих транзакций до сих пор не видно на мой адрес.

Ответы (1)

Ваши транзакции отправляются. Это предупреждающее сообщение.

Кроме того, ваш код не заканчивается, потому что он ждет, пока ваша транзакция будет добыта, а затем возвращает вам обратный вызов успеха.

Вместо этого вы можете получить квитанцию ​​и проверить статус tx в отдельном вызове.

web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
.on('receipt', console.log);
Прошло 18 часов, а я так и не получил ответа. и я не смог найти транзакцию по txhash. Я предполагаю, что может быть какая-то другая причина.