Транзакция Ethereum Используя cUrl и web3.php, я получаю квитанцию, но транзакция не отправляется в сеть

Это делало мою голову в течение всего дня, после того, как я прошёл через все и сумел преобразовать все мои значения в шестнадцатеричные, я создаю и подписываю транзакцию ethereum, используя библиотеку web3p / ethereum-tx из GitHub. Я помещаю запрос cUrl с параметрами в сеть Infura. Я получаю ответ с хэшем транзакции, но когда я ищу его в etherscan и других, он не появляется, есть идеи, что я делаю неправильно?

use Web3\Web3;
use Web3p\EthereumTx\Transaction;

$balance = bcdiv($balanceInWei, "1000000000000000000", 18);
$gasTotal = 4000000000 * 21004;
$value = bcsub($balanceInWei, $gasTotal);
$gas = dechex(21004);
$gasPrice = dechex(4000000000);

function bcdechex($dec) {
$hex = '';
do {
$last = bcmod($dec, 16);
$hex = dechex($last).$hex;
$dec = bcdiv(bcsub($dec, $last), 16);
} while($dec>0);
return $hex;
}

$hexValue = bcdechex($value);
$nonce = time();
$hexNonce = dechex($nonce);

echo $wallet_address;
// with chainId
$transaction = new Transaction([
'nonce' => '0x'.$hexNonce,
'from' => $wallet_address,
'to' => '0xMyWalletAddress',
'gas' => '0x'.$gas,
'gasPrice' => '0x'.$gasPrice,
'value' => '0x'.$hexValue,
'chainId' => 1,
'data' => '0x0'
]);
$signedTransaction = $transaction->sign($databaseContainer->private_key);

$url = "https://mainnet.infura.io/v3/MyApiKey";
$data = array(
"jsonrpc" => "2.0",
"method" => "eth_sendRawTransaction",
"params" => array("0x".$signedTransaction),
"id" => 1
);
$json_encoded_data = json_encode($data);

var_dump($json_encoded_data);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_encoded_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($json_encoded_data))
);

$result = json_decode(curl_exec($ch));
curl_close($ch);
dd($result);

дд только я сбрасываю результат в larvel. Заранее спасибо.

0

Решение

Похоже, вы используете текущее время в шестнадцатеричном формате в качестве одноразового номера транзакции. Это не правильный ожидаемый одноразовый номер; вам нужно убедиться, что вы используете правильный ожидаемый одноразовый номер аккаунта. Вы можете получить это значение nonce, вызвав eth_getTransactionCount.

Также обратите внимание, что вы получаете хэш транзакции, а не квитанцию. Хэш транзакции является индикатором того, что ваша транзакция была отправлена ​​в сеть. Квитанция о транзакции является индикатором успешной добычи / проверки вашей транзакции.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector