2018-07-12 00:46:56 +02:00
|
|
|
% using the PGF/TikZ package with pdflatex
|
|
|
|
\documentclass{standalone}
|
|
|
|
\usepackage[utf8]{inputenc}
|
|
|
|
\usepackage[T1]{fontenc}
|
|
|
|
%~ \usepackage[english]{babel}
|
|
|
|
\usepackage[none]{hyphenat}% prevent hyphenation
|
|
|
|
\usepackage{lmodern}
|
|
|
|
\renewcommand*\familydefault{\sfdefault}
|
|
|
|
\usepackage{tikz}
|
2022-05-13 22:20:49 +02:00
|
|
|
\usetikzlibrary{shapes,arrows.meta}
|
2018-07-12 00:46:56 +02:00
|
|
|
\tikzset{>=latex}
|
|
|
|
%\pgfdeclarelayer{bg} % declare background layer
|
|
|
|
%\pgfsetlayers{bg,main} % set order of layers
|
|
|
|
\newcommand{\h}{\hspace{1em}}
|
|
|
|
\begin{document}
|
|
|
|
% \sffamily{}
|
|
|
|
\tikzstyle{block_center} =
|
|
|
|
[rectangle, draw=black, thick, fill=white,
|
|
|
|
text width=10.5em, text centered,
|
|
|
|
minimum height=1em]
|
|
|
|
\tikzstyle{block_rounded} = [rectangle,
|
|
|
|
draw=black, thick, fill=white,
|
|
|
|
text width=8em, text centered,
|
|
|
|
minimum height=5em,
|
|
|
|
rounded corners]
|
|
|
|
\begin{tikzpicture}[auto]
|
|
|
|
% outlining the flowchart on a grid
|
|
|
|
\matrix[column sep=3ex,row sep=2.5ex]{
|
|
|
|
\h &
|
|
|
|
\node [block_center] (R1)
|
|
|
|
{Alice, Bob and Carol
|
|
|
|
wish to spend from a
|
|
|
|
2-of-3 Multisig.};
|
|
|
|
& \h \\
|
|
|
|
\h &
|
|
|
|
\node [block_center] (R2)
|
|
|
|
{Alice uses a full node
|
|
|
|
to create a PSBT with
|
|
|
|
all input UTXOs filled in.};
|
|
|
|
& \h \\
|
|
|
|
\h &
|
|
|
|
\node [block_center] (R3)
|
|
|
|
{PSBT distributed.};
|
|
|
|
& \h \\
|
|
|
|
\node [block_center] (R4C1)
|
|
|
|
{Alice signs the
|
|
|
|
PSBT with her wallet.};
|
|
|
|
&
|
|
|
|
\node [block_center] (R4C2)
|
|
|
|
{Bob signs the PSBT
|
|
|
|
with his SPV wallet.};
|
|
|
|
&
|
|
|
|
\node [block_center] (R4C3)
|
|
|
|
{Carol signs the PSBT
|
|
|
|
with a completely
|
|
|
|
offline signing machine.};
|
|
|
|
\\
|
|
|
|
%~ \h & \node (blind) & \h \\
|
|
|
|
\h &
|
|
|
|
\node [block_center] (R5)
|
|
|
|
{PSBTs are returned
|
|
|
|
to Alice.};
|
|
|
|
& \h \\
|
|
|
|
\h &
|
|
|
|
\node [block_center] (R6)
|
|
|
|
{Alices combines the
|
|
|
|
PSBTs. All inputs now
|
|
|
|
have 3 signatures.};
|
|
|
|
& \h \\
|
|
|
|
\h &
|
|
|
|
\node [block_center] (R7)
|
|
|
|
{Alice finalizes the PSBT
|
|
|
|
by creating each input's
|
|
|
|
final scriptSig. One signature
|
|
|
|
for each input is dropped.};
|
|
|
|
& \h \\
|
|
|
|
\h &
|
|
|
|
\node [block_rounded] (stop)
|
|
|
|
{Alice extracts the network
|
|
|
|
serialized transaction and
|
|
|
|
broadcasts it to the network.};
|
|
|
|
& \h \\
|
|
|
|
};% end matrix
|
|
|
|
% connecting nodes with paths
|
|
|
|
% \begin{pgfonlayer}{bg}
|
2022-05-13 22:20:49 +02:00
|
|
|
\draw [ultra thick, draw=black, -{Stealth[length=8pt]}]
|
|
|
|
(R1) edge (R2)
|
|
|
|
(R2) edge (R3)
|
|
|
|
(R3) -| (R4C1)
|
|
|
|
(R3) edge (R4C2)
|
|
|
|
(R5) edge (R6)
|
|
|
|
(R6) edge (R7)
|
|
|
|
(R7) edge (stop);
|
|
|
|
\draw [thin, white, -{Stealth[color=black, fill=white, length=8pt]}]
|
2018-07-12 00:46:56 +02:00
|
|
|
(R1) edge (R2)
|
|
|
|
(R2) edge (R3)
|
|
|
|
(R3) -| (R4C1)
|
|
|
|
(R3) edge (R4C2)
|
|
|
|
(R5) edge (R6)
|
|
|
|
(R6) edge (R7)
|
|
|
|
(R7) edge (stop);
|
|
|
|
% circumvent missing arrow
|
2022-05-13 22:20:49 +02:00
|
|
|
\draw [ultra thick, draw=black, -{Stealth[length=8pt]}]
|
|
|
|
(R4C1) |-+(0,-2.2em)-| (R5)
|
|
|
|
(R4C2) edge (R5)
|
|
|
|
(R4C3) |-+(0,-2.2em)-| (R5)
|
|
|
|
(R3) -| (R4C3);
|
|
|
|
\draw [thin, white, -{Stealth[color=black, fill=white, length=8pt]}]
|
2018-07-12 00:46:56 +02:00
|
|
|
(R4C1) |-+(0,-2.2em)-| (R5)
|
|
|
|
(R4C2) edge (R5)
|
|
|
|
(R4C3) |-+(0,-2.2em)-| (R5)
|
|
|
|
(R3) -| (R4C3);
|
|
|
|
% \end{pgfonlayer}
|
|
|
|
\end{tikzpicture}
|
|
|
|
\end{document}
|