羽毛币合约付款技术白皮书

ftc 发布在 竞争币 2 1887

摘要

【摘要】本文论述一种基于BIP协议的联合付款实现,通过构建一种支付合约,实现多个付款人给同一收款方付款,达到合约约定后,收款方获得有效的支付。

ftc-contract-payments

 

第一章 目标

 

首要目标:实现联合付款,即实现一笔交易由多个付款方给同一收款方付款。达到合约约定后,通常是达到一定金额后,即支付合约条件逻辑成立,收款方获得有效的支付。

合约中约定的要素:至少需实现3个约定

  1. 收款方地址:所有付款方发送的交易有同一个收款地址。
  2. 合约生效金额:所有付款方发送的交易有相同的合约生效金额。
  3. 生效高度或生效时间:所有付款方发送的交易有相同的生效高度或生效时间。

合约中未限定的情况:

  1. 付款方的家数:不限制,可任意多个付款方。
  2. 付款方的付款金额:不限制,可任意付款金额。但通常情况下,任何一个付款方付款金额小于合约金额。

应用场景举例:捐款合约。羽毛币开发团队需要向社区进行募捐一笔100FTC的款项,用于支持项目开发。募捐对象不确定,只要热心人士都可参与。当捐款总和达到100FTC时,募捐活动完成,款项支付给开发团队,如果在规定时间内没有募集到100FTC,就将全部款项返回给捐助者。

应用前景:联合付款可用于公共募捐领域,也可用于多人联合支付。所有以公众商品为标的支付行为都可以使用联合付款,即只有当筹集的资金超过所需的价格时,每个人才真正付钱,如果集资款不足,则谁都不用付钱。

 

第二章 可行性分析

 

功能实现分析:

以募捐活动为例,需要实现如下功能。

(1)募集方或主办方建立集资用的收款地址,同时宣布募集金额100FTC,生效高度为第10000块后生效。

(2)捐助者(用户A)创建交易TX1,该交易支出FTC到集合地址,花费输入50个FTC,输出为100FTC。用户创建了交易TX1但不广播。

(3)捐助者(用户A)把交易TX1的HASH文本发送给集合者。HASH文本这里可以使用邮件发送,也可以使用BM发送给募集方。

(4)募集方导入收到的HASH文本,检查是否募集到足够的币。

(5)一旦集合者获得了足够的币,募集方将把所有捐助者上传的独立交易合并成一个新交易。该交易只有一个输出,仅仅把钱付到捐赠地址,即该交易输出与每个捐赠者的交易的输出部分相同,而输入部分则是所有捐助者输入的集合。

(6)募集方广播这个完整的交易,获得支付的金额。

技术可行性说明:

(1)首先使用了SIGHASH符号,SIGHASH_ALL是默认模式,意味着要签名所有交易的内容,除了输入脚本。SIGHASH_ANYONECANPAY是附加的指示器,意味着签名仅覆盖自己的输入部分,不签名其他人的输入,这样其他人的输入可以留空。使用这些符号,我们能创建这样一个签名,即使在其他输入添加进入后,该签名依旧是有效的。但如果输出内容或其他的交易部分被改变了,该签名就无效了。第二,输入值小于输出值的交易是无效的(原因很明显),这就意味着捐赠者把发送币的交易发送给主办方是安全的,因为主办方不可能得到这些捐赠币,除非他加上其他的输入值等于或超过输出值。

(2)联合付款交易与常规的交易相似,除了三个不同点:首先,不能做任何改变,如果你没有正确的输出金额100FTC,你必须先创建一个;第二,输入脚本要以SIGHASH_ALL|SIGHASH_ANYONECANPAY的模式签名;最后,输出值是100FTC,注意这不是一个有效的交易,因为输出值比输入值大得多。募集方不能成功广播这个交易。

(3)SIGHASH_ANYONECANPAY签名方式已经在BIP协议中实现。

 

第三章 技术实现

 

以羽毛币为例代码实现:

1)支付界面增加合约付款。

在发送界面中,当选择合约支付选项时,需要填写合约生效高度,交易的签名方式设置为SIGHASH_ALL|SIGHASH_ANYONECANPAY方式,同时不验证交易输入金额和输出金额的关系。此项交易并不广播到网络中,而是返回交易的二进制码给用户。

2)新增交易合成器。

1、识别输入的交易二进制文本是否符合本次联合付款的要求,即判断收款地址是否匹配、生效高度是否匹配。
2、根据所有输入的交易信息,判断是否达到合约设定的支付金额,如果已经达到,就提取全部输入部分压入一个新的交易结构中,再填写上输出地址、输出金额、生效高度(这里指nLockTime)、版本号,构建出一个新的合法交易。最后广播该笔交易到网络中,完成联合付款过程。
羽毛币代码提交:

https://github.com/FeatherCoin/Feathercoin/commit/0e457b6e89c2eef64deb9028d9f2ae9baf53e7d8

https://github.com/FeatherCoin/Feathercoin/commit/53359e5d7ee85608cfcc8d76362a41c3d405bba9

 

第四章 基于羽毛币钱包的联合付款使用指南

 

(一)联合付款的合约准备
收款人(集资方)告知所有的付款方,支付(集资)金额目标是100FTC,收款地址是A地址,生效高度是1484500。

(二)付款方(捐助方)付款
1、第1位付款者(捐助者),支付51个FTC。他的交易输入是51个FTC,输出是100个FTC。

图1-第1位付款者填写付款信息

2、第1位付款者(捐助者)点击“交易Hash”,获取了交易的二进制码。并发送给收款方。

图2-第1位付款者获取付款交易的二进制码

3、第2位付款者(捐助者),支付50.8个FTC。他的交易输入是50.8个FTC,输出是100个FTC。支付地址、支付金额、生效高度都和第一位付款者的相同。


图3-第2位付款者填写付款交易

(三)收款方检查、合成交易信息

1、点击“应用”菜单,打开“智能合约”界面。收款方(募集方)分别输入收款金额、收款地址、生效高度。


图4-收款方验证付款二进制码

2、将收到的交易二进制码逐一加入验证,验证合格的交易将显示到已收到的捐助列表中。当所有的输入交易金额达到合约的支付金额时,就可以合成一笔新交易,它包含所有付款人的未花费输入和唯一的输出,并广播该交易。


图5-收款方检查是否收到足够的支付


图6-收款方广播新合成的交易

(四)交易记录查询
联合付款交易可以在区块链浏览器中查询到。


图7-区块链浏览器中查询联合付款交易有多个输入和唯一的输出;

版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。
发文时比特币标准价格 买价:¥8013.00 卖价:¥7886.00

评论:2

您需要登录后才可以回复 登录|注册
    超然1221
    超然1221 279 天前

    值得关注。

    +1
    +1
    我要点评
    区块链8333节点
    区块链8333节点 280 天前

    羽毛币发布重大新功能升级,基于合约技术,实现联合付款功能。联合付款类似几个人AA制付款,实现一笔交易由多个付款方给同一收款方付款。达到合约约定后,通常是达到一定金额后,即支付合约条件逻辑成立,收款方获得有效的支付。
    详见我的巴比特专栏文章 http://t.cn/RiOWNCx

    +1
    +1
    我要点评