【比特币】BIP-0021 详细说明

简介:

BIP-0021 详细说明

  BIP: 21
  Layer: Applications
  Title: URI方案
  Author: Nils Schneider <nils.schneider@gmail.com>
          Matt Corallo <bip21@bluematt.me>
  Comments-Summary: No comments yet.
  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0021
  Status: Final
  Type: Standards Track
  Created: 2012-01-29

这个BIP是Luke Dashjr早期BIP 0020的一个修改。 BIP 0020基于Nils Schneider早期的文件。 BIP 0020中的替代支付金额已被删除。

摘要

这个BIP提出了一个用于支付比特币的URI方案。

动机

这个URI方案的目的是让用户只需点击网页上的链接或扫描QR码即可轻松付款。

规范

处理的一般规则(重要!)

比特币客户端不得在未获得用户授权的情况下对URI进行操作。 他们应该要求用户手动批准每个付款,但在某些情况下,他们可能会允许用户自动做出这个决定。

操作系统集成

图形比特币客户端应该注册自己作为默认的“比特币:”URI方案的处理程序,如果没有其他处理程序已经注册。 如果已经有一个注册处理程序,它们可能会提示用户在第一次运行客户程序时更改一次。

一般格式

比特币URI遵循RFC 3986中规定的URI的通用格式。路径组件由比特币地址组成,查询组件提供额外的支付选项。

查询组件的元素可能包含有效范围之外的字符。 这些必须首先根据UTF-8进行编码,然后按照RFC 3986中所述,相应的UTF-8序列的每个八位字节必须进行百分比编码。

ABNF语法

 bitcoinurn     = "bitcoin:" bitcoinaddress [ "?" bitcoinparams ]
 bitcoinaddress = *base58
 bitcoinparams  = bitcoinparam [ "&" bitcoinparams ]
 bitcoinparam   = [ amountparam / labelparam / messageparam / otherparam / reqparam ]
 amountparam    = "amount=" *digit [ "." *digit ]
 labelparam     = "label=" *qchar
 messageparam   = "message=" *qchar
 otherparam     = qchar *qchar [ "=" *qchar ]
 reqparam       = "req-" qchar *qchar [ "=" *qchar ]

这里,“qchar”对应于RFC 3986 URI查询组件的有效字符,不包括此BIP作为分隔符的“=”和“&”字符。

计划组件(“比特币:”)不区分大小写,实现必须接受大写和小写字母的任意组合。 其余的URI区分大小写,包括查询参数键。

查询键

  • 标签:该地址的标签(例如,接收者的姓名)
  • 地址:比特币地址
  • 消息:向用户描述交易的消息(请参阅下面的示例)
  • 大小:基础比特币单位数量(见下文)
  • (其他):可选,用于将来的扩展

转账金额/大小

如果提供金额,则必须用十进制BTC指定。 所有金额必须不包含逗号,并使用句点(。)作为分隔符来分隔整数和小数部分。即 金额= 50.00或金额= 50被视为50 BTC,金额= 50,000.00无效。

比特币客户端可以以任何形式来显示金额,而不是用来欺骗用户的。 他们应该选择一种最容易混淆的格式,只有在最合理的情况下才能提供所要求的金额。 例如,只要大多数用户以BTC为单位工作,即使mBTC或TBC会对数量进行更合理的解释,也应始终在BTC中显示值。

原理

付款标识符,而不是个人标识符

目前的最佳做法是每个交易都应该使用一个独特的地址。 因此,URI方案不应该代表个人信息的交换,而应该是一次性支付。

可访问性(URI方案名称)

如果外部的人碰巧看到这样的URI,那么URI方案名称就已经给出了描述。 然后快速搜索,以帮助他们找到支付所需的资源。 其他提出的名字听起来更加神秘; 有人因为好奇而谷歌浏览器的机会要小得多。 另外,很可能,他会发现大部分技术规格 - 而不是比特币的最佳介绍。

向前兼容

被认为需要前缀的变量被认为是必需的。 如果一个客户没有实现任何以req-为前缀的变量,它必须考虑整个URI是无效的。 任何其他没有实现的变量,但是没有以req-开头的前缀,都可以被安全的忽略。

向后兼容

在写这个BIP时,有几个客户已经实现了一个类似于这个的比特币:URI方案,但是通常没有额外的“req-”前缀要求。 因此,为了让客户开发人员能够发布新的版本,建议在完成本BIP的6个月的宽限期之后,以任务关键的方式使用前缀的附加变量,以及 老客户升级。

附录

简单的语法

本部分是非规范性的,并不涵盖所有可能的语法。 请参阅上面的BNF语法的规范语法。

[foo]表示可选,是占位符

 bitcoin:<address>[?amount=<amount>][?label=<label>][?message=<message>]

例子

只有地址:

 bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W

带着名字:

 bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Luke-Jr

请求20.30 BTC到“Luke-Jr”:

 bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=20.3&label=Luke-Jr

请求50 BTC的消息:

 bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=50&label=Luke-Jr&message=Donation%20for%20project%20xyz

