Транзакция Ethereum Используя cUrl и web3.php, я получаю квитанцию, но транзакция не отправляется в сеть - PullRequest
0 голосов
/ 23 декабря 2018

Это делало мою голову в течение всего дня, после того, как я прошёл через все и сумел преобразовать все мои значения в шестнадцатеричное, я создал и подписал транзакцию 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);

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

1 Ответ

0 голосов
/ 24 декабря 2018

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

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

...