NEO改進協議提案9(NEP-9)

文章目錄

  • 摘要
  • 動機
  • 詳述
    • 原生資產轉移URI
      • URI鍵
      • 可用URI 鍵 映射 NEO 交易屬性鍵
      • 參考原生資產地址
      • 例子
    • 智能合約調用URI
      • NEP-5 token 轉移
        • URI Keys
        • 例子
  • 原理
  • 實現
  • 參考

摘要

本NEP描述了一個用於NEO原生資產轉移的URI標準。此外,它提議一個URI子集用於完善智能合約操做,在本提案所包含的NEP-5token被轉移時。將來,隨着更便於理解的和通過良好測試的合約被加入網絡時,URI會被增長。咱們定義了一個框架用於斷定一個URI方案是否適用於下面的智能合約操做。git

動機

目前,沒有標準URI可供NEO客戶端使用。比特幣實現了一個URI標準,所以點擊鏈接或掃描二維碼能夠輕鬆實現一個比特幣支付。一樣,NEO上的原生資產轉移可應該如此簡單易行github

然而,NEO可能能夠經過智能合約的調用實現更多的合約操做。這包括token的鑄造和轉移,註冊域名,交換和另一些自定義應用。理想狀況下,一個URI存在通用智能合約的調用。然而,這存在安全隱患,可能很難斷定智能合約實際作了什麼,可能所以致使資金的損失安全

爲了解決該問題,咱們提議爲通用智能合約調用生成的URI被限制在一個完善的合約操做的子集內(例如NEP-5 token的轉移)。這將是得客戶端輕鬆理解和驗證給定的URI將要進行的操做。若是客戶端更注重安全性,能夠維護一個遵頊給定URI規範的合約白名單網絡

任何新的被添加進本提案的NEO URI對應的智能合約應當是安全、記錄良好和普遍使用。咱們將在本提案的最後進行更多的討論框架

詳述

原生資產轉移URI

原生資產的轉移有如下URI。它描述了接收者地址,資產和伴隨着交易發送的額外屬性。
URI 方案: neo測試

neo:<address>[?asset=<asset>][?amount=<amount>][?<TransactionAttributeKey>=<value>]

URI鍵

描述 是否必需
address 有效NEO地址
asset neo、gas和資產ID
amount 資產被髮送的數量 e.g 1.0

可用URI 鍵 映射 NEO 交易屬性鍵

URIKEY NEO 交易屬性 描述
contractHash 0x00 合約的哈希
ecdh02, ecdh03 0x02,0x03 公鑰 用於 ECDH 密鑰交換
script 0x20 交易的額外驗證
vote 0x30 用於投票
certUrl 0x80 證書的Url地址
descriptionUrl 0x81 描述的Url地址
description 0x90 簡易描述
hash1,hash2,…,hash15 0xa1,0xa2,…,0xaf 用於存儲自定義哈希值
remark,remark2,…,remark15 0xf0,0xf1,…,0xff 備註

參考原生資產地址

名字 哈希
NEO c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b
GAS 602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7

例子

開始交易到指定地址
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb加密

開始未指定數量NEO的交易
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb?asset=neospa

開始1NEO到指定地址的交易
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb?asset=neo&amount=1.0code

開始1NEO到指定地址且交易描述爲「hello」的交易
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb?asset=neo&amount=1.0&description=Hellotoken

開始0.1GAS到指定地址的交易.將公鑰放在ecdh02屬性字段中以容許發件人使用ECDH加密.交易屬性描述爲「hello」
neo:AQc5mtFayAdoCK13BW1cGAzAHyo9SoUWe7?asset= gas&amount=0.1&ecdh02=02ed53ad58c838435d4dd7a4b25c1eba01384c814ca53a539405434807afbb04b4&description=Hello
這應該足夠促使NEO原生資產的安全轉移

智能合約調用URI

爲了調用智能合約,咱們須要指定腳本哈希和智能合約被調用的操做以及提供所需的參數。這樣,應用能夠定製屏幕界面用預填充的信息來匹配調用的操做。例如:NEP-5 token的轉移,投票等。而用戶須要作的是受權/籤和交易。

正如以前所提到的,通用智能合約的調用並不必定適用於URI。這是既是由於安全問題也是由於可用性。URI的客戶端應該100%確信他們使用的URI會達成預期的效果。將其限制在合約操做的子集能夠解決大部分繁雜的問題。若是客戶端想要更加安全,它能夠在每一個受支持的智能合約URI的子集中構建本身的白名單。

任何對受支持合約URI的添加都應遵照與其餘NEO改進提案同樣的過程。爲了添加一個受支持的智能合約URI,操做/提案應具備如下內容…
1.不指定應用
2.通過良好的測試
3.良好的文檔並很容易被客戶端使用
4.URI使用例子

NEP-5 token 轉移

NEP-5token的轉移是智能合約的調用並具備如下URI。

neo:<address>?asset=<NEP5ScriptHash>[?amount=<amount>][?<TransactionAttributeKey>=<value>]

URI Keys

KEY DESCRIPTION REQUIRED
address 可供轉移的有效NEO地址.
asset 有效的big endian格式的合約哈希.
amount 發送的token數量 . e.g 1.0

例子

開始轉移10ONT到指定地址的交易Begin
neo:AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y?asset=ceab719b8baa2310f232ee0d277c061704541cfb&amount=10

開始轉移非指定數量的ONT到指定地址交易
neo:AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y?asset=ceab719b8baa2310f232ee0d277c061704541cfb

原理

URI須要考慮對於用戶和錢包開發者的易用性和安全隱患,尤爲是在執行任意智能合約。與智能合約調用相比,咱們可使用與轉移原生資產相關的URI來更輕鬆的實現安全保障。

實現

參考實現
• https://github.com/O3Labs/NEP9-go
• https://github.com/O3Labs/nep9.js

參考

如下討論有許多與智能合約URI安全相關的論點
• https://github.com/ethereum/EIPs/issues/67

來自 https://github.com/neo-project/proposals/blob/master/nep-9.mediawiki

相關文章
相關標籤/搜索