NNS域名系统之域名竞拍

0x00 前言html

其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的能够移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。vue

我这里主要对轻钱包开发中会用到的一些功能和接口进行介绍。文末有我对区块链域名系统不成熟的看法,欢迎围观批评并指正。git

0x01 域名查询github

若是想要竞拍一个域名,那就要先知道这个域名是否是可用的,是否是已经被别人注册走了或者正在竞拍的过程当中。web

查询域名须要调用NNS系统的getOwnerInfo指令,经过向NNS的域名中心发送该指令,并发送域名的哈希值,域名中心将向其根域名的注册器请求该域名的注册信息。算法

let data = Common.buildScript(
            scriptaddress, 
            "getOwnerInfo",
            ["(hex256)" + domain.toString()]
          );

返回的信息包括域名拥有者,注册器地址,解析器地址和域名的有效期。域名若是已过时,拥有者能够进行续费或者别的用户申请从新开拍。网络

0x03 充值注册器并发

用户持有的SGAS没法直接参与域名的竞拍,须要提早将SGAS充值入域名注册器做为竞拍的燃料,以后用户每次进行竞拍,都会直接从用户的竞拍燃料中进行扣取。固然这部分燃料费用户是能够经过getmoneyback命令随时转出的。dom

let data = Common.buildScript(
        NNS.root.register,
        "getmoneyback",
        ["(addr)" + Wallet.account.address, "(int)" + transcount]
    )

充值的方式是首先调用SGAS的transfer方法,而后调用注册器的setsetmoneyin方法来标记转入操做。 交易构造方法以下:工具

sb.EmitParamJson([
        "(addr)" + Wallet.account.address,//from
        "(addr)" + addressto,//to
        "(int)" + intv//value
    ]);//参数倒序入
    sb.EmitPushString("transfer");//参数倒序入
    sb.EmitAppCall(DAPP_SGAS);//nep5脚本

    ////这个方法是为了在同一笔交易中转帐并充值
    ////固然你也能够分为两笔交易
    ////插入下述两条语句,能获得txid
    sb.EmitSysCall("System.ExecutionEngine.GetScriptContainer");
    sb.EmitSysCall("Neo.Transaction.GetHash");
    //把TXID包进Array里
    sb.EmitPushNumber(Neo.BigInteger.fromString("1"));
    sb.Emit(ThinNeo.OpCode.PACK);
    sb.EmitPushString("setmoneyin");
    sb.EmitAppCall(NNS.root.register);

0x02 竞拍

对于没有被分配或者已通过期的域名,用户能够调用wantbuy指令申请进行拍卖。

拍卖将分为三个阶段:肯定期,随机期,竞拍结束。

竞拍流程

在肯定期,用户能够经过调用addPrice命令出价竞拍,还能够进行加价以争夺域名全部权。

let data = Common.buildScript(
        NNS.root.register,
        "addPrice",
        [
            "(hex160)" + who.toString(),  //用户帐户脚本哈希
            "(hex256)" + info.id.toString(), //竞拍id
            "(int)" + amount //加价金额
          ]
    );

为了不出现恶意竞拍(在竞拍最后期限进行少许加价以夺取全部权),在肯定期后,域名还会进入一段随机期,在随机期里,域名竞拍将不定时结束,时间越长,结束的几率越大,以此鼓励用户尽早参与对域名的竞拍。

0x03 结束竞拍

在随机期结束以后,没法再对域名进行加价。竞拍结束,参与竞拍的用户能够调用endSelling指令来结束竞拍,对于域名竞拍的拍的者,会收取全部的竞拍费用,对于其余参与者,则会返回90%的竞拍费用。全部竞拍所得又会以分成的形式所有分发给NNC的持有者。

let script = Common.buildScript(
        NNS.root.register,
        "endSelling",
        [
            "(hex160)" + who.toString(),
            "(hex256)" + id
        ]
    );

0x04 竞拍查询

每一个竞拍都会生成惟一的竞拍id,用户经过这个竞拍id就能够查询到域名竞拍的详情。查询竞拍详情调用的注册器方法是 getSellingDomain。这个命令接收两个参数,第一个是用户的地址,第二个就是竞拍的id。

let script = Common.buildScript(
        NNS.root.register,
        "getSellingDomain",
        [
            "(hex160)" + who.toString(), //用户帐户 脚本哈希
            "(hex256)" + id//竞拍id
        ]
    );

0x05 后记

在写NNS系统原理以后,我想谈谈本身对区块链的域名系统前景的一些思考。其实从大环境来看,先行者ENS走的并非很顺利,虽然刚刚推出的时候风靡一时,可是随着时间的流失,其热度慢慢已经冷却下来,甚至走向了冰封。天价域名的新闻再也不出现,甚至ENS自己也几乎再也不被社区说起,纵观个各大交易所,支持ENS的更是没有几家。基于区块链的域名系统总体来讲给人一种凉凉的感受。

咱们首先来看如今各类加密货币的主要使用场景,不管是以前的ICO仍是如今的交易所挖矿,几乎都不是区块链自己在使能。咱们但愿中的区块链是承载各类数据记录并使其不可串改。但愿中的公链是支撑各类项目应用落地。但愿中的代币是推进应用运行的燃料。可是现实是几乎全部的项目在主流币民手里都只是投资的工具,而不是应用的工具。

我不想说哪一个更好哪一个更坏,每一个人都拥有本身手中的加密货币的绝对支配权,想干吗都无所谓。可是做为投资工具的话,用户的币主要仍是在中心化交易所和本身的冷钱包之间进行转换,其所须要交互的地址有限,在这种状况下,区块链域名存在的重要性并不高。这也是如今域名系统不多有人用的主要缘由,原本就没几个地址,多转几回账就记个差很少了。就像上世纪七十年代的网络系统,翻来覆去就那么几个ip,构建一个全球范围内的域名系统实在不必。

可是区块链不会永远是炒做工具,随着区块链的发展,必定会不断的出现优秀的区块链应用来丰富区块链的场景和生态(好比NEL在支持的区块链游戏开发)。并且这个过程必定是加速进行的,做为web3.0,区块链也必定会走出互联网式的发展轨迹,专业的区块链硬件与算法会不停的被设计和研发,共识的周期会愈来愈短,因而区块链的适用场景愈来愈丰富,渐渐融入到咱们的生活,而不只仅是中心化的交易所。

谁都知道google.com,但是谁能说出来google众多ip中的任何一个呢?ipv4且不行,到ipv6呢?那比ipv6更复杂的区块链帐户地址呢?

因此,如今根本不是域名系统的寒冬,而是域名系统的初春。

PS:文中代码来自NEL赵奔同窗的nel-wallet-vue: https://github.com/NewEconoLab/nel-wallet-vue

相关文章
相关标签/搜索