0385 - Final - Informational - June 27, 2021 (5 years ago)
27
2021
BIP: 385
Layer: Applications
Title: raw() and addr() Output Script Descriptors
Author: Pieter Wuille <[email protected]>
Ava Chow <[email protected]>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP 385
Status: Final
Type: Informational
Created: 2021-06-27
License: BSD-2-Clause
Requires: 380
This document specifies
raw()
and
addr()
output script descriptors.
raw()
encapsulates a raw script
as a descriptor.
addr()
encapsulates an address as a
descriptor.
This BIP is licensed under the BSD 2-clause license.
In order to make descriptors maximally compatible with scripts in use today, it is useful to be able to wrap any arbitrary output script or an address into a descriptor.
Two new script expressions are defined:
raw()
and
addr()
.
raw()
The
raw(HEX)
expression can only be used as a top level
descriptor. As the argument, it takes a hex string representing a
Bitcoin script. The output script produced by this descriptor is the
script represented by
HEX
.
addr()
The
addr(ADDR)
expression can only be used as a top
level descriptor. It takes an address as its single argument. The output
script produced by this descriptor is the output script produced by the
address
ADDR
.
Valid descriptors followed by the scripts they produce.
raw(deadbeef)
deadbeef
raw(512103a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd4104a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea23552ae)
512103a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd4104a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea23552ae
raw(a9149a4d9901d6af519b2a23d4a2f51650fcba87ce7b87)
a9149a4d9901d6af519b2a23d4a2f51650fcba87ce7b87
addr(3PUNyaW7M55oKWJ3kDukwk9bsKvryra15j)
a914eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee87
Invalid descriptors
raw(asdf)
addr(asdf)
raw
nested in
sh
:
sh(raw(deadbeef))
raw
nested in
wsh
:
wsh(raw(deadbeef))
addr
nested in
sh
:
sh(addr(3PUNyaW7M55oKWJ3kDukwk9bsKvryra15j))
addr
nested in
wsh
:
wsh(addr(3PUNyaW7M55oKWJ3kDukwk9bsKvryra15j))
raw()
and
addr()
descriptors use the format
and general operation specified in
380
. As this is a wholly new
descriptor, it is not compatible with any implementation. The reuse of
existing Bitcoin addresses allows for this to be more easily
implemented.
raw()
and
addr()
descriptors have been
implemented in Bitcoin Core since version 0.17.