基于区块链智能合约的抗合谋攻击网络拍卖方法与流程

文档序号:18200011发布日期:2019-07-17 06:06阅读:634来源:国知局
基于区块链智能合约的抗合谋攻击网络拍卖方法与流程

本发明属于区块链和拍卖理论领域,尤其涉及基于智能合约的抗合谋攻击拍卖方法。



背景技术:

由于因特网的快速发展和电子商务用户群体的蓬勃增长,网络拍卖的规模远远超出了人们的设想。网络拍卖打破了传统拍卖中所存在的物理限制,例如地理位置、时间、空间和目标群体较少等局限。许多著名的国际企业都在他们的交易中使用了网络拍卖,例如英国航空(britishairways),美国联邦快递(fedex),和雀巢(nestle)等等。

网络拍卖面临的主要挑战之一,为卖家、买家和拍卖商之间信任的缺失。网络环境的开放性和匿名性是滋生交易欺诈行为的土壤。例如,卖家可能在拍卖结束后拒绝发货,或是买家在拍卖中途退出而拒绝支付货款。网络拍卖网站起到中介的作用,为卖家和买家提供一个交易平台。它们的主要作用是保证交易能够安全可靠地进行。

安全的拍卖环境以及拍卖参与者之间信任的建立被认为是网络交易的关键因素,也是网络拍卖的重要问题。现有的研究工作主要是基于信誉分析和经济刺激来建立信任,大多数都需要一个被信任的第三方机构来控制交易过程。但是,第三方网站可能面临着可扩展性弱的问题,并且作为拍卖商的网络拍卖网站和平台也可能并不诚实。

加密货币自从出现在大众视野以来便备受瞩目。它基于一种公开账本,上面记录了所有当前与历史交易记录,并由一群去中心化网络节点以区块链的形式保存。这种特殊的数据结构有着去中心化、可追溯、透明公开、不可更改等特性。智能合约是由用户部署,并保存在区块链上的一段代码,由一系列函数和数据组成。用户通过向智能合约发起交易,可以对函数进行调用。这些函数由网络中的节点保存和执行,因此它的正确性由区块链的共识机制保证。理想状态下,智能合约可以看作是由一个诚实执行所有指令的分布式的可信计算机来执行的。因此,拍卖中所需的交易规则可以在没有可信第三方的情况下实施。

与传统拍卖相似,网络拍卖在抵抗合谋攻击方面也很脆弱。在网络拍卖中,买家通过投标来竞拍卖家提供的商品或者服务。理性利己的卖家和买家为了提高收益,都有互相合谋的动机。拍卖商也可能与卖家或买家勾结以获取利益。由于解除了地理位置对于拍卖参与者的的限制,匿名的网络拍卖参与者更容易组成不被发觉的合谋组织。已经有许多现实中的拍卖案例表明了合谋的广泛存在。网络犯罪投诉中心的报告显示,在美国,与拍卖有关的欺诈行为是最普遍存在的之一。

除抗合谋攻击外,一个理想的拍卖机制也应该具有“诚信”这一经济鲁棒性。对于一个拍卖机制来说,诚信是抵抗市场操纵和保证拍卖公平性及效率的重要因素。在不诚信的拍卖中,自私的投标者有机会操纵自己的投标价格,以其他参与者的利益为代价获取额外的收益。而在一个诚信的拍卖中,投标者的占优策略是诚实投标,这保证了每一个投标者都有投标真实价格的动机,因此,拍卖商可以高效地将商品分配给估价最高的买家,从而保证了资源的最优分配。



技术实现要素:

本发明针对现有技术的不足,提供一种基于区块链智能合约的抗合谋攻击网络拍卖方法。

本发明的技术方案为一种基于区块链智能合约的抗合谋攻击网络拍卖方法,其特殊之处在于,包含以下步骤:

建立基于区块链的网络拍卖智能合约,该合约投标过程结束后,中标买家和价格的算法具体过程为:

