https://eosio-cpp.readme.io/docs/communication-model states:
On completion of the transaction, a transaction receipt is generated. This receipt takes the form a hash.
The transaction receipt is a hash of what, exactly?
https://eosio-cpp.readme.io/docs/communication-model states:
On completion of the transaction, a transaction receipt is generated. This receipt takes the form a hash.
The transaction receipt is a hash of what, exactly?
From what I can tell, it's a hash of the transaction itself and the chain id:
From libraries/chain/transaction.cpp
:
digest_type transaction::sig_digest( const chain_id_type& chain_id, const vector<bytes>& cfd )const {
digest_type::encoder enc;
fc::raw::pack( enc, chain_id );
fc::raw::pack( enc, *this );
if( cfd.size() ) {
fc::raw::pack( enc, digest_type::hash(cfd) );
} else {
fc::raw::pack( enc, digest_type() );
}
return enc.result();
}
where a transaction
is defined as follows:
struct transaction : public transaction_header {
vector<action> context_free_actions;
vector<action> actions;
extensions_type transaction_extensions;
transaction_id_type id()const;
digest_type sig_digest( const chain_id_type& chain_id, const vector<bytes>& cfd = vector<bytes>() )const;
flat_set<public_key_type> get_signature_keys( const vector<signature_type>& signatures,
const chain_id_type& chain_id,
const vector<bytes>& cfd = vector<bytes>(),
bool allow_duplicate_keys = false,
bool use_cache = true )const;
uint32_t total_actions()const { return context_free_actions.size() + actions.size(); }
account_name first_authorizor()const {
for( const auto& a : actions ) {
for( const auto& u : a.authorization )
return u.actor;
}
return account_name();
}
};