前言
关于NNS的介绍,这里就不多做描述,相关的信息可以查看NNS的白皮书http://doc.neons.name/zh_CN/latest/nns_background.html。
首先nns中使用的竞价货币是sgas,关于sgas介绍可以戳https://my.oschina.net/u/2276921/blog/1843182。
这里只是简单的把拍卖的流程梳理一下,不会附上代码,有兴趣看代码的可以戳https://github.com/NewEconoLab/neo-ns/blob/master/dapp_nns_register_sell/nns_register_sell.cs
首先明确一下合约开发过程中的几个限制。
限制一:合约只能被动的触发,它没有定时器,没办法定时主动做一些事情。
限制二:一笔交易只有10gas的免费调用额度,所以在做一些复杂流程的时候只能妥协拆成两步或者采取一些预处理的方式来做。
正文
一 域名的开拍
大家印象中的拍卖肯定都是拍卖师把藏品拿到台前,大家开始疯狂出价,结束后把拍卖的钱给藏品的主人。拍卖合约是不一样的,因为拍卖合约内的所有域名都不属于谁,所有人只有使用权。任何人都可以把一个不在使用期的域名拿到台前来拍卖,拍卖得到的钱会全部进入奖池,在某个时机再全部空投出去。
二 拍卖合约的账户
拍卖合约设定的出价方式是每次出价的时候都要把钱上交才能出价,并没有采用先喊价后结算等方式。主要这种方式没有信用等因素的干扰,简单粗暴。这种出价方式对于出价者来说其实是两步操作,先给钱再喊价。从合约调用层面来讲就是需要先调用sgas合约的转账,然后调用拍卖合约的出价。一个交易中如果包含了这两步调用合约的操作,极易超出10gas的免费额度,但如果分成两个交易发送又需要两个高度的确认,用户体验非常差。所以拍卖合约自身建立了一个账户系统,用以缓冲。可以类比为超市的充值卡,用户先充值一笔钱到充值卡上,以后每次在超市消费都用充值卡结算,超市活动返点什么也可以直接返回到你的充值卡,不需要你过来领取。
三 合约内的时间跨度计算
合约自开拍后一定有三天的自由竞价期,可能有两天的随机期结束期。拍得域名后有一年的使用期(从域名开拍的时间开始计算),使用期前有三个月的续约期。
合约内的时间跨度都是用时间戳来计算,例如开拍某个域名的高度是1000000,对应的时间戳是1515777377。那么这个域名的自由期就是时间戳小于1515777377+3*24*3600的块。使用期的就是小于1515777377+365*24*3600的块。
四 拍卖的自由期
从域名开拍的块对应时间戳作为起始时间,三天之内为自由期。在自由期用户可以自由竞价。
需要注意的是,如果域名开拍之后自由期内并没有任何人有过出价,那么域名就被标记为流拍,可以继续被申请拍卖。
自由期内的第三天存在有效出价的话,就会进入随机期。否则直接跳过随机期,进入清算阶段。
五 拍卖的随机期
进入随机期后,最长会持续两天,竞拍者在这个时段出价,会有随机的概率结束这场域名的拍卖。这个概率会随着时间越来越高,可以近似的认为随机期过了10%那么就有10%的概率触发结束。时间点越往后,结束的概率越大。需要注意的是,如果这次的出价触发了结束,那么这次的出价并不会生效。
之所以设定一个随机期的时段,是因为只有自由期的话,没人会愿意在一开始的时候就为域名出价,只要在快结束的时候出价就可以达到效果,这样的话会导致拍卖流程毫无意义,整个的拍卖流程甚至只要一个块就可以完成。因此我们加入了随机期这一时段,用不确定的结束时间点来避免用户在接近结束的时候扎推出价,让用户尽早的出到自己心目中的价格。
六 域名的使用期和续约期
域名如果被成功拍卖,那么拍卖的获胜者就享有一年的使用权。时间是从域名申请开拍的时间开始,365天后为到期时间。
到期前三个月内为续约期,域名的使用者可以申请续约延长一年的使用时间,延长后的到期时间为原到期时间加365天。目前续约不收取任何费用。
域名到期之后,原使用者可以继续使用。但其余人此时可以申请开拍这个域名,如果拍卖成功,原使用者会丧失使用权。
七 拍卖清算
当一个域名被成功拍卖之后,所有参与拍卖的用户都需要清算一下这次拍卖的资金。成功拍到域名的人把拍卖的总金额都转到奖池里,失败的人则上交10%的费用当作手续费并退回90%到拍卖合约的账户中。另外成功拍到域名的人还需要自己领取域名。有这样的流程是因为合约不能主动做事情,所以需要用户自己处理自己的资金问题。
结束语
拍卖是NNS项目中非常重要的域名获得方式。相比先到先得,直接分配等方式,竞拍可以更有效的让真正想获得使用的人拿到域名。
域名的使用能够提升区块链的易用性。未来,随着NEO生态的应用越来越多,NNS的域名也会越来越有价值。