Non templated overload that has priority for the action structure this type has members which must be directly translated by the ABI so it is exploded and processed explicitly
754 {
755 auto h = ctx.enter_scope();
757 SYS_ASSERT(vo.contains(
"account"), packed_transaction_type_exception,
"Missing account");
758 SYS_ASSERT(vo.contains(
"name"), packed_transaction_type_exception,
"Missing name");
761
762 if (vo.contains("authorization")) {
764 }
765
766 bool valid_empty_data = false;
767 if( vo.contains( "data" ) ) {
768 const auto& data = vo["data"];
769 if( data.is_string() ) {
771 valid_empty_data = act.data.empty();
772 } else if ( data.is_object() ) {
773 auto abi = resolver(act.account);
774 if (abi) {
775 auto type = abi->get_action_type(act.name);
776 if (!type.empty()) {
777 variant_to_binary_context _ctx(*abi, ctx, type);
778 _ctx.short_path = true;
779 act.data = std::move( abi->_variant_to_binary( type, data, _ctx ));
780 valid_empty_data = act.data.empty();
781 }
782 }
783 }
784 }
785
786 if( !valid_empty_data && act.data.empty() ) {
787 if( vo.contains( "hex_data" ) ) {
788 const auto& data = vo["hex_data"];
789 if( data.is_string() ) {
791 }
792 }
793 }
794
795 SYS_ASSERT(valid_empty_data || !act.data.empty(), packed_transaction_type_exception,
796 "Failed to deserialize data for ${account}:${name}", ("account", act.account)("name", act.name));
797 }
#define SYS_ASSERT(expr, exc_type, FORMAT,...)
variant_object & get_object()
void from_variant(const fc::variant &v, sysio::chain::chain_id_type &cid)