Cleanup book (#1904)
* Cleanup book * Distinguish upstream from downstream validators * Add BroadcastStage to Fullnode/Tpu diagrams * First attempt to re-describe the runtime * Reorg book Push back details of the fullnode implementation
This commit is contained in:
parent
f5b5c54d7d
commit
c3fb9d5549
|
@ -1,21 +1,27 @@
|
|||
.------------------------.
|
||||
| Fullnode |
|
||||
| |
|
||||
.--------. | .----------------. |
|
||||
| |---->| | |
|
||||
| Client | | | JsonRpcService | |
|
||||
| |<----| | |
|
||||
`----+---` | `----------------` |
|
||||
| | ^ |
|
||||
| | | |
|
||||
| | .--+---. .-----. |
|
||||
| | | Bank |<--| Tvu | |
|
||||
| | `------` `-----` |
|
||||
| | ^ ^ |
|
||||
| | | | | .------------.
|
||||
| | .--+--. .--+--. | | |
|
||||
`-------->| Tpu +-->| Ncp |<-------->| Validators |
|
||||
| `-----` `-----` | | |
|
||||
| | `------------`
|
||||
`------------------------`
|
||||
.---------------------------.
|
||||
| Fullnode |
|
||||
| |
|
||||
.--------. | .----------------. |
|
||||
| |---->| | |
|
||||
| Client | | | JsonRpcService | |
|
||||
| |<----| | |
|
||||
`----+---` | `----------------` |
|
||||
| | ^ | .------------------.
|
||||
| | | .-----. | | Validators |
|
||||
| | | | Ncp |<---------->| |
|
||||
| | | `---+-` | | .------------. |
|
||||
| | | ^ | | | | | |
|
||||
| | | | v | | | Upstream | |
|
||||
| | .--+---. .-+---. | | | Validators | |
|
||||
| | | Bank |<--| Tvu |<--------------+ | |
|
||||
| | `------` `-----` | | `------------` |
|
||||
| | ^ | | |
|
||||
| | | | | .------------. |
|
||||
| | .--+--. .-----------. | | | | |
|
||||
`-------->| Tpu +-->| Broadcast +--------->| Downstream | |
|
||||
| `-----` | Stage | | | | Validators | |
|
||||
| `-----------` | | | | |
|
||||
| | | `------------` |
|
||||
`---------------------------` | |
|
||||
`------------------`
|
||||
|
||||
|
|
32
art/tpu.bob
32
art/tpu.bob
|
@ -1,19 +1,19 @@
|
|||
.----------------------------------------------------.
|
||||
| Tpu .------------. |
|
||||
| | PohService | |
|
||||
| `-------+----` |
|
||||
| ^ | |
|
||||
| | v |
|
||||
| .-------. .-----------. .-+-------. .-------. |
|
||||
.---------. | | Fetch | | SigVerify | | Banking | | Write | | .------------.
|
||||
| Clients |--->| Stage |->| Stage |->| Stage |-->| Stage +--->| Validators |
|
||||
`---------` | | | | | | | | | | `------------`
|
||||
| `-------` `-----------` `----+----` `---+---` |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
`---------------------------------|------------|-----`
|
||||
.------------------------------------------------------.
|
||||
| Tpu .------------. |
|
||||
| | PohService | |
|
||||
| `-------+----` |
|
||||
| ^ | |
|
||||
| | v |
|
||||
| .-------. .-----------. .-+-------. .--------. | .------------.
|
||||
.---------. | | Fetch | | SigVerify | | Banking | | Ledger | | | Broadcast |
|
||||
| Clients |--->| Stage |->| Stage |->| Stage |-->| Write +---->| Stage |
|
||||
`---------` | | | | | | | | Stage | | | |
|
||||
| `-------` `-----------` `----+----` `---+----` | `------------`
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
`---------------------------------|------------|-------`
|
||||
| |
|
||||
v v
|
||||
.------. .--------.
|
||||
|
|
39
art/tvu.bob
39
art/tvu.bob
|
@ -1,18 +1,21 @@
|
|||
.--------------------------------------------.
|
||||
| |
|
||||
| .------------------------------------|---------------------------------------.
|
||||
| | Tvu | |
|
||||
| | | |
|
||||
v | .-------. .------------. .----+---------. .--------. .---------. |
|
||||
.--------. | | Blob | | Retransmit | | Replicate | | Ledger | | Storage | |
|
||||
| Leader |----->| Fetch |-->| Stage |-->| Stage |-->| Write |-->| Stage | |
|
||||
`--------` | | Stage | | | | | | Stage | | | |
|
||||
| `-------` `----+-------` `----+---------` `--------` `---------` |
|
||||
| ^ | | |
|
||||
| | | | |
|
||||
`--------|----------|----------------|---------------------------------------`
|
||||
| | |
|
||||
| V v
|
||||
.+-----------. .------.
|
||||
| Validators | | Bank |
|
||||
`------------` `------`
|
||||
.--------.
|
||||
| Leader |
|
||||
`--------`
|
||||
^
|
||||
|
|
||||
.------------------------------------|---------------------------------------.
|
||||
| Tvu | |
|
||||
| | |
|
||||
| .-------. .------------. .----+---------. .--------. .---------. |
|
||||
.------------. | | Blob | | Retransmit | | Replicate | | Ledger | | Storage | |
|
||||
| Upstream +----->| Fetch |-->| Stage |-->| Stage |-->| Write |-->| Stage | |
|
||||
| Validators | | | Stage | | | | | | Stage | | | |
|
||||
`------------` | `-------` `----+-------` `----+---------` `--------` `---------` |
|
||||
| ^ | | |
|
||||
| | | | |
|
||||
`--------|----------|----------------|---------------------------------------`
|
||||
| | |
|
||||
| V v
|
||||
.+-----------. .------.
|
||||
| Ncp | | Bank |
|
||||
`------------` `------`
|
||||
|
|
|
@ -4,14 +4,7 @@
|
|||
|
||||
- [Terminology](terminology.md)
|
||||
|
||||
- [On-chain programs](programs.md)
|
||||
- [The Runtime](runtime.md)
|
||||
|
||||
- [Fullnode](fullnode.md)
|
||||
- [Tpu](tpu.md)
|
||||
- [Tvu](tvu.md)
|
||||
- [Ncp](ncp.md)
|
||||
- [JsonRpcService](jsonrpc-service.md)
|
||||
- [Programming Model](programs.md)
|
||||
|
||||
- [A Solana Cluster](cluster.md)
|
||||
- [Synchronization](synchronization.md)
|
||||
|
@ -21,6 +14,13 @@
|
|||
- [Ledger Replication](storage.md)
|
||||
- [Leader Rotation](leader-scheduler.md)
|
||||
|
||||
- [Anatomy of a Fullnode](fullnode.md)
|
||||
- [Tpu](tpu.md)
|
||||
- [Tvu](tvu.md)
|
||||
- [Ncp](ncp.md)
|
||||
- [JsonRpcService](jsonrpc-service.md)
|
||||
- [The Runtime](runtime.md)
|
||||
|
||||
## Appendix
|
||||
|
||||
- [Appendix](appendix.md)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<svg class="bob" font-family="arial" font-size="14" height="336" width="456" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg class="bob" font-family="arial" font-size="14" height="432" width="528" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||
|
@ -56,7 +56,7 @@
|
|||
}
|
||||
|
||||
</style>
|
||||
<rect fill="white" height="336" width="456" x="0" y="0"/>
|
||||
<rect fill="white" height="432" width="528" x="0" y="0"/>
|
||||
<g>
|
||||
<line x1="12" x2="12" y1="60" y2="116"/>
|
||||
<path d="M 12 116 A 4 4 0 0 0 16 120" fill="none"/>
|
||||
|
@ -68,13 +68,13 @@
|
|||
</g>
|
||||
<g>
|
||||
<line x1="16" x2="52" y1="120" y2="120"/>
|
||||
<line x1="52" x2="52" y1="120" y2="260"/>
|
||||
<line x1="52" x2="52" y1="120" y2="324"/>
|
||||
<line x1="52" x2="80" y1="120" y2="120"/>
|
||||
<path d="M 52 260 A 4 4 0 0 0 56 264" fill="none"/>
|
||||
<path d="M 52 324 A 4 4 0 0 0 56 328" fill="none"/>
|
||||
<path d="M 80 120 A 4 4 0 0 0 84 116" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="56" x2="124" y1="264" y2="264"/>
|
||||
<line marker-end="url(#triangle)" x1="56" x2="124" y1="328" y2="328"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="84" x2="84" y1="60" y2="116"/>
|
||||
|
@ -94,19 +94,19 @@
|
|||
<line x1="108" x2="108" y1="80" y2="96"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="108" x2="108" y1="112" y2="256"/>
|
||||
<line x1="108" x2="108" y1="112" y2="320"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="108" x2="108" y1="272" y2="308"/>
|
||||
<path d="M 108 308 A 4 4 0 0 0 112 312" fill="none"/>
|
||||
<line x1="108" x2="108" y1="336" y2="388"/>
|
||||
<path d="M 108 388 A 4 4 0 0 0 112 392" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="112" x2="304" y1="8" y2="8"/>
|
||||
<path d="M 308 12 A 4 4 0 0 0 304 8" fill="none"/>
|
||||
<line x1="112" x2="328" y1="8" y2="8"/>
|
||||
<path d="M 332 12 A 4 4 0 0 0 328 8" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="112" x2="304" y1="312" y2="312"/>
|
||||
<path d="M 304 312 A 4 4 0 0 0 308 308" fill="none"/>
|
||||
<line x1="112" x2="328" y1="392" y2="392"/>
|
||||
<path d="M 328 392 A 4 4 0 0 0 332 388" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="132" x2="132" y1="60" y2="116"/>
|
||||
|
@ -114,14 +114,14 @@
|
|||
<path d="M 136 56 A 4 4 0 0 0 132 60" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="132" x2="132" y1="172" y2="196"/>
|
||||
<path d="M 132 196 A 4 4 0 0 0 136 200" fill="none"/>
|
||||
<path d="M 136 168 A 4 4 0 0 0 132 172" fill="none"/>
|
||||
<line x1="132" x2="132" y1="236" y2="260"/>
|
||||
<path d="M 132 260 A 4 4 0 0 0 136 264" fill="none"/>
|
||||
<path d="M 136 232 A 4 4 0 0 0 132 236" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="132" x2="132" y1="252" y2="276"/>
|
||||
<path d="M 132 276 A 4 4 0 0 0 136 280" fill="none"/>
|
||||
<path d="M 136 248 A 4 4 0 0 0 132 252" fill="none"/>
|
||||
<line x1="132" x2="132" y1="316" y2="340"/>
|
||||
<path d="M 132 340 A 4 4 0 0 0 136 344" fill="none"/>
|
||||
<path d="M 136 312 A 4 4 0 0 0 132 316" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="136" x2="264" y1="56" y2="56"/>
|
||||
|
@ -132,108 +132,175 @@
|
|||
<path d="M 264 120 A 4 4 0 0 0 268 116" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="136" x2="156" y1="168" y2="168"/>
|
||||
<line x1="156" x2="156" y1="144" y2="168"/>
|
||||
<line x1="156" x2="184" y1="168" y2="168"/>
|
||||
<path d="M 188 172 A 4 4 0 0 0 184 168" fill="none"/>
|
||||
<line x1="136" x2="156" y1="232" y2="232"/>
|
||||
<line x1="156" x2="156" y1="144" y2="232"/>
|
||||
<line x1="156" x2="184" y1="232" y2="232"/>
|
||||
<path d="M 188 236 A 4 4 0 0 0 184 232" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="136" x2="184" y1="200" y2="200"/>
|
||||
<path d="M 184 200 A 4 4 0 0 0 188 196" fill="none"/>
|
||||
<line x1="136" x2="184" y1="264" y2="264"/>
|
||||
<path d="M 184 264 A 4 4 0 0 0 188 260" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="136" x2="156" y1="248" y2="248"/>
|
||||
<line x1="156" x2="156" y1="224" y2="248"/>
|
||||
<line x1="156" x2="176" y1="248" y2="248"/>
|
||||
<path d="M 180 252 A 4 4 0 0 0 176 248" fill="none"/>
|
||||
<line x1="136" x2="156" y1="312" y2="312"/>
|
||||
<line x1="156" x2="156" y1="288" y2="312"/>
|
||||
<line x1="156" x2="176" y1="312" y2="312"/>
|
||||
<path d="M 180 316 A 4 4 0 0 0 176 312" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="136" x2="176" y1="280" y2="280"/>
|
||||
<path d="M 176 280 A 4 4 0 0 0 180 276" fill="none"/>
|
||||
<line x1="136" x2="176" y1="344" y2="344"/>
|
||||
<path d="M 176 344 A 4 4 0 0 0 180 340" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="144" y2="132"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="224" y2="212"/>
|
||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="288" y2="276"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="180" x2="180" y1="252" y2="264"/>
|
||||
<line x1="180" x2="180" y1="264" y2="276"/>
|
||||
<line marker-end="url(#triangle)" x1="180" x2="204" y1="264" y2="264"/>
|
||||
<line x1="180" x2="180" y1="316" y2="328"/>
|
||||
<line x1="180" x2="180" y1="328" y2="340"/>
|
||||
<line marker-end="url(#triangle)" x1="180" x2="204" y1="328" y2="328"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="188" x2="188" y1="172" y2="196"/>
|
||||
<line x1="188" x2="188" y1="236" y2="260"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="200" x2="196" y1="184" y2="184"/>
|
||||
<line x1="200" x2="220" y1="184" y2="184"/>
|
||||
<line marker-end="url(#triangle)" x1="200" x2="196" y1="248" y2="248"/>
|
||||
<line x1="200" x2="220" y1="248" y2="248"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="212" x2="212" y1="252" y2="276"/>
|
||||
<path d="M 212 276 A 4 4 0 0 0 216 280" fill="none"/>
|
||||
<path d="M 216 248 A 4 4 0 0 0 212 252" fill="none"/>
|
||||
<line x1="212" x2="212" y1="316" y2="356"/>
|
||||
<path d="M 212 356 A 4 4 0 0 0 216 360" fill="none"/>
|
||||
<path d="M 216 312 A 4 4 0 0 0 212 316" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="216" x2="236" y1="248" y2="248"/>
|
||||
<line x1="236" x2="236" y1="224" y2="248"/>
|
||||
<line x1="236" x2="256" y1="248" y2="248"/>
|
||||
<path d="M 260 252 A 4 4 0 0 0 256 248" fill="none"/>
|
||||
<line x1="216" x2="304" y1="312" y2="312"/>
|
||||
<path d="M 308 316 A 4 4 0 0 0 304 312" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="216" x2="256" y1="280" y2="280"/>
|
||||
<path d="M 256 280 A 4 4 0 0 0 260 276" fill="none"/>
|
||||
<line x1="216" x2="304" y1="360" y2="360"/>
|
||||
<path d="M 304 360 A 4 4 0 0 0 308 356" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="220" x2="220" y1="172" y2="196"/>
|
||||
<path d="M 220 196 A 4 4 0 0 0 224 200" fill="none"/>
|
||||
<path d="M 224 168 A 4 4 0 0 0 220 172" fill="none"/>
|
||||
<line x1="220" x2="220" y1="156" y2="180"/>
|
||||
<path d="M 220 180 A 4 4 0 0 0 224 184" fill="none"/>
|
||||
<path d="M 224 152 A 4 4 0 0 0 220 156" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="224" x2="264" y1="168" y2="168"/>
|
||||
<path d="M 268 172 A 4 4 0 0 0 264 168" fill="none"/>
|
||||
<line x1="220" x2="220" y1="236" y2="260"/>
|
||||
<path d="M 220 260 A 4 4 0 0 0 224 264" fill="none"/>
|
||||
<path d="M 224 232 A 4 4 0 0 0 220 236" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="224" x2="264" y1="200" y2="200"/>
|
||||
<path d="M 264 200 A 4 4 0 0 0 268 196" fill="none"/>
|
||||
<line x1="224" x2="264" y1="152" y2="152"/>
|
||||
<path d="M 268 156 A 4 4 0 0 0 264 152" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="236" x2="236" y1="224" y2="212"/>
|
||||
<line x1="224" x2="252" y1="184" y2="184"/>
|
||||
<line marker-end="url(#triangle)" x1="252" x2="252" y1="184" y2="220"/>
|
||||
<line x1="252" x2="264" y1="184" y2="184"/>
|
||||
<path d="M 264 184 A 4 4 0 0 0 268 180" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="260" x2="260" y1="252" y2="276"/>
|
||||
<line x1="224" x2="236" y1="232" y2="232"/>
|
||||
<line x1="236" x2="236" y1="208" y2="232"/>
|
||||
<line x1="236" x2="264" y1="232" y2="232"/>
|
||||
<path d="M 268 236 A 4 4 0 0 0 264 232" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="224" x2="264" y1="264" y2="264"/>
|
||||
<path d="M 264 264 A 4 4 0 0 0 268 260" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="236" x2="236" y1="208" y2="196"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="268" x2="268" y1="60" y2="116"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="268" x2="268" y1="172" y2="196"/>
|
||||
<line x1="268" x2="268" y1="156" y2="180"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="272" x2="268" y1="264" y2="264"/>
|
||||
<line marker-end="url(#triangle)" x1="272" x2="340" y1="264" y2="264"/>
|
||||
<line x1="268" x2="268" y1="236" y2="260"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="308" x2="308" y1="12" y2="256"/>
|
||||
<line marker-end="url(#triangle)" x1="280" x2="276" y1="168" y2="168"/>
|
||||
<line marker-end="url(#triangle)" x1="280" x2="364" y1="168" y2="168"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="308" x2="308" y1="272" y2="308"/>
|
||||
<line marker-end="url(#triangle)" x1="280" x2="276" y1="248" y2="248"/>
|
||||
<line x1="280" x2="396" y1="248" y2="248"/>
|
||||
<line x1="396" x2="396" y1="188" y2="248"/>
|
||||
<line x1="396" x2="396" y1="248" y2="260"/>
|
||||
<path d="M 396 260 A 4 4 0 0 0 400 264" fill="none"/>
|
||||
<path d="M 400 184 A 4 4 0 0 0 396 188" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="348" x2="348" y1="236" y2="292"/>
|
||||
<path d="M 348 292 A 4 4 0 0 0 352 296" fill="none"/>
|
||||
<path d="M 352 232 A 4 4 0 0 0 348 236" fill="none"/>
|
||||
<line x1="308" x2="308" y1="316" y2="328"/>
|
||||
<line x1="308" x2="308" y1="328" y2="356"/>
|
||||
<line marker-end="url(#triangle)" x1="308" x2="388" y1="328" y2="328"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="352" x2="448" y1="232" y2="232"/>
|
||||
<path d="M 452 236 A 4 4 0 0 0 448 232" fill="none"/>
|
||||
<line x1="332" x2="332" y1="12" y2="160"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="352" x2="448" y1="296" y2="296"/>
|
||||
<path d="M 448 296 A 4 4 0 0 0 452 292" fill="none"/>
|
||||
<line x1="332" x2="332" y1="176" y2="240"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="452" x2="452" y1="236" y2="292"/>
|
||||
<line x1="332" x2="332" y1="256" y2="320"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="332" x2="332" y1="336" y2="388"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="372" x2="372" y1="140" y2="240"/>
|
||||
<path d="M 376 136 A 4 4 0 0 0 372 140" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="372" x2="372" y1="256" y2="320"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="372" x2="372" y1="336" y2="404"/>
|
||||
<path d="M 372 404 A 4 4 0 0 0 376 408" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="376" x2="520" y1="136" y2="136"/>
|
||||
<path d="M 524 140 A 4 4 0 0 0 520 136" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="376" x2="520" y1="408" y2="408"/>
|
||||
<path d="M 520 408 A 4 4 0 0 0 524 404" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="396" x2="396" y1="300" y2="372"/>
|
||||
<path d="M 396 372 A 4 4 0 0 0 400 376" fill="none"/>
|
||||
<path d="M 400 296 A 4 4 0 0 0 396 300" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="400" x2="496" y1="184" y2="184"/>
|
||||
<path d="M 500 188 A 4 4 0 0 0 496 184" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="400" x2="496" y1="264" y2="264"/>
|
||||
<path d="M 496 264 A 4 4 0 0 0 500 260" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="400" x2="496" y1="296" y2="296"/>
|
||||
<path d="M 500 300 A 4 4 0 0 0 496 296" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="400" x2="496" y1="376" y2="376"/>
|
||||
<path d="M 496 376 A 4 4 0 0 0 500 372" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="500" x2="500" y1="188" y2="260"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="500" x2="500" y1="300" y2="372"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="524" x2="524" y1="140" y2="404"/>
|
||||
</g>
|
||||
<g>
|
||||
<text x="25" y="92">
|
||||
|
@ -251,27 +318,57 @@ JsonRpcService
|
|||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="145" y="188">
|
||||
<text x="145" y="252">
|
||||
Bank
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="145" y="268">
|
||||
<text x="145" y="332">
|
||||
Tpu
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="225" y="268">
|
||||
<text x="225" y="332">
|
||||
Broadcast
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="225" y="348">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="233" y="172">
|
||||
Ncp
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="233" y="188">
|
||||
<text x="233" y="252">
|
||||
Tvu
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="361" y="268">
|
||||
<text x="385" y="156">
|
||||
Validators
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="409" y="220">
|
||||
Upstream
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="409" y="236">
|
||||
Validators
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="409" y="332">
|
||||
Downstream
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="409" y="348">
|
||||
Validators
|
||||
</text>
|
||||
</g>
|
||||
|
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 9.3 KiB |
|
@ -1,4 +1,4 @@
|
|||
<svg class="bob" font-family="arial" font-size="14" height="336" width="664" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg class="bob" font-family="arial" font-size="14" height="336" width="680" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||
|
@ -56,7 +56,7 @@
|
|||
}
|
||||
|
||||
</style>
|
||||
<rect fill="white" height="336" width="664" x="0" y="0"/>
|
||||
<rect fill="white" height="336" width="680" x="0" y="0"/>
|
||||
<g>
|
||||
<line x1="12" x2="12" y1="124" y2="148"/>
|
||||
<path d="M 12 148 A 4 4 0 0 0 16 152" fill="none"/>
|
||||
|
@ -85,14 +85,14 @@
|
|||
<path d="M 108 244 A 4 4 0 0 0 112 248" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="112" x2="528" y1="8" y2="8"/>
|
||||
<path d="M 532 12 A 4 4 0 0 0 528 8" fill="none"/>
|
||||
<line x1="112" x2="544" y1="8" y2="8"/>
|
||||
<path d="M 548 12 A 4 4 0 0 0 544 8" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="112" x2="380" y1="248" y2="248"/>
|
||||
<line x1="380" x2="484" y1="248" y2="248"/>
|
||||
<line x1="484" x2="528" y1="248" y2="248"/>
|
||||
<path d="M 528 248 A 4 4 0 0 0 532 244" fill="none"/>
|
||||
<line x1="484" x2="544" y1="248" y2="248"/>
|
||||
<path d="M 544 248 A 4 4 0 0 0 548 244" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="132" x2="132" y1="108" y2="164"/>
|
||||
|
@ -203,14 +203,14 @@
|
|||
<path d="M 456 296 A 4 4 0 0 0 452 300" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="456" x2="512" y1="104" y2="104"/>
|
||||
<path d="M 516 108 A 4 4 0 0 0 512 104" fill="none"/>
|
||||
<line x1="456" x2="520" y1="104" y2="104"/>
|
||||
<path d="M 524 108 A 4 4 0 0 0 520 104" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="456" x2="484" y1="168" y2="168"/>
|
||||
<line marker-end="url(#triangle)" x1="484" x2="484" y1="168" y2="284"/>
|
||||
<line x1="484" x2="512" y1="168" y2="168"/>
|
||||
<path d="M 512 168 A 4 4 0 0 0 516 164" fill="none"/>
|
||||
<line x1="484" x2="520" y1="168" y2="168"/>
|
||||
<path d="M 520 168 A 4 4 0 0 0 524 164" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="456" x2="520" y1="296" y2="296"/>
|
||||
|
@ -221,34 +221,34 @@
|
|||
<path d="M 520 328 A 4 4 0 0 0 524 324" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="516" x2="516" y1="108" y2="136"/>
|
||||
<line x1="516" x2="516" y1="136" y2="164"/>
|
||||
<line marker-end="url(#triangle)" x1="516" x2="548" y1="136" y2="136"/>
|
||||
<line x1="524" x2="524" y1="108" y2="136"/>
|
||||
<line x1="524" x2="524" y1="136" y2="164"/>
|
||||
<line marker-end="url(#triangle)" x1="524" x2="564" y1="136" y2="136"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="524" x2="524" y1="300" y2="324"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="532" x2="532" y1="12" y2="128"/>
|
||||
<line x1="548" x2="548" y1="12" y2="128"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="532" x2="532" y1="144" y2="244"/>
|
||||
<line x1="548" x2="548" y1="144" y2="244"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="556" x2="556" y1="124" y2="148"/>
|
||||
<path d="M 556 148 A 4 4 0 0 0 560 152" fill="none"/>
|
||||
<path d="M 560 120 A 4 4 0 0 0 556 124" fill="none"/>
|
||||
<line x1="572" x2="572" y1="108" y2="164"/>
|
||||
<path d="M 572 164 A 4 4 0 0 0 576 168" fill="none"/>
|
||||
<path d="M 576 104 A 4 4 0 0 0 572 108" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="560" x2="656" y1="120" y2="120"/>
|
||||
<path d="M 660 124 A 4 4 0 0 0 656 120" fill="none"/>
|
||||
<line x1="576" x2="672" y1="104" y2="104"/>
|
||||
<path d="M 676 108 A 4 4 0 0 0 672 104" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="560" x2="656" y1="152" y2="152"/>
|
||||
<path d="M 656 152 A 4 4 0 0 0 660 148" fill="none"/>
|
||||
<line x1="576" x2="672" y1="168" y2="168"/>
|
||||
<path d="M 672 168 A 4 4 0 0 0 676 164" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="660" x2="660" y1="124" y2="148"/>
|
||||
<line x1="676" x2="676" y1="108" y2="164"/>
|
||||
</g>
|
||||
<g>
|
||||
<text x="25" y="140">
|
||||
|
@ -276,7 +276,7 @@ SigVerify
|
|||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="249" y="140">
|
||||
<text x="233" y="140">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
|
@ -291,7 +291,7 @@ Banking
|
|||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="361" y="140">
|
||||
<text x="353" y="140">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
|
@ -302,11 +302,16 @@ Bank
|
|||
</g>
|
||||
<g>
|
||||
<text x="465" y="124">
|
||||
Write
|
||||
Ledger
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="465" y="140">
|
||||
Write
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="465" y="156">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
|
@ -316,8 +321,13 @@ Ledger
|
|||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="569" y="140">
|
||||
Validators
|
||||
<text x="585" y="124">
|
||||
Broadcast
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="585" y="140">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 8.0 KiB |
280
src/img/tvu.svg
280
src/img/tvu.svg
|
@ -1,4 +1,4 @@
|
|||
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg class="bob" font-family="arial" font-size="14" height="336" width="768" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
||||
|
@ -56,267 +56,287 @@
|
|||
}
|
||||
|
||||
</style>
|
||||
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
||||
<rect fill="white" height="336" width="768" x="0" y="0"/>
|
||||
<g>
|
||||
<line x1="12" x2="12" y1="108" y2="132"/>
|
||||
<path d="M 12 132 A 4 4 0 0 0 16 136" fill="none"/>
|
||||
<path d="M 16 104 A 4 4 0 0 0 12 108" fill="none"/>
|
||||
<line x1="12" x2="12" y1="156" y2="196"/>
|
||||
<path d="M 12 196 A 4 4 0 0 0 16 200" fill="none"/>
|
||||
<path d="M 16 152 A 4 4 0 0 0 12 156" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="16" x2="80" y1="104" y2="104"/>
|
||||
<path d="M 84 108 A 4 4 0 0 0 80 104" fill="none"/>
|
||||
<line x1="16" x2="112" y1="152" y2="152"/>
|
||||
<path d="M 116 156 A 4 4 0 0 0 112 152" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="16" x2="80" y1="136" y2="136"/>
|
||||
<path d="M 80 136 A 4 4 0 0 0 84 132" fill="none"/>
|
||||
<line x1="16" x2="112" y1="200" y2="200"/>
|
||||
<path d="M 112 200 A 4 4 0 0 0 116 196" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="52" x2="52" y1="12" y2="92"/>
|
||||
<path d="M 56 8 A 4 4 0 0 0 52 12" fill="none"/>
|
||||
<line x1="116" x2="116" y1="156" y2="168"/>
|
||||
<line x1="116" x2="116" y1="168" y2="196"/>
|
||||
<line marker-end="url(#triangle)" x1="116" x2="164" y1="168" y2="168"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="56" x2="408" y1="8" y2="8"/>
|
||||
<path d="M 412 12 A 4 4 0 0 0 408 8" fill="none"/>
|
||||
<line x1="148" x2="148" y1="92" y2="160"/>
|
||||
<path d="M 152 88 A 4 4 0 0 0 148 92" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="84" x2="84" y1="108" y2="132"/>
|
||||
<line x1="148" x2="148" y1="176" y2="244"/>
|
||||
<path d="M 148 244 A 4 4 0 0 0 152 248" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="84" x2="132" y1="120" y2="120"/>
|
||||
<line x1="152" x2="444" y1="88" y2="88"/>
|
||||
<line x1="444" x2="760" y1="88" y2="88"/>
|
||||
<path d="M 764 92 A 4 4 0 0 0 760 88" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="116" x2="116" y1="44" y2="112"/>
|
||||
<path d="M 120 40 A 4 4 0 0 0 116 44" fill="none"/>
|
||||
<line x1="152" x2="220" y1="248" y2="248"/>
|
||||
<line x1="220" x2="308" y1="248" y2="248"/>
|
||||
<line x1="308" x2="444" y1="248" y2="248"/>
|
||||
<line x1="444" x2="760" y1="248" y2="248"/>
|
||||
<path d="M 760 248 A 4 4 0 0 0 764 244" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="116" x2="116" y1="128" y2="196"/>
|
||||
<path d="M 116 196 A 4 4 0 0 0 120 200" fill="none"/>
|
||||
<line x1="172" x2="172" y1="140" y2="196"/>
|
||||
<path d="M 172 196 A 4 4 0 0 0 176 200" fill="none"/>
|
||||
<path d="M 176 136 A 4 4 0 0 0 172 140" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="120" x2="412" y1="40" y2="40"/>
|
||||
<line x1="412" x2="728" y1="40" y2="40"/>
|
||||
<path d="M 732 44 A 4 4 0 0 0 728 40" fill="none"/>
|
||||
<line x1="176" x2="232" y1="136" y2="136"/>
|
||||
<path d="M 236 140 A 4 4 0 0 0 232 136" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="120" x2="188" y1="200" y2="200"/>
|
||||
<line x1="188" x2="276" y1="200" y2="200"/>
|
||||
<line x1="276" x2="412" y1="200" y2="200"/>
|
||||
<line x1="412" x2="728" y1="200" y2="200"/>
|
||||
<path d="M 728 200 A 4 4 0 0 0 732 196" fill="none"/>
|
||||
<line x1="176" x2="232" y1="200" y2="200"/>
|
||||
<path d="M 232 200 A 4 4 0 0 0 236 196" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="140" x2="140" y1="92" y2="148"/>
|
||||
<path d="M 140 148 A 4 4 0 0 0 144 152" fill="none"/>
|
||||
<path d="M 144 88 A 4 4 0 0 0 140 92" fill="none"/>
|
||||
<line x1="212" x2="212" y1="300" y2="324"/>
|
||||
<path d="M 212 324 A 4 4 0 0 0 216 328" fill="none"/>
|
||||
<path d="M 216 296 A 4 4 0 0 0 212 300" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="144" x2="200" y1="88" y2="88"/>
|
||||
<path d="M 204 92 A 4 4 0 0 0 200 88" fill="none"/>
|
||||
<line x1="216" x2="312" y1="328" y2="328"/>
|
||||
<path d="M 312 328 A 4 4 0 0 0 316 324" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="144" x2="200" y1="152" y2="152"/>
|
||||
<path d="M 200 152 A 4 4 0 0 0 204 148" fill="none"/>
|
||||
<line marker-end="url(#triangle)" x1="220" x2="220" y1="224" y2="212"/>
|
||||
<line x1="220" x2="220" y1="224" y2="296"/>
|
||||
<line x1="220" x2="216" y1="296" y2="296"/>
|
||||
<line x1="220" x2="312" y1="296" y2="296"/>
|
||||
<path d="M 316 300 A 4 4 0 0 0 312 296" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="180" x2="180" y1="252" y2="276"/>
|
||||
<path d="M 180 276 A 4 4 0 0 0 184 280" fill="none"/>
|
||||
<path d="M 184 248 A 4 4 0 0 0 180 252" fill="none"/>
|
||||
<line x1="236" x2="236" y1="140" y2="196"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="184" x2="280" y1="280" y2="280"/>
|
||||
<path d="M 280 280 A 4 4 0 0 0 284 276" fill="none"/>
|
||||
<line marker-end="url(#triangle)" x1="236" x2="260" y1="168" y2="168"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="188" x2="188" y1="176" y2="164"/>
|
||||
<line x1="188" x2="188" y1="176" y2="248"/>
|
||||
<line x1="188" x2="184" y1="248" y2="248"/>
|
||||
<line x1="188" x2="280" y1="248" y2="248"/>
|
||||
<path d="M 284 252 A 4 4 0 0 0 280 248" fill="none"/>
|
||||
<line x1="268" x2="268" y1="140" y2="196"/>
|
||||
<path d="M 268 196 A 4 4 0 0 0 272 200" fill="none"/>
|
||||
<path d="M 272 136 A 4 4 0 0 0 268 140" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="204" x2="204" y1="92" y2="148"/>
|
||||
<line x1="272" x2="368" y1="136" y2="136"/>
|
||||
<path d="M 372 140 A 4 4 0 0 0 368 136" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="204" x2="228" y1="120" y2="120"/>
|
||||
<line x1="272" x2="308" y1="200" y2="200"/>
|
||||
<line marker-end="url(#triangle)" x1="308" x2="308" y1="200" y2="284"/>
|
||||
<line x1="308" x2="368" y1="200" y2="200"/>
|
||||
<path d="M 368 200 A 4 4 0 0 0 372 196" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="236" x2="236" y1="92" y2="148"/>
|
||||
<path d="M 236 148 A 4 4 0 0 0 240 152" fill="none"/>
|
||||
<path d="M 240 88 A 4 4 0 0 0 236 92" fill="none"/>
|
||||
<line x1="316" x2="316" y1="300" y2="324"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="240" x2="336" y1="88" y2="88"/>
|
||||
<path d="M 340 92 A 4 4 0 0 0 336 88" fill="none"/>
|
||||
<line x1="372" x2="372" y1="140" y2="196"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="240" x2="276" y1="152" y2="152"/>
|
||||
<line marker-end="url(#triangle)" x1="276" x2="276" y1="152" y2="236"/>
|
||||
<line x1="276" x2="336" y1="152" y2="152"/>
|
||||
<path d="M 336 152 A 4 4 0 0 0 340 148" fill="none"/>
|
||||
<line marker-end="url(#triangle)" x1="372" x2="396" y1="168" y2="168"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="284" x2="284" y1="252" y2="276"/>
|
||||
<line x1="404" x2="404" y1="12" y2="36"/>
|
||||
<path d="M 404 36 A 4 4 0 0 0 408 40" fill="none"/>
|
||||
<path d="M 408 8 A 4 4 0 0 0 404 12" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="340" x2="340" y1="92" y2="148"/>
|
||||
<line x1="404" x2="404" y1="140" y2="196"/>
|
||||
<path d="M 404 196 A 4 4 0 0 0 408 200" fill="none"/>
|
||||
<path d="M 408 136 A 4 4 0 0 0 404 140" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="340" x2="364" y1="120" y2="120"/>
|
||||
<line x1="408" x2="472" y1="8" y2="8"/>
|
||||
<path d="M 476 12 A 4 4 0 0 0 472 8" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="372" x2="372" y1="92" y2="148"/>
|
||||
<path d="M 372 148 A 4 4 0 0 0 376 152" fill="none"/>
|
||||
<path d="M 376 88 A 4 4 0 0 0 372 92" fill="none"/>
|
||||
<line x1="408" x2="472" y1="40" y2="40"/>
|
||||
<path d="M 472 40 A 4 4 0 0 0 476 36" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="376" x2="412" y1="88" y2="88"/>
|
||||
<line x1="412" x2="412" y1="12" y2="88"/>
|
||||
<line x1="412" x2="488" y1="88" y2="88"/>
|
||||
<path d="M 492 92 A 4 4 0 0 0 488 88" fill="none"/>
|
||||
<line x1="408" x2="444" y1="136" y2="136"/>
|
||||
<line x1="444" x2="444" y1="64" y2="136"/>
|
||||
<line x1="444" x2="520" y1="136" y2="136"/>
|
||||
<path d="M 524 140 A 4 4 0 0 0 520 136" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="376" x2="412" y1="152" y2="152"/>
|
||||
<line marker-end="url(#triangle)" x1="412" x2="412" y1="152" y2="236"/>
|
||||
<line x1="412" x2="488" y1="152" y2="152"/>
|
||||
<path d="M 488 152 A 4 4 0 0 0 492 148" fill="none"/>
|
||||
<line x1="408" x2="444" y1="200" y2="200"/>
|
||||
<line marker-end="url(#triangle)" x1="444" x2="444" y1="200" y2="284"/>
|
||||
<line x1="444" x2="520" y1="200" y2="200"/>
|
||||
<path d="M 520 200 A 4 4 0 0 0 524 196" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="388" x2="388" y1="252" y2="276"/>
|
||||
<path d="M 388 276 A 4 4 0 0 0 392 280" fill="none"/>
|
||||
<path d="M 392 248 A 4 4 0 0 0 388 252" fill="none"/>
|
||||
<line x1="420" x2="420" y1="300" y2="324"/>
|
||||
<path d="M 420 324 A 4 4 0 0 0 424 328" fill="none"/>
|
||||
<path d="M 424 296 A 4 4 0 0 0 420 300" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="392" x2="440" y1="248" y2="248"/>
|
||||
<path d="M 444 252 A 4 4 0 0 0 440 248" fill="none"/>
|
||||
<line x1="424" x2="472" y1="296" y2="296"/>
|
||||
<path d="M 476 300 A 4 4 0 0 0 472 296" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="392" x2="440" y1="280" y2="280"/>
|
||||
<path d="M 440 280 A 4 4 0 0 0 444 276" fill="none"/>
|
||||
<line x1="424" x2="472" y1="328" y2="328"/>
|
||||
<path d="M 472 328 A 4 4 0 0 0 476 324" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="444" x2="444" y1="252" y2="276"/>
|
||||
<line marker-end="url(#triangle)" x1="444" x2="444" y1="64" y2="52"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="492" x2="492" y1="92" y2="148"/>
|
||||
<line x1="476" x2="476" y1="12" y2="36"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="492" x2="516" y1="120" y2="120"/>
|
||||
<line x1="476" x2="476" y1="300" y2="324"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="524" x2="524" y1="92" y2="148"/>
|
||||
<path d="M 524 148 A 4 4 0 0 0 528 152" fill="none"/>
|
||||
<path d="M 528 88 A 4 4 0 0 0 524 92" fill="none"/>
|
||||
<line x1="524" x2="524" y1="140" y2="196"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="528" x2="592" y1="88" y2="88"/>
|
||||
<path d="M 596 92 A 4 4 0 0 0 592 88" fill="none"/>
|
||||
<line marker-end="url(#triangle)" x1="524" x2="548" y1="168" y2="168"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="528" x2="592" y1="152" y2="152"/>
|
||||
<path d="M 592 152 A 4 4 0 0 0 596 148" fill="none"/>
|
||||
<line x1="556" x2="556" y1="140" y2="196"/>
|
||||
<path d="M 556 196 A 4 4 0 0 0 560 200" fill="none"/>
|
||||
<path d="M 560 136 A 4 4 0 0 0 556 140" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="596" x2="596" y1="92" y2="148"/>
|
||||
<line x1="560" x2="624" y1="136" y2="136"/>
|
||||
<path d="M 628 140 A 4 4 0 0 0 624 136" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line marker-end="url(#triangle)" x1="596" x2="620" y1="120" y2="120"/>
|
||||
<line x1="560" x2="624" y1="200" y2="200"/>
|
||||
<path d="M 624 200 A 4 4 0 0 0 628 196" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="628" x2="628" y1="92" y2="148"/>
|
||||
<path d="M 628 148 A 4 4 0 0 0 632 152" fill="none"/>
|
||||
<path d="M 632 88 A 4 4 0 0 0 628 92" fill="none"/>
|
||||
<line x1="628" x2="628" y1="140" y2="196"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="632" x2="704" y1="88" y2="88"/>
|
||||
<path d="M 708 92 A 4 4 0 0 0 704 88" fill="none"/>
|
||||
<line marker-end="url(#triangle)" x1="628" x2="652" y1="168" y2="168"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="632" x2="704" y1="152" y2="152"/>
|
||||
<path d="M 704 152 A 4 4 0 0 0 708 148" fill="none"/>
|
||||
<line x1="660" x2="660" y1="140" y2="196"/>
|
||||
<path d="M 660 196 A 4 4 0 0 0 664 200" fill="none"/>
|
||||
<path d="M 664 136 A 4 4 0 0 0 660 140" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="708" x2="708" y1="92" y2="148"/>
|
||||
<line x1="664" x2="736" y1="136" y2="136"/>
|
||||
<path d="M 740 140 A 4 4 0 0 0 736 136" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="732" x2="732" y1="44" y2="196"/>
|
||||
<line x1="664" x2="736" y1="200" y2="200"/>
|
||||
<path d="M 736 200 A 4 4 0 0 0 740 196" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<text x="25" y="124">
|
||||
Leader
|
||||
<line x1="740" x2="740" y1="140" y2="196"/>
|
||||
</g>
|
||||
<g>
|
||||
<line x1="764" x2="764" y1="92" y2="244"/>
|
||||
</g>
|
||||
<g>
|
||||
<text x="25" y="172">
|
||||
Upstream
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="137" y="60">
|
||||
Tvu
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="153" y="108">
|
||||
Blob
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="153" y="124">
|
||||
Fetch
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="153" y="140">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="193" y="268">
|
||||
<text x="25" y="188">
|
||||
Validators
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="249" y="108">
|
||||
<text x="169" y="108">
|
||||
Tvu
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="185" y="156">
|
||||
Blob
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="185" y="172">
|
||||
Fetch
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="185" y="188">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="249" y="316">
|
||||
Ncp
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="281" y="156">
|
||||
Retransmit
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="265" y="124">
|
||||
<text x="281" y="172">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="385" y="108">
|
||||
<text x="417" y="28">
|
||||
Leader
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="417" y="156">
|
||||
Replicate
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="401" y="124">
|
||||
<text x="417" y="172">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="401" y="268">
|
||||
<text x="433" y="316">
|
||||
Bank
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="537" y="108">
|
||||
<text x="569" y="156">
|
||||
Ledger
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="537" y="124">
|
||||
<text x="569" y="172">
|
||||
Write
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="537" y="140">
|
||||
<text x="569" y="188">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="641" y="108">
|
||||
<text x="673" y="156">
|
||||
Storage
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="649" y="124">
|
||||
<text x="673" y="172">
|
||||
Stage
|
||||
</text>
|
||||
</g>
|
||||
|
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 8.1 KiB |
|
@ -1,3 +1,3 @@
|
|||
# Ncp
|
||||
# The Network Control Plane
|
||||
|
||||
The Network Control Plane implements a gossip network between all nodes on in the cluster.
|
||||
The Network Control Plane (Ncp) implements a gossip network between all nodes on in the cluster.
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
# The Solana SDK
|
||||
|
||||
## Introduction
|
||||
# Programming Model
|
||||
|
||||
With the Solana runtime, we can execute on-chain programs concurrently, and
|
||||
written in the client’s choice of programming language.
|
||||
|
@ -21,14 +19,14 @@ ELF and passes it the client's message for interpretation.
|
|||
Solana supports several kinds of persistent storage, called *accounts*:
|
||||
|
||||
1. Executable
|
||||
2. Writable by a client
|
||||
3. Writable by a program
|
||||
4. Read-only
|
||||
2. Owned by a client
|
||||
3. Owned by a program
|
||||
4. Credit-only
|
||||
|
||||
All accounts are identified by public keys and may hold arbirary data.
|
||||
When the client sends messages to programs, it requests access to storage
|
||||
using those keys. The runtime loads the account data and passes it to the
|
||||
program. The runtime also ensures accounts aren't written to if not owned
|
||||
by the client or program. Any writes to read-only accounts are discarded
|
||||
by the client or program. Any writes to credit-only accounts are discarded
|
||||
unless the write was to credit tokens. Any user may credit other accounts
|
||||
tokens, regardless of account permission.
|
||||
|
|
100
src/runtime.md
100
src/runtime.md
|
@ -1,39 +1,29 @@
|
|||
# Runtime
|
||||
|
||||
The goal with the runtime is to have a general purpose execution environment
|
||||
that is highly parallelizable. To achieve this goal the runtime forces each
|
||||
Instruction to specify all of its memory dependencies up front, and therefore a
|
||||
single Instruction cannot cause a dynamic memory allocation. An explicit
|
||||
Instruction for memory allocation from the `SystemProgram::CreateAccount` is
|
||||
the only way to allocate new memory in the engine. A Transaction may compose
|
||||
multiple Instruction, including `SystemProgram::CreateAccount`, into a single
|
||||
atomic sequence which allows for memory allocation to achieve a result that is
|
||||
similar to dynamic allocation.
|
||||
The runtime is a concurrent transaction processor. Transactions specify their
|
||||
data dependencies upfront and dynamic memory allocation is explicit. By
|
||||
separating program code from the state it operates on, the runtime is able to
|
||||
choreograph concurrent access. Transactions accessing only credit-only
|
||||
accounts are executed in parallel whereas transactions accessing writable
|
||||
accounts are serialized. The runtime interacts with the program through an
|
||||
entrypoint with a well-defined interface. The userdata stored in an account is
|
||||
an opaque type, an array of bytes. The program has full control over its
|
||||
contents.
|
||||
|
||||
The transaction structure specifies a list of public keys and signatures for
|
||||
those keys and a sequential list of instructions that will operate over the
|
||||
states associated with the account keys. For the transaction to be committed
|
||||
all the instructions must execute successfully; if any abort the whole
|
||||
transaction fails to commit.
|
||||
|
||||
### State
|
||||
### Account structure
|
||||
|
||||
State is addressed by an Account which is at the moment simply the Pubkey. Our
|
||||
goal is to eliminate memory allocation from within the program itself. Thus
|
||||
the client of the program provides all the state that is necessary for the
|
||||
program to execute in the transaction itself. The runtime interacts with the
|
||||
program through an entry point with a well defined interface. The userdata
|
||||
stored in an Account is an opaque type to the runtime, a `Vec<u8>`, the
|
||||
contents of which the program code has full control over.
|
||||
|
||||
The Transaction structure specifies a list of Pubkey's and signatures for those
|
||||
keys and a sequential list of instructions that will operate over the state's
|
||||
associated with the `account_keys`. For the transaction to be committed all
|
||||
the instructions must execute successfully, if any abort the whole transaction
|
||||
fails to commit.
|
||||
|
||||
### Account structure Accounts maintain token state as well as program specific
|
||||
memory.
|
||||
Accounts maintain a token balance and program-specific memory.
|
||||
|
||||
# Transaction Engine
|
||||
|
||||
At its core, the engine looks up all the Pubkeys maps them to accounts and
|
||||
routs them to the `program_id` entry point.
|
||||
The engine maps public keys to accounts and routes them to the program's
|
||||
entrypoint.
|
||||
|
||||
## Execution
|
||||
|
||||
|
@ -41,48 +31,48 @@ Transactions are batched and processed in a pipeline
|
|||
|
||||
<img alt="Runtime pipeline" src="img/runtime.svg" class="center"/>
|
||||
|
||||
At the `execute` stage, the loaded pages have no data dependencies, so all the
|
||||
At the *execute* stage, the loaded pages have no data dependencies, so all the
|
||||
programs can be executed in parallel.
|
||||
|
||||
The runtime enforces the following rules:
|
||||
|
||||
1. The `program_id` code is the only code that will modify the contents of
|
||||
`Account::userdata` of Account's that have been assigned to it. This means
|
||||
that upon assignment userdata vector is guaranteed to be `0`.
|
||||
1. Only the *owner* program may modify the contents of an account. This means
|
||||
that upon assignment userdata vector is guaranteed to be zero.
|
||||
2. Total balances on all the accounts is equal before and after execution of a
|
||||
Transaction.
|
||||
3. Balances of each of the accounts not assigned to `program_id` must be equal
|
||||
to or greater after the Transaction than before the transaction.
|
||||
4. All Instructions in the Transaction executed without a failure.
|
||||
transaction.
|
||||
3. After the transaction is executed, balances of credit-only accounts must be
|
||||
greater than or equal to the balances before the transaction.
|
||||
4. All instructions in the transaction executed atomically. If one fails, all
|
||||
account modifications are discarded.
|
||||
|
||||
## Entry Point Execution of the program involves mapping the Program's public
|
||||
key to an entry point which takes a pointer to the transaction, and an array of
|
||||
loaded pages.
|
||||
Execution of the program involves mapping the program's public key to an
|
||||
entrypoint which takes a pointer to the transaction, and an array of loaded
|
||||
pages.
|
||||
|
||||
## System Interface
|
||||
## SystemProgram Interface
|
||||
|
||||
The interface is best described by the `Instruction::userdata` that the
|
||||
user encodes.
|
||||
* `CreateAccount` - This allows the user to create and assign an Account to a
|
||||
The interface is best described by the `Instruction::userdata` that the user
|
||||
encodes.
|
||||
|
||||
* `CreateAccount` - This allows the user to create and assign an account to a
|
||||
Program.
|
||||
* `Assign` - allows the user to assign an existing account to a `Program`.
|
||||
* `Move` - moves tokens between `Account`s that are associated with
|
||||
`SystemProgram`. This cannot be used to move tokens of other `Account`s.
|
||||
Programs need to implement their own version of Move.
|
||||
* `Assign` - allows the user to assign an existing account to a program.
|
||||
* `Move` - moves tokens between account's that are associated with
|
||||
* `Spawn` - spawn a new program from an account
|
||||
|
||||
## Notes
|
||||
|
||||
1. There is no dynamic memory allocation. Client's need to call the
|
||||
`SystemProgram` to create memory before passing it to another program. This
|
||||
Instruction can be composed into a single Transaction with the call to the
|
||||
1. There is no dynamic memory allocation. Client's need to use `CreateAccount`
|
||||
instructions to create memory before passing it to another program. This
|
||||
instruction can be composed into a single transaction with the call to the
|
||||
program itself.
|
||||
2. Runtime guarantees that when memory is assigned to the `Program` it is zero
|
||||
2. Runtime guarantees that when memory is assigned to the program it is zero
|
||||
initialized.
|
||||
3. Runtime guarantees that `Program`'s code is the only thing that can modify
|
||||
3. Runtime guarantees that a program's code is the only thing that can modify
|
||||
memory that its assigned to
|
||||
4. Runtime guarantees that the `Program` can only spend tokens that are in
|
||||
`Account`s that are assigned to it
|
||||
5. Runtime guarantees the balances belonging to `Account`s are balanced before
|
||||
4. Runtime guarantees that the program can only spend tokens that are in
|
||||
accounts that are assigned to it
|
||||
5. Runtime guarantees the balances belonging to accounts are balanced before
|
||||
and after the transaction
|
||||
6. Runtime guarantees that multiple instructions all executed successfully when
|
||||
a transaction is committed.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Introduction to VDFs
|
||||
# Verifiable Delay Functions
|
||||
|
||||
A Verifiable Delay Function is conceptually a water clock where its water marks
|
||||
can be recorded and later verified that the water most certainly passed
|
||||
|
|
Loading…
Reference in New Issue