| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | 
							- <?php
 
- use kornrunner\Secp256k1;
 
- use kornrunner\Serializer\HexSignatureSerializer;
 
- use kornrunner\Signature\Signature;
 
- use kornrunner\Util\Buffer;
 
- function signTransaction(array $transaction, string $privateKey): array {
 
-     $rawData = $transaction['raw_data'];
 
-     // 1. 将 raw_data 转为 JSON 字符串
 
-     $rawDataJson = json_encode($rawData, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
 
-     if ($rawDataJson === false) {
 
-         throw new \Exception("Invalid raw_data: " . json_last_error_msg());
 
-     }
 
-     // 2. 计算 SHA256 哈希(二进制形式)
 
-     $msgHash = hash('sha256', $rawDataJson, true); // raw binary
 
-     // 3. 构造私钥 buffer(二进制)
 
-     $privateKeyBin = hex2bin($privateKey);
 
-     if ($privateKeyBin === false || strlen($privateKeyBin) !== 32) {
 
-         throw new \Exception("Invalid private key format");
 
-     }
 
-     // 4. 签名
 
-     $secp256k1 = new Secp256k1();
 
-     $signature = $secp256k1->sign($msgHash, $privateKeyBin);
 
-     // 5. 生成 HEX 签名(包含 recovery ID)
 
-     $serializer = new HexSignatureSerializer();
 
-     $fullHex = $serializer->serialize($signature); // 130 hex chars: r + s + v (65 bytes)
 
-     // ⚠️ Tron 要求 r + s(不带 v) => 64 字节,即 128 字符的 hex 字符串
 
-     $r = substr($fullHex, 0, 64);
 
-     $s = substr($fullHex, 64, 64);
 
-     $sigHex = $r . $s;
 
-     return [
 
-         'txID' => $transaction['txID'],
 
-         'raw_data' => $transaction['raw_data'],
 
-         'signature' => [$sigHex],
 
-     ];
 
- }
 
 
  |