0

I want to know exactly how the final EOS transaction signature is built. I use C++ but it could be any language.
I can't find any detailed documentation about it. I'm really not sure of what I found but so far I've gathered this information from here, here, here, source code of cleos and the source of ecc-js:

  1. Make a transaction in json
  2. Pack the transaction (I use abieos)
  3. Then do: sha256(chain_id + packed_transaction + sha256(contextFreeData))

contextFreeData is empty so = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

  1. Then : secp256k1(privateKey, <result of 3.>)

Using secp256k1_ecdsa_sign then secp256k1_ecdsa_signature_serialize_compact

  1. Then : base58check( '0' + <result of 4.>)

I saw that for K1 sig the source code prepends a 0x00. Also the base58check seems to be:

base58check = base58(data + RIPEMD160(data)[0:4]) 
  1. Finally just prepend "SIG_K1_" to <result of 5.>

If I'm right, the total bytes that goes into base58 is 69 (= 1 + 64 + 4 ).

But still, my implementation in C++ won't work. The error I have is:

{
    "code": 500,
    "error": {
        "code": 3010010,
        "details": [
            {
                "file": "chain_plugin.cpp",
                "line_number": 2120,
                "message": "Invalid packed transaction",
                "method": "push_transaction"
            },
            {
                "file": "common.hpp",
                "line_number": 50,
                "message": "checksum == wrapped.check: ",
                "method": "apply"
            },
            {
                "file": "signature.cpp",
                "line_number": 32,
                "message": "error parsing signature",
                "method": "parse_base58"
            },
            {
                "file": "abi_serializer.hpp",
                "line_number": 787,
                "message": "Failed to deserialize variant",
                "method": "from_variant"
            }
        ],
        "name": "packed_transaction_type_exception",
        "what": "Invalid packed transaction"
    },
    "message": "Internal Service Error"
}

I will gladly update my question if there are news or something works. I'm stuck already for a week or two now...

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.