输入出价列表b,单位商品边际成本c,价格取样参数α和利润估计参数γ;

1)对b进行非升序排序,得到b1≥b2≥b3≥b4≥b5;

2)从[0,1]区间内随机取样,得到y,设当前最高估计利润

3)对于每个重复以下步骤:

4)如果并进入5),否则返回3);

5)如果则令返回3);

最后输出清算价格p和中标人名单w={bi|bi≥p}。

进一步地,所述网络拍卖只能合约的具体过程为:

步骤1,卖家初始化智能拍卖合约,初始化相关的变量,包括投标人名单blist,确认收货数conf,加密价格列表hb,出价列表b,中标人名单w,清算价格p,单位商品边际成本c和四个时间节点,分别为拍卖开始时间tbeginauction,投标最后期限tfinishcommit,揭标最后期限tfinishreveal以及物品交易最后期限ttransaction。之后卖家利用外部账户s.address发起转账交易,交易执行完毕后返回智能合约地址a.address,用于后续的合约函数调用。

步骤2,卖家用外部账户s.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的create函数,输入为步骤1中定义的相关变量c,tbeginauction,tfinishcommit,tfinishreveal和ttransaction的赋值。为了防止卖家恶意部署虚假拍卖并在交易过程中撤回,卖家在调用create函数时需要向合约账户预存s.deposit的押金。如果卖家在拍卖过程中途退出,那么押金会被平均分配给赢得商品的竞价者。

卖家发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行中会验证卖家支付的押金s.deposit是否大于预定押金,如果是则拍卖创建成功,不是则无法创建。

步骤3,有意的投标人观察到智能拍卖合约的创建后,开始投标。为了保证在投标过程中投标人的投标价格不被他人获取,他需要将标值加密后发送给智能合约。以投标人1为例。首先用外部账户bid1.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的commitbid函数,输入为加密标值hb1=hash(b1,nonce1),其中b1为投标人1的竞标价格,nonce1为投标人1选取的加密随机数。投标人1发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行首先验证当前时间t是否满足tfinishcommit>t>tbeginauction,是则接受密标,hb[bid1.address]=hb1,否则执行结束。

步骤4,投加密标的过程结束后,投标者1需要再进行解密,向合约发送明文标值。首先用外部账户bid1.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的revealbid函数,输入为明文标值b1和加密随机数nonce1。为了防止投标人恶意投标,在中标后拒绝支付货款,投标人1在调用revealbid函数时需要向合约账户预存bid1.deposit的押金。如果投标人1在拍卖过程中途退出,那么押金会被退回给卖家。投标人1发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行首先验证当前时间t是否满足tfinishreveal>t>tfinishcommit,否则执行结束;是则继续验证hash(b1,nonce1)是否等于hb[bid1.address],否则执行结束;是则继续验证bid1.deposit是否大于b1,是则投标人1投标成功,blist[1]=bid1.address,b[bid1.address]=b1,否则投标失败。

步骤5,投标过程结束后,卖家用外部账户s.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的determine函数,来执行抗合谋攻击智能拍卖算法,获取拍卖结果。卖家发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行中首先验证当前时间t是否满足ttransaction>t>tfinishreveal,是则执行抗合谋攻击智能拍卖算法cream,输出拍卖中标人名单w和清算价格p。并且将所有未中标人的押金退回。

步骤6,得到拍卖中标人名单w和清算价格p后,卖家进行发货,拍卖中标人收到商品后触发confirm函数进行确认收货。以中标人1为例,首先用外部账户wid1.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的confirm函数。中标人1发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行首先验证当前时间t是否满足t>ttransaction,否则执行结束;是则验证中标人1地址wid1.address是否满足wid1.address∈w,否则执行结束;是则退回金额wid1.deposit-p给中标人1,且conf=conf+1。

步骤7,卖家用外部账户s.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的finalize函数。卖家发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行中会验证调用函数的账户地址是否等于s.address,是则退回金额s.deposit+p*conf给卖家。

