作者:Andrew Chow

来源:https://bitcoin.stackexchange.com/questions/99540/what-are-output-descriptors

输出描述符(请注意,“输出描述符” 和 “钱包描述符” 是同一种东西)是一串人类可以解读的字符,代表着一个输出脚本(一个 scriptPubKey)以及为了解决 1 这个脚本所需的所有信息。描述符还带有一个 bech32 型的校验和,可以降低描述符在传递给他人时意外输错字符或丢失字符的风险。

注 1:“解决” 一个脚本的意思是,如果你拥有对应的私钥,你就能够创建一个带有有效签名的 scriptSig/witness(脚本签名/见证数据)。

描述符可以清楚地显示一个输出所用的公钥(派生公钥(extended keys)的推导路径也会显示)和脚本。这使得它们很适合导入其他钱包而不用担心有混淆。相反,传统的导入机制仅支持导入私钥,并使用特殊的版本控制机制来指示要生成什么样的脚本,并且不提供推导路径。这会导致一种情形:用户导入了一把扩展公钥,却不能看到自己的地址,因为这个钱包使用了跟原钱包不同的扩展路径。描述符避免了这个问题,因为它完全指定了推导路径(只要有的话)和生成出来的脚本。

描述符钱包则是一个存储输出描述符、并使用它们来创建地址和签名交易的软件。通过将地址生成和交易签名抽象到一个很大程度上独立的模块中,这样的钱包可以更容易地升级到使用新的钱包类型。

对于大部分用户来说,唯一能察觉到区别的时候就是钱包 导出/导入 的时候。描述符只会在导出期间展示,而且只会在用户想要导入钱包时才需要处理。钱包在内部使用描述符时,一般不会让用户察觉。

(完)