diff --git a/substrate/client/finality-grandpa-warp-sync/src/proof.rs b/substrate/client/finality-grandpa-warp-sync/src/proof.rs
index 4dd7b4f57f18a3e82014d35736fadd803c826a56..1b447d2ef720c76f949cbededc0bd39018d24961 100644
--- a/substrate/client/finality-grandpa-warp-sync/src/proof.rs
+++ b/substrate/client/finality-grandpa-warp-sync/src/proof.rs
@@ -46,6 +46,7 @@ pub struct AuthoritySetChangeProof<Block: BlockT> {
 #[derive(Decode, Encode)]
 pub struct WarpSyncProof<Block: BlockT> {
 	proofs: Vec<AuthoritySetChangeProof<Block>>,
+	is_finished: bool,
 }
 
 impl<Block: BlockT> WarpSyncProof<Block> {
@@ -86,8 +87,11 @@ impl<Block: BlockT> WarpSyncProof<Block> {
 
 		let mut proofs = Vec::new();
 
+		let mut proof_limit_reached = false;
+
 		for (_, last_block) in set_changes.iter_from(begin_number) {
 			if proofs.len() >= MAX_CHANGES_PER_WARP_SYNC_PROOF {
+				proof_limit_reached = true;
 				break;
 			}
 
@@ -118,7 +122,10 @@ impl<Block: BlockT> WarpSyncProof<Block> {
 			});
 		}
 
-		Ok(WarpSyncProof { proofs })
+		Ok(WarpSyncProof {
+			proofs,
+			is_finished: !proof_limit_reached,
+		})
 	}
 
 	/// Verifies the warp sync proof starting at the given set id and with the given authorities.