| I feel I need to clarify some of your points, as they're a little misleading. > Don't worry, they can't change after about an hour. Well, probably. It would be pretty expensive for an attacker to change them after an hour. You use the term "pretty expensive" here without qualifying it. Changing a transaction encoded in the blockchain would require outpacing the current hashrate of the bitcoin network. That would require a significant hardware investment, on the order of tens of millions of dollars. > Well you're already downloading every message ever. Just scan through for one which matches the same from number, to number, and message contents. You make it sound as if you wouldn't have to do this if you had the transaction hash. You still need to iterate through the transactions regardless. It's just a question of whether you use the transaction hash, or derive your own from the parts of the transaction that are immutable. Let's make your example a touch more realistic: Me: "Hey Twilio I created an SMS message but when I try to query it for the results it 404s." Them: "Has the message been delivered?" Me: "I don't think so. I'm querying it shortly after I create it." Them: "How are you querying it?" Me: "With the message hash." Them: "Ah, that explains it, then. A pending message may be changed before its delivered, altering the hash. This makes the hash unsuitable for identifying pending messages." Me: "So how do I identify messages?" Them: "Ideally you wait until they're delivered, but if you really need to check for pending messages, you can search through them looking for a message that matches on to, from and content." Me: "That kinda sucks." Them: "We know, but it's a difficult issue to fix. It's documented in our wiki." Me: "What if I don't read your wiki, or follow your mailing list?" Them: "Then should you really be running an exchange handling millions of dollars of transactions?" Me: "... Good point." |