一些未来版本的变量是(当前)不了解和要求,因此是无效的:

 bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-somethingyoudontunderstand=50&req-somethingelseyoudontget=999

一些未来版本的变量,(当前)不明白,但不是必需的,因此是有效的:

 bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?somethingyoudontunderstand=50&somethingelseyoudontget=999

字符必须是正确的URI编码。

参考实现

比特币客户端

  • Bitcoin-Qt支持旧版本的比特币URI(即没有req-前缀),与Windows和KDE集成为70f55355e29c8e45b607e782c5d76609d23cc858。

参考资料

目录
相关文章
|
JavaScript
dapp/lp/defi/nft流动性质押挖矿稳定版,dapp/lp/defi/nft流动性质押挖矿分红系统开发详细案例及功能
  Debit and credit voucher:When you deposit a token in Compound,you will get a credit voucher cToken.cToken is the ownership of the user's pledge token.You can exchange the original token and withdraw the corresponding profits in the Compound agreement.
|
存储 网络协议 区块链
什么是以太链ETH系统开发?ETH以太链dapp智能合约流动性质押挖矿分红系统开发详细及说明
 以太坊是一种区块链的实现。在以太坊网络中,众多的节点彼此连接,构成了以太坊网络:以太坊节点软件提供两个核心功能:数据存储、合约代码执行。在每个以太坊全节点中,都保存有完整的区块链数据。以太坊不仅将交易数据保存在链上,编译后的合约代码同样也保存在链上。以太坊全节点中,同时还提供了一个虚拟机来执行合约代码。
|
存储 安全 算法
以太链ETH丨波场链TRC丨币安链BSC智能合约流动性质押挖矿分红系统开发技术详细及代码部署
以太坊(Ethereum)是一个分布式计算机,有许多的节点,其中的每一个节点都会执行智能合约,然后把结果存在区块链上。由于整个网络是分布式的,且应用就是一个个的状态组成,存储了状态就有了服务;所以它没有一个中心化的结点,任何第三方不能干预,能永不停机。
|
存储 人工智能 前端开发
defi丨nft丨tpc丨free丨rac丨dapp丨LP预售代币合约自由协议流动性质押挖矿系统开发详细说明及逻辑分析
Web3.0,元宇宙时代,我们一样可以与网络交互,但我们与网络不仅是个简单信息交互,而是能突破虚拟世界的限制,可以直接影响现实世界的生活,例如我们在虚拟世界中赚取代币,则可以在现实世界兑换、购买其他的商品或服务;并且通过智能合约等约定的方式来规范我们在网络的行为,无中心平台能对我们做出封锁或下架的处理。
defi丨nft丨tpc丨free丨rac丨dapp丨LP预售代币合约自由协议流动性质押挖矿系统开发详细说明及逻辑分析
|
Web App开发 存储 前端开发
LP丨DAPP丨IDO预售代币合约流动性挖矿分红系统开发(开发详细)
  DAPP浏览器工作流程:   从整个流程来看,底层的信息和价值传递很复杂,但是对于普通用户来说,他们接触的还是前端界面,通过DAPP浏览器与去中心化应用交互,来实现具体的功能。
LP丨DAPP丨IDO预售代币合约流动性挖矿分红系统开发(开发详细)
|
Web App开发 存储 前端开发
defi/dapp/lp/ido智能合约流动性质押挖矿系统开发(详细分析)
  那么,Web3究竟是什么?即使你可能不熟悉该术语所指的内容,但你之前可能已经遇到过它。通俗地说,Web3被广泛理解为互联网的第三个(最新的)“阶段”。迄今为止,大约每隔十年,互联网就会进入一个新阶段——从Web1到Web2再到Web3。本文由系统开发对接lovei130908编辑整理发布。简单来说,互联网的三个阶段可以概括如下:
|
安全 程序员 区块链
BlockChain:【中本聪】历史之作《Bitcoin: A Peer-to-Peer Electronic Cash System》 《比特币:一种点对点的电子现金系统》—九页中英文对照翻译
1、了解区块链底层原理技术,还是要看原汁原味的白皮书,对的,就是《Bitcoin: A Peer-to-Peer Electronic Cash System》 2、有些术语翻译或许不太准确,欢迎前来提错误!! 2017-12-30最近一次修改
BlockChain:【中本聪】历史之作《Bitcoin: A Peer-to-Peer Electronic Cash System》 《比特币:一种点对点的电子现金系统》—九页中英文对照翻译
|
Shell Linux 区块链
BTC 主网钱包linux安装( 比特币)
比特币是一种实验性数字货币,可以即时支付给世界任何地方的任何人。比特币使用对等技术在没有中央授权的情况下进行操作:管理交易和发行资金是由网络集体进行的。比特币核心(Bitcoin Core)是可以使用这种货币的开源软件的名称。
1142 0
Bytom BIP-32协议和BIP-44协议
我们知道HD(分层确定性)钱包,基于 BIP-32;多币种和多帐户钱包,基于 BIP-44;最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容以及在比原中涉及的代码。
2157 0