BFP是一个开源项目,是由Simple Ledger Protocol(SLP)开发者 James Cramer, Ryan X. Charles, Mark B. Lundeberg, Calin Culianu, Jonald Fyookball, 以及BCH开发者 Unwriter联合推出的。
通过它,可以将一些小文件(<5kb的文件)上传到比特币现金区块链上,并可以下载下来。
之所以推出该协议是因为目前缺少将匿名文件上传到Web端的可靠服务,以及良好的免费API。
现在所有可靠的云存储服务通常不允许在没有登录或拥有API密钥的情况下上传。这些服务都是中心化的,而且可以随意审查。
因此BFP开发团队推出该程序解决这些问题。此协议的最初目的是简化JSON文档的上载,这些文档可能与Token的GENESIS交易中的特定SLP Token相关。
BFP是一个与SLP Token不同的协议,但它的设计是通过多个事务处理,使用DAG将文件块和元数据链接在一起,因此它类似于SLP Token。
上传文件
文件以一系列文件块的形式被上传到区块链,这些块封装在位于vout=0(即第一个输出)的OP_RETURN消息中。文件块相互引用,使用vout=1输出作为指向下一个数据块位置的指针。该文件可以与任何人共享,只需共享文件上传到的最后一个块的事务id即可,该块还包含可选的文件元数据。
下图展示了一个使用此协议的多部分文件上传示例:
在上传的文件数据块系列中,最后一个事务的事务id是文件的句柄。最后一个事务包含一组特殊的可选文件元数据参数,最重要的是需要与文件关联的块的数量,以便知道要下载多少数据块。
例如:创建一个初始融资交易(如上图所示),以支付所有后续交易的成本。这样做的原因是,所有的事务都可以一个接一个地签名,然后所有签名的事务都可以成批提交到网络。这也降低了文件上传的总成本,因为每个文件块的事务只有1个输入。
下载文件
此时文件位于区块链中,使用文件元数据OP_RETURN消息的事务id下载文件。为了下载完整的文件内容,软件只需要按照以下步骤操作:
- 下载文件的元数据事务
- 解析位于该事务中第一个输出(即vout:0)的元数据OP_RETURN消息
- 如果只有一个块,并且在元数据消息中提供了一个块,那么过程就完成了。
- 如果有更多的块需要下载,那么使用vin:0中指定的事务id来查找下一个数据块,并重复这个过程,直到所有的块都被下载。应该在每个步骤执行验证,以确保遵守协议规则。
- 使用上面指定的“Chunk Transaction OP_RETURN”格式解析纯数据块。
- 使用第一个signed = first块规则重建文件的数据块。
目前该协议已经内置于最新的Electron Cash SLP钱包代码库中。其开发人员James Cramer也在社交媒体平台Yours.org上发表了一篇文章,对BFP的使用方法做了一个简单示例。
BFP的推出为BCH的应用添加了新功能。越来越多的应用程序的产生将会丰富BCH的生态,并推动BCH的采用。
对于BCH来说,加强采用应该作为现阶段的重要任务,BCH社区欢迎开发人员开发更多好玩有用的应用程序。
而且开发人员还可以参加BCH DEVCON黑客马拉松来展示自己的才华。