An Ethereum transaction decoder is a tool used to decode the information contained in an Ethereum transaction. Ethereum transactions are encoded in a specific format, and decoding them can be helpful for understanding the details of the transaction and verifying its contents.
<?php include_once "../libraries2/vendor/autoload.php"; include_once("html_iframe_header.php"); include_once("eth_utils.php"); use Web3p\RLP\RLP; use Web3\Utils; use kornrunner\Ethereum\Transaction; function convert($input) { list($quotient, $residue) = $input; $real = $quotient->toString().'.'.str_pad($residue->toString(), 18, '0', STR_PAD_LEFT); $real = rtrim($real,'0'); $real = rtrim($real, '.'); return $real; } function toHumanReadable($txParams, $txType) { if ($txType == "LEGACY") { //nonce $txParams[0] = $txParams[0] ?: '0'; $txParams[0] = bchexdec($txParams[0]); //gas price $txParams[1] = bchexdec($txParams[1]); $txParams[1] .= " WEI or " . convert(Utils::toEther($txParams[1], 'wei')) . ' ETH'; //gas limit $txParams[2] = bchexdec($txParams[2]); //to $txParams[3] = "0x".$txParams[3]; //value $txParams[4] = $txParams[4] ?: '0'; $txParams[4] = bchexdec($txParams[4]); $txParams[4] .= " WEI or " . convert(Utils::toEther($txParams[4], 'wei')) . ' ETH'; //data $txParams[5] = $txParams[5] ?: '0'; $txParams[5] = '0x'.$txParams[5]; //v $txParams[6] = bchexdec($txParams[6]); //r $txParams[7] = '0x'.$txParams[7]; //s $txParams[8] = '0x'.$txParams[8]; } else if ($txType == "EIP1559") { //Chain Id $txParams[0] = $txParams[0] ?: '0'; $txParams[0] = bchexdec($txParams[0]); //Nonce $txParams[1] = $txParams[1] ?: '0'; $txParams[1] = bchexdec($txParams[1]); //Max Priority Fee Per Gas $txParams[2] = bchexdec($txParams[2]); $txParams[2] .= " WEI or " . convert(Utils::toEther($txParams[2], 'wei')) . ' ETH'; //Max Fee Per Gas $txParams[3] = bchexdec($txParams[3]); $txParams[3] .= " WEI or " . convert(Utils::toEther($txParams[3], 'wei')) . ' ETH'; //Gas Limit $txParams[4] = bchexdec($txParams[4]); //To $txParams[5] = "0x".$txParams[5]; //Value $txParams[6] = $txParams[6] ?: '0'; $txParams[6] = bchexdec($txParams[6]); $txParams[6] .= " WEI or " . convert(Utils::toEther($txParams[6], 'wei')) . ' ETH'; //Data $txParams[7] = $txParams[7] ?: '0'; $txParams[7] = '0x'.$txParams[7]; //Access List $txParams[8] = json_encode($txParams[8]); //v $txParams[9] = bchexdec($txParams[9]); //r $txParams[10] = '0x'.$txParams[10]; //s $txParams[11] = '0x'.$txParams[11]; } return $txParams; } $result = ''; $txType = ''; if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $rlp = new RLP; $txHexWoPrefix = (substr($_POST['tx_hex'],0,2) == '0x') ? substr($_POST['tx_hex'],2) : $_POST['tx_hex']; if (substr($txHexWoPrefix,0,2) == "02") { $result = $rlp->decode("0x".substr($txHexWoPrefix,2)); $txType = "EIP1559"; } else if (substr($txHexWoPrefix,0,2) == "01") { $result = $rlp->decode("0x".substr($txHexWoPrefix,2)); $txType = "EIP2930"; } else { $result = $rlp->decode("0x".$txHexWoPrefix); if (@count($result) == 9) { $txType = "LEGACY"; } else { throw new Exception("Unknown Tx"); } } } catch (Exception $e) { $errmsg .= "Problem found. " . $e->getMessage(); } } if ($errmsg) { ?> <div class="alert alert-danger"> <strong>Error!</strong> <?php echo $errmsg?> </div> <?php } if ($result) { ?> <div class="alert alert-success"><strong>Success!</strong> Decoded successfully.</div> <h6>Raw Response From RLP Decoder</h6> <?php echo "<pre>"; var_dump($result); echo "</pre>"; if ($txType == "LEGACY") { $captions = ["Nonce", "Gas Price", "Gas Limit", "To", "Value", "Data", "V", "R", "S"]; $formatteds = toHumanReadable($result, $txType); } else if ($txType == "EIP1559"){ $captions = ["Chain Id", "Nonce", "Max Priority Fee Per Gas", "Max Fee Per Gas","Gas Limit", "To", "Value", "Data", "Access List", "V", "R", "S"]; $formatteds = toHumanReadable($result, $txType); } $combineds = array_combine($captions, $formatteds); ?> <h6>Transaction Details</h6> <div class="table-responsive"> <table border=1 class='table'> <tr><td>Tx Type</td><td><?php echo $txType?></td></tr> <?php foreach($combineds as $caption=>$value) { ?> <tr><td><?php echo $caption?></td><td><?php echo $value?></td></tr> <?php } ?> </table> </div> <?php } ?> <form action='' method='post'> <div class="form-group"> <label for="tx_hex">Data To Decode:</label> <input class="form-control" type='text' name='tx_hex' id='tx_hex' rows=10 value="<?php echo $_POST['tx_hex']?>"> </div> <input type='submit' class="btn btn-success btn-block"/> </form> <?php include_once("html_iframe_footer.php");