Pieter Wuille [ARCHIVE] on Nostr: 📅 Original date posted:2018-05-23 📝 Original message:On Tue, May 22, 2018 at ...
📅 Original date posted:2018-05-23
📝 Original message:On Tue, May 22, 2018 at 11:17 AM, Pieter Wuille <pieter.wuille at gmail.com> wrote:
> Hello all,
>
> Given the recent discussions about Taproot [1] and Graftroot [2], I
> was wondering if a practical deployment needs a way to explicitly
> enable or disable the Graftroot spending path. I have no strong
> reasons why this would be necessary, but I'd like to hear other
> people's thoughts.
Thanks everyone who commented so far, but let me clarify the context
of this question first a bit more to avoid getting into the weeds too
much.
If it turns out to be necessary to explicitly commit to permitting
Graftroot spending, there are a number of approaches:
* Use a different witness version (or other marker directly in the
scriptPubKey) to enable Graftroot.
* Signal the permission to spend through Graftroot inside the Taproot
script as suggested by ZmnSCPxj.
* Make "Spend through Graftroot" a special script (possibly indirectly
with a Merkle tree in Taproot).
* Implement Graftroot as an opcode/feature inside the scripting
language (which may be more generically useful as a delegation
mechanism).
* Postpone Graftroot.
All of these are worse in either efficiency or privacy than always
permitting Graftroot spends directly. Because of that, I think we
should first focus on reasons why a lack of commitment to enabling
Graftroot may result in it being incompatible with certain use cases,
or other reasons why it could interfere with applications adopting
such outputs.
@Natanael: all of these concerns only apply to a new hypothetical
Taproot/Graftroot output type, which combines pay-to-pubkey and
pay-to-script in a single scriptPubKey that just contains a public
key. It doesn't apply to existing P2SH like constructions.
Also, the concern of making Graftroot optional does not apply to
Taproot, as the Taproot spending path's script is committed to (using
scriptPubKey = P + H(P,script)*G), allowing the script to be
explicitly chosen to be a non-spendable script, which the author could
prove is the case (without revealing it to the entire world).
It is also always possible to create a "script only" Taproot output
(without key that can unconditionally spend), by picking a pubkey that
is provably unspendable (hashing onto a curve point, in particular),
or through pubkey recovery.
Cheers,
--
Pieter
Published at
2023-06-07 18:12:26Event JSON
{
"id": "34f82f51f04a9484d52cdc64ba6535a1f406b5a5983e0f4ddd4a63f7495fc7a8",
"pubkey": "5cb21bf5d7f25a9d46879713cbd32433bbc10e40ef813a3c28fe7355f49854d6",
"created_at": 1686161546,
"kind": 1,
"tags": [
[
"e",
"e26b3d683cd7b5bec12686847cb6e45848c3e2dbd7f6b99e59a94b1bc41269f6",
"",
"root"
],
[
"e",
"137072d89058ced4a119c00b63257741d5f14a97116ebbace5c69056feba165b",
"",
"reply"
],
[
"p",
"f14f3c71a4e63a12c842e4a50471263ada4b6cfde093fcb6588693a726b9b018"
]
],
"content": "📅 Original date posted:2018-05-23\n📝 Original message:On Tue, May 22, 2018 at 11:17 AM, Pieter Wuille \u003cpieter.wuille at gmail.com\u003e wrote:\n\u003e Hello all,\n\u003e\n\u003e Given the recent discussions about Taproot [1] and Graftroot [2], I\n\u003e was wondering if a practical deployment needs a way to explicitly\n\u003e enable or disable the Graftroot spending path. I have no strong\n\u003e reasons why this would be necessary, but I'd like to hear other\n\u003e people's thoughts.\n\nThanks everyone who commented so far, but let me clarify the context\nof this question first a bit more to avoid getting into the weeds too\nmuch.\n\nIf it turns out to be necessary to explicitly commit to permitting\nGraftroot spending, there are a number of approaches:\n* Use a different witness version (or other marker directly in the\nscriptPubKey) to enable Graftroot.\n* Signal the permission to spend through Graftroot inside the Taproot\nscript as suggested by ZmnSCPxj.\n* Make \"Spend through Graftroot\" a special script (possibly indirectly\nwith a Merkle tree in Taproot).\n* Implement Graftroot as an opcode/feature inside the scripting\nlanguage (which may be more generically useful as a delegation\nmechanism).\n* Postpone Graftroot.\n\nAll of these are worse in either efficiency or privacy than always\npermitting Graftroot spends directly. Because of that, I think we\nshould first focus on reasons why a lack of commitment to enabling\nGraftroot may result in it being incompatible with certain use cases,\nor other reasons why it could interfere with applications adopting\nsuch outputs.\n\n@Natanael: all of these concerns only apply to a new hypothetical\nTaproot/Graftroot output type, which combines pay-to-pubkey and\npay-to-script in a single scriptPubKey that just contains a public\nkey. It doesn't apply to existing P2SH like constructions.\n\nAlso, the concern of making Graftroot optional does not apply to\nTaproot, as the Taproot spending path's script is committed to (using\nscriptPubKey = P + H(P,script)*G), allowing the script to be\nexplicitly chosen to be a non-spendable script, which the author could\nprove is the case (without revealing it to the entire world).\n\nIt is also always possible to create a \"script only\" Taproot output\n(without key that can unconditionally spend), by picking a pubkey that\nis provably unspendable (hashing onto a curve point, in particular),\nor through pubkey recovery.\n\nCheers,\n\n-- \nPieter",
"sig": "0a096ff5824b7791809f2c9a7993d467c26c6914f6434a769298fbaf80eda4cfc540bda55359b2d8757d5c3756b9518b7c89b54189692b6a7921191ec7df1e31"
}