SMS supports multi-part messages. Is that not reliable in the countries you
are targeting?
Assuming you are bound to the plain old SMS protocol, let's see what can be done.
This is a simple send value transaction:
0xf8660185042817c80082420894e0defb92145fef3c3a945637705fafd3aa74a241822710001ba0909bb38d67799654ea53d3c05b839aa5f12f1f9e96205125d30a326a74eedd95a0634ee974baa4930dd4a943e392dcd526186531e20fb116ead9c0c10c520e3703
This is 104 bytes or 208 bytes as a hex ASCII string.
It all depends on the character encoding supported by the SMS protocol, I remember it was a weird character set, but it is definitely not 8-bit safe.
This means you'll need to find an encoding which fits into the character set supported by SMS as well as reduce the above by from hex string format by 25%.
You could also apply compression, but that is unlikely to be very successful on this data set.
Can I remove fields?
If you assume the only transaction supported is normal value transfer between two external accounts, then you can remove gasLimit, gasPrice and data from the transaction.
Essentially you could do the following:
- Create the transaction as normal
- Sign it as normal
- Send only the following fields:
- recipient address
- value to be transferred
- signature (r, s and v components)
- Rebuild the transaction on the host side and check the signature
- If it matches you're ready to go
Remark: One problem I see is the nonce needs to be communicated with sender.
Edit: the actual size of the transaction depends on the values included. Some of them have constant or predictable size (recipient, the signature, gas limit), but the value, gas price and data can vary widely.
This is a transaction for sending 1 ETH (which equals to 1000000000000000000 Wei, 0x0de0b6b3a7640000 in hex, a total of 8 bytes). This amounts to 110 bytes total:
0xf86c018504a817c80082520894e0defb92145fef3c3a945637705fafd3aa74a241880de0b6b3a7640000001ba075862cd4397d54b2804118984b1ba7a09ca7c4f58253f4c73523c241a74a13a3a07226191881ced6311bce1f03dda40ae7294edb3e973a1525686d9b4911f3fc0a
Additionally to the remark about the nonce, the gas price should also be periodically communicated with the sender. Even though it is supposed to be dynamic and miners are free to decide what to accept, currently you could get away with fixing it. This will change in the future.