3

I need some ("Proof-able fair") randomization inside a contract, I was thinking of using the Transaction ID, but can the client before sending the contract know what the Transaction ID is going to be?

2 Answers 2

2

A transaction ID is a hash of the transaction data, which is entirely determined by the user. If they wish, they can generate as many different transactions as they like until they get a hash that suits them. Further, it's not possible to access the current transaction's ID from inside Solidity.

If you need fair random numbers, see this question for advice.

5
  • Is there a English version available of that explanation?
    – Jeth
    Apr 13, 2016 at 16:01
  • 1
    For random numbers, see How can I securely generate a random number in my smart contract? ethereum.stackexchange.com/q/191/42
    – eth
    Apr 13, 2016 at 20:12
  • @Jeth Let me know in what way it's confusing, and I'll be happy to reword it. Apr 14, 2016 at 8:49
  • It used to link to a page in mandarin? (github.com/randao/randao). However it's fine now.
    – Jeth
    Apr 17, 2016 at 21:53
  • By transaction data, do you mean the transaction data including the signature or excluding it? Does the transaction data include the nonce, gasPrice, and gasLimit?
    – 0xcaff
    Aug 20, 2017 at 1:29
2

When sending a transaction to a contract does the sender beforehand know the ID that will be assigned to the transaction?

Yes.

The transaction hash is built from the transaction data. The user would be able to modify the transaction data to generate different transaction hashes.

From core/types/transaction.go#L126-L135 :

// Hash hashes the RLP encoding of tx.
// It uniquely identifies the transaction.
func (tx *Transaction) Hash() common.Hash {
    if hash := tx.hash.Load(); hash != nil {
        return hash.(common.Hash)
    }
    v := rlpHash(tx)
    tx.hash.Store(v)
    return v
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.