From 2421074a7436237343dcd77a5136b8580688202e Mon Sep 17 00:00:00 2001 From: fbock Date: Wed, 8 May 2024 18:34:02 +0200 Subject: [PATCH] added anyonecanpay to sighash doc --- docs/TapTrade_obs/.obsidian/workspace.json | 26 ++++++------------ .../Signature and Flags.canvas | 10 ++++--- docs/TapTrade_obs/assets/anyonecanpay.webp | Bin 0 -> 11042 bytes 3 files changed, 14 insertions(+), 22 deletions(-) create mode 100644 docs/TapTrade_obs/assets/anyonecanpay.webp diff --git a/docs/TapTrade_obs/.obsidian/workspace.json b/docs/TapTrade_obs/.obsidian/workspace.json index 15accab..c8db380 100644 --- a/docs/TapTrade_obs/.obsidian/workspace.json +++ b/docs/TapTrade_obs/.obsidian/workspace.json @@ -4,22 +4,15 @@ "type": "split", "children": [ { - "id": "569fa596d7e5f0e4", + "id": "83f3e4f8fc8a23bd", "type": "tabs", "children": [ { - "id": "a55c01f7d8f62386", + "id": "a6f226df420e6a1a", "type": "leaf", "state": { - "type": "canvas", - "state": { - "file": "Research/Bitcoin fundamentals/Signature and Flags.canvas", - "viewState": { - "x": 1051.5, - "y": -8.026990156291024, - "zoom": -0.28644350006291147 - } - } + "type": "empty", + "state": {} } } ] @@ -88,7 +81,6 @@ "state": { "type": "backlink", "state": { - "file": "Research/Bitcoin fundamentals/Signature and Flags.canvas", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -105,7 +97,6 @@ "state": { "type": "outgoing-link", "state": { - "file": "Research/Bitcoin fundamentals/Signature and Flags.canvas", "linksCollapsed": false, "unlinkedCollapsed": true } @@ -127,9 +118,7 @@ "type": "leaf", "state": { "type": "outline", - "state": { - "file": "Research/Bitcoin fundamentals/Signature and Flags.canvas" - } + "state": {} } } ] @@ -149,11 +138,12 @@ "command-palette:Open command palette": false } }, - "active": "a55c01f7d8f62386", + "active": "a6f226df420e6a1a", "lastOpenFiles": [ - "Research/Trade Pipelines/current trade flow.canvas", "Research/Bitcoin fundamentals/Signature and Flags.canvas", + "assets/anyonecanpay.webp", "Research/Bitcoin fundamentals/Spending Taproot UTXOs.md", + "Research/Trade Pipelines/current trade flow.canvas", "Research/Bitcoin fundamentals/Taproot output structure.canvas", "Research/Implementation/UI ideas.canvas", "Research/Implementation/Libraries.md", diff --git a/docs/TapTrade_obs/Research/Bitcoin fundamentals/Signature and Flags.canvas b/docs/TapTrade_obs/Research/Bitcoin fundamentals/Signature and Flags.canvas index 0c40f4c..d25d748 100644 --- a/docs/TapTrade_obs/Research/Bitcoin fundamentals/Signature and Flags.canvas +++ b/docs/TapTrade_obs/Research/Bitcoin fundamentals/Signature and Flags.canvas @@ -8,9 +8,10 @@ {"id":"8526cdb3e9883674","type":"text","text":"For **SIGHASH** **ALL**, given a transaction Tx, the signature applies to all of Tx’s inputs and all its outputs\n\nThe transaction is rendered invalid if any of its details are changed because the signature will change too and be invalid.","x":1100,"y":-356,"width":391,"height":200,"color":"5"}, {"id":"39bb6307899c5d87","type":"text","text":"1. Create a copy of the transaction\n2. Empty each script_sig for all inputs and replace with the script_pubkey they reference\n3. Empty out all output fields\n4. Serialize the transaction\n5. Append 0x02 to **Tx_ser**, hash, and then sign","x":1620,"y":-169,"width":660,"height":207,"color":"1"}, {"id":"0e6dda772fa0f997","type":"text","text":"For **SIGHASH** **NONE**, the signature applies to all of Tx’s inputs but to none of the outputs.","x":1100,"y":-104,"width":400,"height":78,"color":"1"}, - {"id":"4783ea786041b3c4","x":1100,"y":38,"width":400,"height":200,"color":"4","type":"text","text":"For **SIGHASH** **SINGLE**, all the inputs of the given transaction Tx are signed and one output that has the same index of one of the inputs being signed. This is essentially “authorizing all other inputs to go with a specific output” (Song, 2019, p. 133)."}, - {"id":"17953abf6e32fa3d","x":1620,"y":121,"width":660,"height":199,"color":"4","type":"text","text":"1. Create a copy of the transaction\n2. Empty script_sigs for each input and replace with the script_pubkey they reference\n3. Empty out all output fields bar the specific output\n4. Serialize the transaction\n5. Append 0x03 to **Tx_ser**, hash, and then sign"}, - {"id":"ee8fd83cff1ef0ba","x":1018,"y":-662,"width":473,"height":222,"color":"2","type":"text","text":"An **ANYONECANPAY** modifier flag exists that can be added to the aforementioned flags that apply to a **single** input in a transaction. Rosenbaum (2019) considers the ANYONECANPAY modifier flag as a way to commit to inputs only, by setting or not setting it, and the existing SIGHASH types (ALL, NONE, SINGLE) as a way to commit to outputs only."} + {"id":"4783ea786041b3c4","type":"text","text":"For **SIGHASH** **SINGLE**, all the inputs of the given transaction Tx are signed and one output that has the same index of one of the inputs being signed. This is essentially “authorizing all other inputs to go with a specific output” (Song, 2019, p. 133).","x":1100,"y":38,"width":400,"height":200,"color":"4"}, + {"id":"17953abf6e32fa3d","type":"text","text":"1. Create a copy of the transaction\n2. Empty script_sigs for each input and replace with the script_pubkey they reference\n3. Empty out all output fields bar the specific output\n4. Serialize the transaction\n5. Append 0x03 to **Tx_ser**, hash, and then sign","x":1620,"y":121,"width":660,"height":199,"color":"4"}, + {"id":"ee8fd83cff1ef0ba","type":"text","text":"An **ANYONECANPAY** modifier flag exists that can be added to the aforementioned flags that apply to a **single** input in a transaction. Rosenbaum (2019) considers the ANYONECANPAY modifier flag as a way to commit to inputs only, by setting or not setting it, and the existing SIGHASH types (ALL, NONE, SINGLE) as a way to commit to outputs only.","x":1018,"y":-662,"width":473,"height":222,"color":"2"}, + {"id":"b93d1dd0b0feb448","x":1055,"y":-1000,"width":400,"height":297,"type":"file","file":"assets/anyonecanpay.webp"} ], "edges":[ {"id":"1c3a1e2cc3bf2afa","fromNode":"64e37547f27f3e55","fromSide":"right","toNode":"64c991bc18fbc277","toSide":"left"}, @@ -20,6 +21,7 @@ {"id":"3f4068b0a4c19f71","fromNode":"0e6dda772fa0f997","fromSide":"right","toNode":"39bb6307899c5d87","toSide":"left"}, {"id":"a9eb41d7c10ebe6d","fromNode":"64c991bc18fbc277","fromSide":"right","toNode":"4783ea786041b3c4","toSide":"left"}, {"id":"df5f1dd7d4be7955","fromNode":"4783ea786041b3c4","fromSide":"right","toNode":"17953abf6e32fa3d","toSide":"left"}, - {"id":"ffddd1b2b5019de2","fromNode":"64c991bc18fbc277","fromSide":"top","toNode":"ee8fd83cff1ef0ba","toSide":"left"} + {"id":"ffddd1b2b5019de2","fromNode":"64c991bc18fbc277","fromSide":"top","toNode":"ee8fd83cff1ef0ba","toSide":"left"}, + {"id":"4f220c13ebdf58ab","fromNode":"ee8fd83cff1ef0ba","fromSide":"top","toNode":"b93d1dd0b0feb448","toSide":"bottom"} ] } \ No newline at end of file diff --git a/docs/TapTrade_obs/assets/anyonecanpay.webp b/docs/TapTrade_obs/assets/anyonecanpay.webp new file mode 100644 index 0000000000000000000000000000000000000000..d70ebeb7f63f5d4c0c101d5ab84ff2904df30b26 GIT binary patch literal 11042 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