\documentclass[tikz,border=6pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning,fit,calc}
\definecolor{ink}{HTML}{111827}
\definecolor{muted}{HTML}{64748B}
\definecolor{blue}{HTML}{2563EB}
\definecolor{orange}{HTML}{D97706}
\definecolor{violet}{HTML}{7C3AED}
\definecolor{green}{HTML}{059669}
\definecolor{paper}{HTML}{FFFDF7}
\begin{document}
\begin{tikzpicture}[
  >=Latex,
  font=\small,
  text=ink,
  block/.style={draw=ink!35, fill=white, rounded corners=3pt, minimum width=1.15cm, minimum height=0.72cm},
  cert/.style={font=\scriptsize\bfseries},
  panel/.style={draw=ink!18, fill=white, rounded corners=5pt},
]
  \fill[paper] (-0.35,-5.9) rectangle (12.85,1.25);

  % DLS-style one-chain lens: a comparison lens, not a claim that DLS is a blockchain protocol.
  \node[block] (d0) at (0.8,0) {$b$};
  \node[block, draw=blue!65, fill=blue!6] (d1) at (3.0,0) {$b'$};
  \draw[->, blue, line width=.9pt] (d0) -- node[above,cert] {$QC$} (d1);
  \node[font=\bfseries, anchor=west] at (-0.05,0.82) {DLS-style lens: one chain};
  \node[font=\scriptsize, text=muted, align=left, anchor=west] at (-0.05,-0.72) {una certificaci\'on exige\\reglas externas de lock};
  \node[panel, fit=(d0)(d1), inner xsep=0.75cm, inner ysep=0.85cm] (p1) {};

  % PBFT: two-chain lens
  \node[block] (p0) at (7.2,0) {$b$};
  \node[block, draw=orange!65, fill=orange!7] (p1b) at (9.2,0) {$b'$};
  \node[block, draw=orange!65, fill=orange!7] (p2b) at (11.2,0) {$b^{*}$};
  \draw[->, orange, line width=.9pt] (p0) -- node[above,cert] {prepare} (p1b);
  \draw[->, orange, line width=.9pt] (p1b) -- node[above,cert] {commit} (p2b);
  \node[font=\bfseries, anchor=west] at (6.25,0.82) {PBFT lens: two chains};
  \node[font=\scriptsize, text=muted, align=left, anchor=west] at (6.25,-0.72) {dos qu\'orums, expediente\\de cambio de vista};
  \node[panel, fit=(p0)(p2b), inner xsep=0.75cm, inner ysep=0.85cm] {};

  % Tendermint: two-chain plus delay
  \node[block] (t0) at (0.8,-3.75) {$b$};
  \node[block, draw=green!65, fill=green!7] (t1) at (3.0,-3.75) {$b'$};
  \node[block, draw=green!65, fill=green!7] (t2) at (5.2,-3.75) {$b^{*}$};
  \draw[->, green, line width=.9pt] (t0) -- node[above,cert] {prevote} (t1);
  \draw[->, green, line width=.9pt] (t1) -- node[above,cert] {precommit} (t2);
  \draw[<->, muted, densely dashed] ($(t0.south)+(0,-.42)$) -- node[below, font=\scriptsize] {$\Delta$} ($(t1.south)+(0,-.42)$);
  \node[font=\bfseries, anchor=west] at (-0.05,-2.92) {Tendermint: two chains + espera};
  \node[font=\scriptsize, text=muted, align=left, anchor=west] at (-0.05,-4.7) {locks y validRound transportan\\memoria entre rondas};
  \node[panel, fit=(t0)(t2), inner xsep=0.75cm, inner ysep=0.9cm] {};

  % HotStuff: three-chain lens
  \node[block] (h0) at (7.0,-3.75) {$b$};
  \node[block, draw=violet!65, fill=violet!7] (h1) at (8.75,-3.75) {$b+1$};
  \node[block, draw=violet!65, fill=violet!7] (h2) at (10.5,-3.75) {$b+2$};
  \node[block, draw=violet!65, fill=violet!7] (h3) at (12.25,-3.75) {$b+3$};
  \draw[->, violet, line width=.9pt] (h0) -- node[above,cert] {$QC$} (h1);
  \draw[->, violet, line width=.9pt] (h1) -- node[above,cert] {$QC$} (h2);
  \draw[->, violet, line width=.9pt] (h2) -- node[above,cert] {$QC$} (h3);
  \draw[->, green, line width=.9pt] (h3.south) .. controls +(0,-.75) and +(1.1,0) .. node[below, font=\scriptsize\bfseries] {commit$(b)$} (h0.south);
  \node[font=\bfseries, anchor=west] at (6.25,-2.92) {Chained HotStuff: three chains};
  \node[font=\scriptsize, text=muted, align=left, anchor=west] at (6.25,-4.7) {la profundidad certificada\\vuelve portable la memoria};
  \node[panel, fit=(h0)(h3), inner xsep=0.6cm, inner ysep=0.9cm] {};

  \node[font=\footnotesize\itshape, text=muted] at (6.25,-5.55) {Misma pregunta, distinto lugar para el costo: lock, espera, expediente o profundidad certificada.};
\end{tikzpicture}
\end{document}