而且,在步骤3中,如果投标人在投标过程中直接将标值发送给智能拍卖合约,由于区块链公开透明的特性,每个投标人都可以看到其他投标人的出价。为了保证在投标过程中投标人的投标价格不被其他投标人获取,投标过程分为两个函数,commitbid和revealbid。commitbid函数输入为hb=hash(b,nonce),hash为哈希函数,nonce为一个随机值。加密后的标值hb会被储存在区块链上。revealbid函数输入为<b,nonce>,b和nonce分别为之前commitbid函数中hb所对应的明文标值和同样的随机数。

以投标人1为例。首先用外部账户bid1.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的commitbid函数,输入为加密标值hb1=hash(b1,nonce1),其中b1为投标人1的竞标价格,nonce1为投标人1选取的加密随机数。投标人1发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行首先验证当前时间t是否满足tfinishcommit>t>tbeginauction,是则接受密标,hb[bid1.address]=hb1,

投加密标的过程结束后,投标者1需要再进行解密,向合约发送明文标值。首先用外部账户bid1.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的revealbid函数,输入为明文标值b1和加密随机数nonce1。为了防止投标人恶意投标,在中标后拒绝支付货款,投标人1在调用revealbid函数时需要向合约账户预存bid1.deposit的押金。如果投标人1在拍卖过程中途退出,那么押金会被退回给卖家。投标人1发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行首先验证当前时间t是否满足tfinishreveal>t>tfinishcommit,否则执行结束;是则继续验证hash(b1,nonce1)是否等于hb[bid1.address],否则执行结束;是则继续验证bid1.deposit是否>b1,是则投标人1投标成功,blist[1]=bid1.address,b[bid1.address]=b1,否则投标失败。

本发明的优点在于:利用区块链去中心化和不可篡改的特性,基于智能合约实现抗合谋攻击且近似最优化卖家利润的网络拍卖机制,免去了对可信第三方拍卖平台的需要,从而解决了网络拍卖的信任建立以及合谋攻击问题,并降低了拍卖开销。

附图说明

图1是本发明实施例的系统示意图。

图2是本发明实施例的智能拍卖合约流程图。

图3是本发明实施例的抗合谋攻击拍卖算法流程图。

具体实施方式

本发明主要基于智能合约,用去中心化的区块链代替可信第三方拍卖平台,提出了一种抗合谋攻击且近似最优化卖家利润的网络拍卖机制,系统示意图参加图1。本方法充分利用了区块链去中心化和不可篡改的特性,通过智能合约来实现拍卖中的规则实施和资金转移。通过本发明获得的拍卖机制更加安全,开销更低。

本发明提供的基于智能合约的抗合谋攻击拍卖方法能够用智能合约实现流程。参见图2,实施例以多中标人的单方拍卖为例对本发明的流程进行一个具体的阐述,如下:

步骤1,卖家初始化智能拍卖合约,初始化相关的变量,包括投标人名单blist,确认收货数conf,加密价格列表hb,出价列表b,中标人名单w,清算价格p,单位商品边际成本c和四个时间节点,分别为拍卖开始时间tbeginauction,投标最后期限tfinishcommit,揭标最后期限tfinishreveal以及物品交易最后期限ttransaction。之后卖家利用外部账户s.address发起转账交易,交易执行完毕后返回智能合约地址a.address,用于后续的合约函数调用。

实施例具体的实施过程说明如下:

首先,卖家需要编写一个符合自己拍卖需求的智能拍卖合约。本实施例中,我们在以太坊中实现。以太坊是最受欢迎的支持智能合约的加密货币平台,它的加密货币被称为“以太”。以太坊智能合约可以用solidity实现,它是最受欢迎且最稳定的智能合约编程语言。

