Vadims Sevlakovs
Vadims Sevlakovs

Reputation: 11

TRON / TronGrid TRX transaction signature problem (PHP / Laravel)

Please help with transaction signature..

Input information:

Private key: a83a4cb47dc14208cb07e09005ca0871877899e99e94d9d1ee61e9fc42e2a8ae

Owner address: TUQv1rA4dko2tw4TmV4yUVejDC2zFeAHEn

To address: TJrHZ4JcUrJWcHfZvrUjWomQv3tynmCVf2

Amount: 5 TRX (5 * 1000000 SUN)

What I do:

  1. Create transaction
$response = Http::post('https://api.trongrid.io/wallet/createtransaction', [
     'to_address' =>  'TJrHZ4JcUrJWcHfZvrUjWomQv3tynmCVf2',
     'owner_address' => 'TUQv1rA4dko2tw4TmV4yUVejDC2zFeAHEn',
     'amount' => 5 * 1000000,
     'visible' => true,
]);

Result:

{
    "visible": true,
    "txID": "ac249b31883a386e46f400a4bdd0d01e53f189f8f7cee094ce9d1f63fb921b65",
    "raw_data": {
        "contract": [
            {
                "parameter": {
                    "value": {
                        "amount": 5000000,
                        "owner_address": "TUQv1rA4dko2tw4TmV4yUVejDC2zFeAHEn",
                        "to_address": "TJrHZ4JcUrJWcHfZvrUjWomQv3tynmCVf2"
                    },
                    "type_url": "type.googleapis.com/protocol.TransferContract"
                },
                "type": "TransferContract"
            }
        ],
        "ref_block_bytes": "7256",
        "ref_block_hash": "9c55a016a0d6caa5",
        "expiration": 1730294304000,
        "timestamp": 1730294245634
    },
    "raw_data_hex": "0a02725622089c55a016a0d6caa540809acfecad325a68080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a1541ca4ee64b8188011afab4ed9de3d11d852dd2a6ba121541616a0517a192d20f405ec9faff893bae5e0b266718c096b1027082d2cbecad32"
}
  1. Signature part
$ec = new EC('secp256k1');
$key = $ec->keyFromPrivate('a83a4cb47dc14208cb07e09005ca0871877899e99e94d9d1ee61e9fc42e2a8ae');
$txHash = hash('sha256', hex2bin($rawTransaction['raw_data_hex']));
$signature = $key->sign($txHash);
$signatureArray = [
   str_pad($signature->r->toString('hex'), 64, '0', STR_PAD_LEFT),
   str_pad($signature->s->toString('hex'), 64, '0', STR_PAD_LEFT),
   bin2hex(chr($signature->recoveryParam)),
];
$rawTransaction['signature'] = [implode('', $signatureArray)];
  1. Broadcasting
$response = Http::post('https://api.trongrid.io/wallet/broadcasttransaction', $rawTransaction);
return $response->json()['txid'];

$response is always like:

{
    "code": "SIGERROR",
    "txid": "ac249b31883a386e46f400a4bdd0d01e53f189f8f7cee094ce9d1f63fb921b65",
    "message": "Validate signature error: ff13094567a41a3bdb96172bd90ca48c3d1c88c92822179c5508e35d552f85a45a286d00f78297267e7f6fb6ad7f8b732cf359acd99003ec871976c7003b35d201 is signed by TPXrKoC5wJQx3CeuAEx57vsmnJ8pKEoF5a (Here random addresses) but it is not contained of permission."
}

Where is my mistake?

I expect signed broadcasted transaction.

Also, I tried visible: false flag and HEX addresses, but got same SIGERROR as well.

These are test wallets and will not be used in production.

The TronGrid API Key header is provided from HttpClient by default.

Upvotes: 1

Views: 152

Answers (0)

Related Questions