EOS_ASSERT(locks_contain(**trx_meta.allowed_write_locks,receiver,scope),block_lock_exception,"write lock \"${a}::${s}\" required but not provided",("a",receiver)("s",scope));
EOS_ASSERT(locks_contain(**trx_meta.allowed_read_locks,account,scope),block_lock_exception,"read lock \"${a}::${s}\" required but not provided",("a",account)("s",scope));
FC_DECLARE_DERIVED_EXCEPTION(block_tx_output_exception,eosio::chain::block_validate_exception,3020001,"transaction outputs in block do not match transaction outputs from applying block")
FC_DECLARE_DERIVED_EXCEPTION(block_concurrency_exception,eosio::chain::block_validate_exception,3020002,"block does not guarantee concurrent exection without conflicts")
FC_DECLARE_DERIVED_EXCEPTION(block_lock_exception,eosio::chain::block_validate_exception,3020003,"shard locks in block are incorrect or mal-formed")
FC_DECLARE_DERIVED_EXCEPTION(tx_msgs_auth_exceeded,eosio::chain::transaction_exception,3030018,"Number of transaction messages per authorized account has been exceeded")
FC_DECLARE_DERIVED_EXCEPTION(tx_msgs_code_exceeded,eosio::chain::transaction_exception,3030019,"Number of transaction messages per code account has been exceeded")