以太坊上有两种账户类型,外部账户和合约账户。外部账户由一个拥有以太坊钱包和签署交易的私钥的某个个体所拥有,而合约账户则拥有一个以太坊钱包,并且保存着合约代码。卖家在区块链上发布智能合约的过程如下:

1.利用外部帐户s.address发起一个转账交易,这笔交易的收款地址为0x0,转账金额设置为0。

2.将智能拍卖合约代码编译为二进制字节码,并将这些二进制字节码写入交易的data域。

3.填写交易其他部分内容。

4.发布交易,交易执行完毕后会返回智能合约的地址a.address。

实施例具体的实施方案如下:

卖家首先编写好智能合约代码。在solidity编程语言中,可以通过构造函数来初始化合约对象。构造函数就是方法名和合约名字相同的函数,创建合约时会调用构造函数对状态变量进行数据初始化操作,即w=[],ob,p=0,blist=[],conf=0,b=[],tbeginauction,tfinishsubmit,tfinishreveal,ttransaction=0。假设合约名字为smartauction,s.address=0x01。

之后卖家发布智能合约,具体方案如下:

1.利用外部帐户s.address=0x01发起一个转账交易,这笔交易的收款地址为0x0,转账金额设置为0。

2.将智能合约代码编译为二进制字节码,并将这些二进制字节码写入交易的data域。

3.填写交易其他部分内容。

4.发布交易,交易执行完毕后会返回智能合约的地址a.address=0x00。

步骤2,卖家用外部账户s.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的create函数,输入为步骤1中定义的相关变量c,tbeginauction,tfinishcommit,tfinishreveal和ttransaction的赋值。为了防止卖家恶意部署虚假拍卖并在交易过程中撤回,卖家在调用create函数时需要向合约账户预存s.deposit的押金。如果卖家在拍卖过程中途退出,那么押金会被平均分配给赢得商品的竞价者。

卖家发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行中会验证卖家支付的押金s.deposit是否大于预定押金,如果是则拍卖创建成功,不是则无法创建。

实施例具体的实施过程说明如下:

智能合约中的create函数用于卖家创建拍卖,支付押金以及初始化相关变量,输入参数为create(tbeginauction,tfinishsubmit,tfinishreveal,ttransaction,ob),是一个接受转账的可支付函数。

卖家调用create函数的具体过程如下:

1.卖家用外部账户s.address创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address。

2.把要调用的函数名称create以及该函数需要的参数,即create(tbeginauction,tfinishsubmit,tfinishreveal,ttransaction,ob)进行编码,随后填入data域中。

3.create函数中用到的转账金额放在交易的value域中,即为卖家支付的押金s.deposit。

4.填写其他交易内容,发布交易。

5.矿工收到该交易后,本地执行该交易。合约执行中会验证卖家支付的押金s.deposit是否大于预定押金,如果是则拍卖创建成功,不是则无法创建。

实施例具体的实施方案如下:

卖家调用create函数的具体方案如下:

1.卖家用外部账户s.address=0x01创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address=0x00。

2.把要调用的函数名称create以及该函数需要的参数,即create(2,6,66,71,72)进行编码,随后填入data域中。即对变量赋值为ob=2,tbeginauction=6,tfinishsubmit=66,tfinishreveal=71,ttransaction=72,其中开标价格ob和四个时间节点的单位分别为美元和小时。

3.create函数中用到的转账金额则放在交易的value域中,即为卖家支付的押金s.deposit=30。

4.填写其他交易内容,发布交易。

5.矿工收到该交易后,本地执行该交易。代码执行中会验证卖家支付的押金30是否大于预定押金,如果是则创建成功,不是则无法创建。矿工将执行结果打包到区块中,发布区块。

步骤3,有意的投标人观察到智能拍卖合约的创建后,开始投标。为了保证在投标过程中投标人的投标价格不被他人获取,他需要将标值加密后发送给智能合约。以投标人1为例。首先用外部账户bid1.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的commitbid函数,输入为加密标值hb1=hash(b1,nonce1),其中b1为投标人1的竞标价格,nonce1为投标人1选取的加密随机数。投标人1发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行首先验证当前时间t是否满足tfinishcommit>t>tbeginauction,是则接受密标,hb[bid1.address]=hb1,否则执行结束。

