1. 技术背景
天很黑
2. 业务描述
买房交易端生成预付款地址和复合键,并向生成的预付款地址支付预付款后将预付款地址和复合件发送给卖方交易端,所述预付款地址和符合键中均含有货物信息和预设的货物送达时间;卖方交易端接收预付款地址和复合键,并对预付款地址和复合件所含有信息验证通过后,进行发货;若买房交易端在预设的货物送达时间内确认收到货物,则卖方交易端将复合件发送个买房交易端,由买方交易端对符合键进行签名赋值,然后买方交易端将签名赋值后的复合件发送给卖方交易端,卖方交易端拥有预付款,交易结束。
主要步骤如下:
- 买方交易端生成预付款地址和复合键,并向生成的预付款地址支付预付款后将预付款地址和复合键发送给卖方交易端,所述预付款地址和复合键中均含有货物信息和预设的货物送达时间;卖方交易端接收预付款地址和复合键,并对预付款地址和复合键所含信息验证通过 后,进行发货。若买方交易端在预设的货物送达时间内确认收到货物,则卖方交易端将复合键发送给买方交易端,由买方交易端对复合键进行签名赋值,然后买方交易端将签名赋值后的复合键发送给卖方交易端,卖方交易端拥有预付款,交易结束;若买方交易端未在预设的货物送达时间内确认收到货物,则预付款退还给买方交易端,交易结束。
- 所述买方交易端生成的预付款地址具体为:
address=hash(卖方公钥||买方公钥||货物信息hash||time)||unlockcodename
其中,address表示预付款地址,hash表示哈希算法,货物信息hash表示货物编码的哈 希值,time表示预设的货物送达时间,unlockcodename表示花费当前预付款地址中预付款 时的解锁代码名称;
所述买方交易端生成的复合键具体为: CK1=(卖方公钥||买方公钥||货物信息hash||time)- 计算复合键的哈希值是否等于预付款地址中哈希值计算部分的哈希值、检查复合键中的第一个参数是否为卖方公钥、检查复合键中的第二个参数是否为买方公钥,检查复合键中参数time的所定数值是否合适,若均为是,则验证通过,进行发货;反之,则验证不通过, 不进行发货。
- 所述买方交易端将签名赋值后的复合键发送给卖方交易端,卖方交易端拥有预付款后,还包括:按照 (UTXO,CK1,sigbuyer(CK1))三者的对应关系,记录于账本中,其中UTXO指卖方交易端拥有预付款后产生的未花费过的交易输出,sigbuyer(CK1)表示签名赋值后的复合键。
- 当卖方交易端拥有预付款之后,还包括: 将卖方交易端拥有预付款后产生的未花费过的交易输出作为输入UTXO构造交易申请, 所述交易申请中包括签名赋值后的复合键; 将构造的交易申请放入交易提议里,然后发送给Fabric网络的peer节点; peer节点接收交易申请并根据交易申请中的输入UTXO查询账本获得账本中对应的 UTXO,并获取该UTXO对应CK1的解锁代码,然后调用子函数unlockcode,输入解锁参数,运行 并对返回结果进行判断,若返回结果为真,则卖方交易端可以花费交易申请中的输入UTXO, 若返回结果为假,则卖方交易端不可以花费交易申请中的输入UTXO。
所述交易申请具体为:request=(inputs ,outputs ,txidj||CK1||sig(inuts||outputs||nonce)||sigbuyer (CK1))
其中,request表示交易申请,inputs表示输入UTXO,inputs=[in1;in2;…;ini;…],表 示输入的各个UTXO;txidj为ini的格式,表示交易txid的第j个输出,outputs表示输出UTXO, sig(inuts||outputs||nonce)表示当为买方交易端花钱时,需要使用买方私钥对inuts|| outputs||nonce进行签名;如果是卖方交易端花钱时,需要使用卖方私钥对inuts|| outputs||nonce进行签名,nonce表示随机数;
所述调用子函数unlockcode时,所输入的解锁参数为:txidj||CK1||sig(inuts|| outputs||nonce)||sigbuyer(CK1)。
所述调用子 函数unlockcode时,输入解锁参数,运行并对返回结果进行判断,具体步骤为, 根据从账本中获得的对应的UTXO,获取该UTXO对应的预付款地址,并从预付款地址取 出hash部分的H,与Hash(CK1)进行比较,若不相等,则返回结果为假,若相等,则判断该UTXO 对应的sigbuyer(CK1)是否存在:若存在,则若使用复合键中的买方公钥进行验签成立,且使用复合键中的卖方公钥验 证sig(inuts||outputs||nonce)成立时,返回结果为真,反之,则返回结果为假; 若不存在,则查看当前时间是否已超过复合键中预设的货物送达时间,若未超过,则返 回结果为假;若超过,则当使用复合键中的买方公钥验证sig(inuts||outputs||nonce)时 成立,返回结果为真,反之,返回结果为假。
生成模块,其用于买方交易端生成预付款地址和复合键,并向生成的预付款地址支付 预付款后将预付款地址和复合键发送给卖方交易端,所述预付款地址和复合键中均含有货 物信息和预设的货物送达时间;
接收模块,其用于驱使卖方交易端接收预付款地址和复合键,并对预付款地址和复合 键所含信息验证通过后,进行发货。
判断模块,其用于若买方交易端在预设的货物送达时间内确认收到货物,则卖方交易 端将复合键发送给买方交易端,由买方交易端对复合键进行签名赋值,然后买方交易端将 签名赋值后的复合键发送给卖方交易端,卖方交易端拥有预付款,交易结束;若买方交易端 未在预设的货物送达时间内确认收到货物,则预付款退还给买方交易端,交易结束。
注: 本文收集于互联网,仅做个人学习参考。