there are two options that do come to my mind to calculate a transaction size:
starting from the fees
since we know that the fees are calulated as a * size(tx) + b == fees
using some simple algebra we can see that size(tx) == (fees - b) / a
this should be the most reliable way, but you need the fees in order to calculate the size, so it shouldn't fit you request
use the CBOR size
when builing a transaction using either cardano-cli transaction build
or cardano-cli transaction build-raw
you need to specify an --out-file
which turns out to be a .json
file with the following chema:
{
"type": "Tx AlonzoEra",
"description": "",
"cborHex": "<some hex value>"
}
ultimately the cborHex
value is what goes on-chain
that value is an hexadecimal string and represents the bytes of the CBOR message
since we know that each byte can have a value from 0
to 255
the hex representation must take 2 hexadecimal digits per byte
this way you could calculate the tx size in bytes as half the length of the cborHex string
in nodejs
"<some hex value>".length / 2
however, this approach returns usually a value smaller by ~400/~500 bytes in contrast to the first approach, so I might be missing some data
P.S. cardano-serialization-library
using the cardano-serialization-library
it should be enough to use the Transaction.to_bytes()
method and get the length
e.g.
myTx.to_bytes().length