实施例具体的实施过程为:

commitbid函数用于投标者提交加密标值,输入参数为commitbid(hb)。

投标人1的账户地址为bid1.address,他调用commitbid函数的具体步骤如下:

1.投标人1用外部账户bid1.address创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address。

2.投标人1计算出hb1=hash(b1,nonce1)。然后对要调用的函数名称commitbid和以及该函数需要的参数,即commitbid(hb1)进行编码,填入data域中。

3.填写其他交易内容,发布交易。

4.矿工收到该交易后,本地执行该交易。合约执行首先验证当前时间t是否满足tfinishcommit>t>tbeginauction,是则接受密标,hb[bid1.address]=hb1,否则执行结束。矿工将执行结果打包到区块中,发布区块。

实施例具体的实施方案说明如下:

投标人1调用commitbid函数的具体步骤如下:

1.投标人1用外部账户bid1.address=0x001创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address=0x00。

2.假设投标人1想要投标b1=2,选取随机数nonce1=0x012,计算得出的加密标值hb1=hash(2,0x012)=0x010。然后对要调用的函数名称commitbid和以及该函数需要的参数,即commitbid(0x010)进行编码,填入data域中。

3.填写其他交易内容,发布交易。

4.矿工收到该交易后,本地执行该交易。合约执行首先验证当前时间t是否满足tfinishcommit>t>tbeginauction,是则接受密标,hb[0x001]=0x010,否则执行结束。矿工将执行结果打包到区块中,发布区块。

步骤4,投加密标的过程结束后,投标者1需要再进行解密,向合约发送明文标值。首先用外部账户bid1.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的revealbid函数,输入为明文标值b1和加密随机数nonce1。为了防止投标人恶意投标,在中标后拒绝支付货款,投标人1在调用revealbid函数时需要向合约账户预存bid1.deposit的押金。如果投标人1在拍卖过程中途退出,那么押金会被退回给卖家。投标人1发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行首先验证当前时间t是否满足tfinishreveal>t>tfinishcommit,否则执行结束;是则继续验证hash(b1,nonce1)是否等于hb[bid1.address],否则执行结束;是则继续验证bid1.deposit是否大于b1,是则投标人1投标成功,blist[1]=bid1.address,b[bid1.address]=b1,否则投标失败。

实施例具体的实施过程为:

revealbid函数用于投标者提交解密后的标值,输入参数为commitbid(b,nonce),是一个接受转账的可支付函数。

投标人1调用revealbid函数的具体步骤如下:

1.投标人1用外部账户bid1.address创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address。

2.投标人1对要调用的函数名称revealbid和以及该函数需要的参数,即revealbid(b1,nonce1)进行编码,填入data域中。

3.revealbid函数中用到的转账金额放在交易的value域中,即为投标人1支付的押金bid1.deposit。

4.填写其他交易内容,发布交易。

5.矿工收到该交易后,本地执行该交易。合约执行首先验证当前时间t是否满足tfinishreveal>t>tfinishcommit,否则执行结束;是则继续验证hash(b1,nonce1)是否等于hb[bid1.address],否则执行结束;是则继续验证bid1.deposit是否大于b1,是则投标人1投标成功,blist[1]=bid1.address,b[bid1.address]=b1,否则投标失败。

实施例具体的实施方案说明如下:

投标人1调用revealbid函数的具体步骤如下:

1.投标人1用外部账户bid1.address=0x001创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address=0x00。

2.投标人1对要调用的函数名称revealbid和以及该函数需要的参数,即revealbid(2,0x012)进行编码,填入data域中。

3.revealbid函数中用到的转账金额放在交易的value域中,即为投标人1支付的押金bid1.deposit=3。

