From 1cdd4395aa18d2f3685c43abe77b6991583002f9 Mon Sep 17 00:00:00 2001 From: JSwambo Date: Fri, 14 Jan 2022 19:09:20 +0000 Subject: [PATCH] introduction: replace out-dated revault.pdf with introduction.md Removed: The 'Keys' section was removed in favour of a more detailed spec coming with #107 The 'Transactions' section was removed as it duplicates transactions.md 'Acknowledgements' section removed. Should it be somewhere else in the repo? New content: Updated transaction diagram using descriptors abstraction. Discussed options for revault deployments and the infrastructure requriements. Still to do: The 'fee bumping' section was mostly removed as we are approaching it differently. New approach needs description and rationale. 'Threat model' needs updating to better reflect our current understanding. 'Further Discussion' removed as this information is mostly out-dated or duplicated. --- Revault-Tx-Diagram.png | Bin 0 -> 141796 bytes introduction.md | 144 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 Revault-Tx-Diagram.png create mode 100644 introduction.md diff --git a/Revault-Tx-Diagram.png b/Revault-Tx-Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..6e3ddc920a74d5892c555b69780ae2057e829569 GIT binary patch literal 141796 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