From d3ff691c54b90a5ace5176948c5de485d946bc01 Mon Sep 17 00:00:00 2001 From: bzp99 Date: Thu, 10 Aug 2023 13:10:30 +0200 Subject: [PATCH] Add diagrams --- doc/diagrams/.gitignore | 2 + doc/diagrams/class-diagram.pdf | Bin 0 -> 24132 bytes doc/diagrams/class-diagram.tex | 231 ++++++++++++++++++++++++++++++ doc/diagrams/sequence-diagram.pdf | Bin 0 -> 14887 bytes doc/diagrams/sequence-diagram.tex | 166 +++++++++++++++++++++ 5 files changed, 399 insertions(+) create mode 100644 doc/diagrams/.gitignore create mode 100644 doc/diagrams/class-diagram.pdf create mode 100644 doc/diagrams/class-diagram.tex create mode 100644 doc/diagrams/sequence-diagram.pdf create mode 100644 doc/diagrams/sequence-diagram.tex diff --git a/doc/diagrams/.gitignore b/doc/diagrams/.gitignore new file mode 100644 index 0000000..0e77146 --- /dev/null +++ b/doc/diagrams/.gitignore @@ -0,0 +1,2 @@ +*.aux +*.log diff --git a/doc/diagrams/class-diagram.pdf b/doc/diagrams/class-diagram.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9c89b0f73b7d55e25a7e85b6d8f5b48050a45181 GIT binary patch literal 24132 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,dashed,thick,>={Straight Barb[length=.5em,width=.75em]} + }, + impl/.style={dep,>={Triangle[open,length=.75em,width=.75em]}}, + ext/.style={impl,solid}, + assoc/.style={->,>={Straight Barb[length=.5em,width=.75em]}}, + comp/.style={ + assoc, + {Diamond[length=1em,width=.5em]}-{Straight Barb[length=.5em,width=.75em]} + }, + rellab/.style={font=\ttfamily\large}, +] + \node (iregistry) [ + iface=RegistryInterface/{% + \Op{create}{% + \Param{entity}{SerializableEntity}% + }{void} \\ + \Op{read}{% + \Param{entity}{SerializableEntity}% + }{void} \\ + \Op{update}{% + \Param{entity}{SerializableEntity}% + }{void} \\ + \Op{delete}{% + \Param{entity}{SerializableEntity}% + }{void} \\ + },text width=28em, + ]; + \pic at ($(iregistry.north east)+(-1.2em,-1.4em)$) {ificon}; + + \node[right=32em of iregistry.north,anchor=north] (ientity) [ + iface=SerializableEntityInterface/{% + \Op{getType}{}{String} \\ + \Op{getKeyParts}{}{String\Multiplicity{1}{\Any}} \\ + \Op{toBuffer}{}{byte\Multiplicity{1}{\Any}} \\ + \Op{fromBuffer}{% + \Param{buffer}{byte\Multiplicity{1}{\Any}}% + }{void} \\ + \Op{toJson}{}{String} \\ + \Op{fromJson}{\Param{json}{String}}{void} \\ + },text width=26em, + ]; + \pic at ($(ientity.north east)+(-1.2em,-1.4em)$) {ificon}; + + \node[below=of iregistry] (registry) [classsimple] {Registry}; + + \node[below=of registry] (ctxwreg) [ + class=ContextWithRegistry/{% + \Op{+getRegistry}{}{Registry}% + }]; + + \node[below=4em of ientity] (entitybase) + [classabstractsimple] {SerializableEntityBase}; + \node[below=of ctxwreg,xshift=12em] (mwbase) + [classabstractsimple] {ChaincodeStubMiddlewareBase}; + + \node[below=15em of ctxwreg] (ctx) + [class=Context/\Op{getStub}{}{ChaincodeStub},text width=17em]; + + \node[below=of ctx] (icontract) + [ifacesimple,text width=16em,text centered] + {ContractInterface}; + \pic at ($(icontract.north east)+(-1.2em,-1.4em)$) {ificon}; + + \node[below=18em of entitybase] (istub) [ + iface=ChaincodeStub/{% + \Op{getState}{% + \Param{key}{String} + }{byte\Multiplicity{0}{\Any}} \\ + \Op{putState}{% + \Param{key}{String}, + \Param{value}{byte\Multiplicity{0}{\Any}}% + }{void} \\ + \Ellipsis + },text width=32em, + ]; + \pic at ($(istub.north east)+(-1.2em,-1.4em)$) {ificon}; + + \coordinate[above=4em of iregistry] (fitcftsrg); + \begin{scope}[on background layer] + \node (pkgftsrg) [ + folder, + fit=(fitcftsrg)(iregistry)(registry)(ctxwreg)(mwbase)(ientity)(entitybase) + ] {}; + \end{scope} + \node[font=\large\bfseries\ttfamily] + at ($(pkgftsrg.north)+(0,-1em)$) + {hu.bme.mit.ftsrg.chaincode.dataaccess}; + + \coordinate[above=2em of istub] (fitcfabric); + \begin{scope}[on background layer] + \node (pkgfabric) [ + folder, + fit=(fitcfabric)(ctx)(icontract)(istub) + ] {}; + \end{scope} + \node[font=\large\bfseries\ttfamily] + at ($(pkgfabric.north)+(0,-1em)$) + {org.hyperledger.fabric}; + + \node[classsimple,left=15em of ctxwreg] (cc) {MyChaincode}; + + \draw[impl] (registry) -- (iregistry); + \draw[ext] (ctxwreg) -- (ctx); + \draw[comp] (ctxwreg) + -- node[right,rellab,pos=.65] {-registry} (registry); + \draw[comp,transform canvas={yshift=-1em}] (ctx.east |- istub) + -- node[below,rellab,pos=.7] {-stub} (istub); + \draw[dep] (iregistry) -- ++(-12em,-12em) -- (ctx); + \draw[dep] (iregistry.east |- ientity) -- (ientity); + \draw[impl] (mwbase) |- (istub); + \draw[assoc] (mwbase) + -| node[right,rellab,pos=.95] {\#next} (istub); + \coordinate (chelper1) at ($(ctxwreg.south east)+(-2em,0)$); + \draw[dep] (chelper1) -- (chelper1 |- mwbase.north); + \draw[impl] (entitybase) -- (ientity); + \draw[dep] (cc) -- node[above,rellab,midway] {\Stereo{use}} (ctxwreg); + \draw[impl] (cc) |- (icontract); +\end{tikzpicture} + +\end{document} diff --git a/doc/diagrams/sequence-diagram.pdf b/doc/diagrams/sequence-diagram.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5fbc48c833c62d97f6eca186cd544ea1bb55bdf6 GIT binary patch literal 14887 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 P&cz8!K_Q_e3HyHlM;4*Z literal 0 HcmV?d00001 diff --git a/doc/diagrams/sequence-diagram.tex b/doc/diagrams/sequence-diagram.tex new file mode 100644 index 0000000..b8cb5b4 --- /dev/null +++ b/doc/diagrams/sequence-diagram.tex @@ -0,0 +1,166 @@ +\documentclass[tikz]{standalone} + +\usetikzlibrary{ + arrows.meta, + calc, + fit, + positioning, + shadows, + shapes.multipart, +} + + +\begin{document} + +\definecolor{umlactivationbg}{HTML}{C4E1D5} +\definecolor{umlactorbgleft}{HTML}{CEE6DC} +\definecolor{umlactorbgright}{HTML}{F6FEFB} +\definecolor{umlactoroutline}{HTML}{000000} +\definecolor{umlifacebgleft}{HTML}{C0D2C4} +\definecolor{umlifacebgright}{HTML}{FAFCFB} +\definecolor{umlificonoutline}{HTML}{76907C} + +\newcommand\TallStrut{\vrule height 10pt depth 10pt width 0pt} + +\newcommand*\Actor[2][]{#1~:~#2} +\newcommand*\Stereo[1]{«#1»} + +\begin{tikzpicture}[ + actor/.style={ + draw=umlactoroutline, + shading=axis, + left color=umlactorbgleft,right color=umlactorbgright, + drop shadow, + font=\bfseries\Large, + node contents={\TallStrut\raisebox{-.5ex}{#1}}, + minimum height=4em, + }, + ificon/.pic={ + \draw[ + umlificonoutline, + shading=axis, + left color=umlifacebgleft,right color=umlifacebgright, + ] (0,0) circle (8pt); + }, + activation/.style={ + draw=black,fill=umlactivationbg, + inner xsep=.5em,inner ysep=0, + node contents={}, + }, + port/.style={ + draw,fill=black, + minimum width=1em,minimum height=1em, + node contents={} + }, + life/.style=loosely dashed, + longdashed/.style={dash pattern={on 8pt off 5pt}}, + msg/.style={ + -{Triangle[width=1em,length=1em]}, + shorten >=.5em,shorten <=.5em, + }, + reply/.style={ + msg,longdashed, + -{Straight Barb[width=1em,length=1em]}, + }, + msgcreate/.style=reply, + msglab/.style={font=\ttfamily\Large}, +] + + \node (cc) [actor={\Actor{MyChaincode}}]; + \node (ctx) + [actor={\Actor[ctx]{ContextWithRegistry}},right=of cc]; + \node (ent) + [actor={\Actor[ent]{Entity}},right=-6em of ctx,yshift=-12em]; + \node (reg) [actor={\Actor[reg]{Registry}},right=8em of ctx]; + \node (stub) [ + actor={\Actor[interceptor]{ChaincodeStub}}, + right=12em of reg, + text width=25em,text centered, + ]; + \pic at ($(stub.north east)+(-1.4em,-1.8em)$) {ificon}; + \node (fabstub) [ + actor={\Actor[fabricStub]{ChaincodeStub}}, + right=6em of stub, + text width=24em,text centered, + ]; + \pic at ($(fabstub.north east)+(-1.4em,-1.8em)$) {ificon}; + + \coordinate (cbot) at ($(cc)+(0,-45em)$); + \foreach \a in {cc,ctx,ent,reg,stub,fabstub} + \draw[life] (\a) -- (\a |- cbot); + + \node (in) [port,left=16em of cc,yshift=-4em]; + + \coordinate (ccact1start) at (in.east -| cc); + \coordinate (ccact1end) at ($(cc.south)+(0,-42em)$); + \node (ccact1) [activation,fit=(ccact1start)(ccact1end)]; + \draw[msg,shorten <=0em] (in) + -- node[above,msglab] {invokeTx(ctx=ctx,parameters)} + (in -| ccact1); + + \coordinate (ctxact1start) at ($(ctx.south)+(0,-5em)$); + \coordinate (ctxact1end) at ($(ctxact1start)+(0,-2em)$); + \node (ctxact1) [activation,fit=(ctxact1start)(ctxact1end)]; + \draw[msg] (ccact1 |- ctxact1start) + -- node[above,msglab] {getRegistry()} (ctxact1start); + \draw[reply] (ctxact1end) + -- node[above,msglab] {reg} (ctxact1end -| ccact1); + + \draw[msgcreate] (ccact1 |- ent) + -- node[above,msglab] {\Stereo{create}} (ent); + + \coordinate (regact1start) at ($(reg.south)+(0,-15em)$); + \coordinate (regact1end) at ($(regact1start)+(0,-24em)$); + \node (regact1) [activation,fit=(regact1start)(regact1end)]; + \draw[msg] (ccact1 |- regact1start) + -- node[above,msglab] {create(ctx=ctx, entity=ent)} + (regact1start); + + \coordinate (ctxact2start) at ($(ctx.south)+(0,-18em)$); + \coordinate (ctxact2end) at ($(ctxact2start)+(0,-2em)$); + \node (ctxact1) [activation,fit=(ctxact2start)(ctxact2end)]; + \draw[msg] (regact1 |- ctxact2start) + -- node[above,msglab] {getStub()} (ctxact2start); + \draw[reply] (ctxact2end) + -- node[above,msglab] {interceptor} (ctxact2end -| regact1); + + \coordinate (entact1start) at ($(ent.south)+(0,-10em)$); + \coordinate (entact1end) at ($(entact1start)+(0,-2em)$); + \node (entact1) [activation,fit=(entact1start)(entact1end)]; + \draw[msg] (regact1 |- entact1start) + -- node[above,msglab] {getKeyParts()} (entact1start); + \draw[reply] (entact1end) + -- node[above,msglab] {keyParts} (entact1end -| regact1); + + \coordinate (entact2start) at ($(ent.south)+(0,-14em)$); + \coordinate (entact2end) at ($(entact2start)+(0,-2em)$); + \node (entact2) [activation,fit=(entact2start)(entact2end)]; + \draw[msg] (regact1 |- entact2start) + -- node[above,msglab] {toBuffer()} (entact2start); + \draw[reply] (entact2end) + -- node[above,msglab] {buffer} (entact2end -| regact1); + + \coordinate (stubact1start) at ($(stub.south)+(0,-30em)$); + \coordinate (stubact1end) at ($(stubact1start)+(0,-6em)$); + \node (stubact1) [activation,fit=(stubact1start)(stubact1end)]; + \draw[msg] (regact1 |- stubact1start) + -- node[above,msglab] {putState(key=keyParts,value=buffer)} + (stubact1start); + \draw[reply] (stubact1end) -- (stubact1end -| regact1); + + \coordinate (fabstubact1start) at ($(fabstub.south)+(0,-32em)$); + \coordinate (fabstubact1end) at ($(fabstubact1start)+(0,-2em)$); + \node (fabstubact1) [ + activation,fit=(fabstubact1start)(fabstubact1end), + ]; + \draw[msg] (stubact1 |- fabstubact1start) + -- node[above,msglab] {putState(key=keyParts,value=buffer)} + (fabstubact1start); + \draw[reply] (fabstubact1end) -- (fabstubact1end -| stubact1); + + \draw[reply] (regact1end) -- (regact1end -| ccact1); + + \draw[reply] (ccact1end) -- (ccact1end -| in) node[port,solid]; +\end{tikzpicture} + +\end{document}