4.填写其他交易内容,发布交易。

5.矿工收到该交易后,本地执行该交易。合约执行首先验证当前时间t是否满足tfinishreveal>t>tfinishcommit,否则执行结束;是则继续验证hash(2,0x012)是否等于hb[bid1.address],是则继续验证bid1.deposit=3是否大于b1=2,是则投标人1投标成功,blist[1]=bid1.address=0x001,b[0x001]=2。矿工将执行结果打包到区块中,发布区块。

步骤5,投标过程结束后,卖家用外部账户s.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的determine函数,来执行抗合谋攻击智能拍卖算法,获取拍卖结果。卖家发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行中首先验证当前时间t是否满足ttransaction>t>tfinishreveal,是则执行抗合谋攻击智能拍卖算法cream,输出拍卖中标人名单w和清算价格p。并且将所有未中标人的押金退回。

实施例具体的实施过程如下:

卖家调用determine函数的具体步骤如下:

1.卖家用外部账户s.address创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address。

2.把要调用的函数名称determine进行编码,随后填入data域中。

3.填写其他交易内容,发布交易。

4.矿工收到该交易后,本地执行该交易。合约执行中会验证当前时间t是否满足ttransaction>t>tfinishreveal,是则接下来执行抗合谋攻击算法,算法流程图参加图3。算法输入为投标人名单blist,出价列表b,单位商品边际成本c,价格取样参数α和利润估计参数γ,输出为清算价格p和中标人列表bw={bi|bi≥p};

算法的流程如下:

1)对b进行非升序排序,得到b1≥b2≥…≥bn;

2)从[0,1]区间内随机取样,得到y,设当前最高估计利润

3)对于每个重复以下步骤:

4)如果并进入5),否则返回3);

5)如果则令返回3);

算法最后输出拍卖中标人名单w和清算价格p。退回bid.deposit,矿工将执行结果打包到区块中,发布区块。

实施例具体的实施方案说明如下:

卖家调用determine函数的具体方案如下:

1.卖家用外部账户s.address=0x01创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address=0x00。

2.他对要调用的函数名称determine进行编码,随后填入data域中。

3.填写其他交易内容,发布交易。

5.矿工收到该交易后,本地执行该交易。执行过程中首先验证t是否满足ttransaction>t>tfinishreveal,否则拒绝接收;是则运行抗合谋攻击算法,具体的实施过程举例如下:

假设有五个投标人,他们对于商品真实的定价分别为v1=2,v2=5,v3=6,v4=8,v5=10,商品边际成本设为0,并且每个投标人都只需要一单位商品。价格取样参数α和利润估计参数γ分别设为1.1和1.2。

首先以每一个投标人都诚实投标的情况为例,因此b={2,5,6,8,10}。对b进行非升序排序,得到b1=10,b2=8,b3=6,b4=5,b5=2。再从[0,1]区间内随机取样,得到y,假设为0.5,设当前最高估计利润

之后,候选价格应该从{1.1,1.2,...,1.95,...,3.8,...,4.59,...,7.4,...,9.85}中选择。下表中列出了所有投标人诚实投标情况下部分候选价格以及所对应的最高估计利润

可以得出,清算价格p应该选择4.59。

当投标人2和投标人3进行合谋攻击时,他们的主要目的是通过合谋降低清算价格,增加团队的总收益。因此他们会降低标值,假设投标人2和投标人3分别将标值降低为4和5,b={2,4,5,8,10}。对b进行非升序排序,得到b1=10,b2=8,b3=5,b4=4,b5=2。再从[0,1]区间内随机取样,得到y,假设为0,设当前最高估计利润

与前面相同,候选价格依然从{1.1,1.2,...,1.95,...,3.8,...,4.59,...,7.4,...,9.85}中选择。下表中列出了当投标人2和投标人3合谋攻击时部分候选价格以及所对应的最高估计利润

