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

NEO技術飯發表於2018-12-17

文章目錄

1.摘要
2.動機
3.詳述
3.1原生資產轉移URI
3.1.1 URI鍵
3.1.2 可用URI 鍵 對映 NEO 交易屬性鍵
3.1.3 參考原生資產地址
3.1.4 例子
3.2智慧合約呼叫URI
3.2.1 NEP-5 token 轉移
3.2.2 URI Keys3.2.3
3.2.3 例子
4.原理
5.實現
6.參考

摘要

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

動機

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

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

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

任何新的被新增進本提案的NEO URI對應的智慧合約應當是安全、記錄良好和廣泛使用。我們將在本提案的最後進行更多的討論

詳述

原生資產轉移URI

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

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

URI鍵

clipboard.png

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

clipboard.png

參考原生資產地址
名字 雜湊
NEO c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b
GAS 602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7

例子
開始交易到指定地址
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb

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

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

開始1NEO到指定地址且交易描述為“hello”的交易
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb?asset=neo&amount=1.0&description=Hello

開始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

clipboard.png

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

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

原理

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

實現

參考實現
https://github.com/O3Labs/NEP…
https://github.com/O3Labs/nep…

參考

以下討論有許多與智慧合約URI安全相關的論點
https://github.com/ethereum/E…

來自 https://github.com/neo-projec…

相關文章