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

相關文章
相關標籤/搜索