可以得出,清算价格与诚实投标的情况一样,都为4.59。

在诚实投标的例子中,投标人2和投标人3的收益和为v2+v3-2*p=11-9.18=1.82。而在合谋攻击的例子中,投标人2标值4低于清算价格4.59,没有赢得商品,收益为0,因此两人的收益和为0+v3-p=6-4.59=1.41。这意味着两人的收益和反而降低了,因此在抗合谋攻击算法成功的防止了合谋攻击的组织提高自己的收益。

当所有投标人诚实投标时,只有投标人1未中标。因此将bid1.deposit-b[bid1]=1退回给投标人1。

最后矿工将执行结果打包到区块中,发布区块。

步骤6,得到拍卖中标人名单w和清算价格p后,卖家进行发货,拍卖中标人收到商品后触发confirm函数进行确认收货。以中标人1为例,首先用外部账户wid1.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的confirm函数。中标人1发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行首先验证当前时间t是否满足t>ttransaction,否则执行结束;是则验证中标人1地址wid1.address是否满足wid1.address∈w,否则执行结束;是则退回金额b[wid1.address]-p给中标人1,且conf=conf+1。

实施例具体的实施过程如下:

1.中标人1用外部账户wid1.address创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address。

2.中标人对要调用的函数名称commitbid进行编码,填入data域中。

3.填写其他交易内容,发布交易。

4.矿工收到该交易后,本地执行该交易。合约执行首先验证当前时间t是否满足t>ttransaction,是则验证中标人1地址wid1.address是否满足wid1.address∈w,否则执行结束;是则退回金额wid1.deposit-p给中标人1,且conf=conf+1。矿工将执行结果打包到区块中,发布区块。

实施例具体的实施方案如下:

假设5个投标人都诚实投标,那么拍卖中标人为投标人2,3,4和5,清算价格p=4.59。

以投标人2为例,假设,当他收到商品后,调用confirm函数的具体步骤如下:

1.投标人2用外部账户bid2.address=0x002创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address=0x00。

2.他对要调用的函数名称confirm进行编码,随后填入data域中。

4.填写其他交易内容,发布交易。

5.矿工收到该交易后,本地执行该交易。执行过程中首先验证t是否满足t>ttransaction,否则拒绝接收;是则继续验证投标人2账户地址bid2.address=0x002是否满足0x002∈w,是则将bid2.deposit-p=1.41退回给投标人2,conf=conf+1=1。矿工将执行结果打包到区块中,发布区块。

步骤7,卖家用外部账户s.address创建一笔收款地址为a.address的交易,来调用智能拍卖合约中的finalize函数。卖家发布该交易后,网络中的矿工接收并在本地执行该交易。合约执行中会验证调用函数的账户地址是否等于s.address,是则退回金额s.deposit+p*conf给卖家。

实施例具体的实施过程如下:

1.卖家用外部账户s.address创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address。

2.他对要调用的函数名称finalize进行编码,随后填入data域中。

4.填写其他交易内容,发布交易。

5.矿工收到该交易后,本地执行该交易。执行过程中首先验证t是否满足t>ttransaction,否则拒绝接收;是则将卖家押金以及拍卖收益支付给卖家,即s.deposit+p*conf。矿工将执行结果打包到区块中,发布区块。

实施例具体的实施方案如下:

假设中标人2,3,4,5都已调用了确认收货函数。

1.卖家用外部账户s.address=0x01创建一笔交易,交易的收款地址为要调用的智能拍卖合约地址a.address=0x00。

2.他对要调用的函数名称finalize进行编码,随后填入data域中。

4.填写其他交易内容,发布交易。

5.矿工收到该交易后,本地执行该交易。执行过程中首先验证t是否满足t>ttransaction,否则拒绝接收;是则将卖家押金以及拍卖收益支付给卖家,即s.deposit+p*conf=30+4.59*4=48.36。矿工将执行结果打包到区块中,发布区块。

本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1