本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 方案: neo測試
neo:<address>[?asset=<asset>][?amount=<amount>][?<TransactionAttributeKey>=<value>]
鍵 | 描述 | 是否必需 |
---|---|---|
address | 有效NEO地址 | ✓ |
asset | neo、gas和資產ID | – |
amount | 資產被髮送的數量 e.g 1.0 | – |
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原生資產的安全轉移
爲了調用智能合約,咱們須要指定腳本哈希和智能合約被調用的操做以及提供所需的參數。這樣,應用能夠定製屏幕界面用預填充的信息來匹配調用的操做。例如:NEP-5 token的轉移,投票等。而用戶須要作的是受權/籤和交易。
正如以前所提到的,通用智能合約的調用並不必定適用於URI。這是既是由於安全問題也是由於可用性。URI的客戶端應該100%確信他們使用的URI會達成預期的效果。將其限制在合約操做的子集能夠解決大部分繁雜的問題。若是客戶端想要更加安全,它能夠在每一個受支持的智能合約URI的子集中構建本身的白名單。
任何對受支持合約URI的添加都應遵照與其餘NEO改進提案同樣的過程。爲了添加一個受支持的智能合約URI,操做/提案應具備如下內容…
1.不指定應用
2.通過良好的測試
3.良好的文檔並很容易被客戶端使用
4.URI使用例子
NEP-5token的轉移是智能合約的調用並具備如下URI。
neo:<address>?asset=<NEP5ScriptHash>[?amount=<amount>][?<TransactionAttributeKey>=<value>]
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