NEP:NEO Enhancement Proposals,即NEO改進提案,描述了NEO平臺的標準,包括核心協議規範,客戶端API和合約標準等。最爲熟知的是NEP-5代幣標準。
目前NEP-6錢包標準已經完成,以下爲NEP-6錢包標準的Github文檔(https://github.com/neo-project/proposals/blob/master/nep-6.mediawiki)
摘要
NEP-6描述了一個錢包標準,將支持錢包文件在NEO的各種錢包客戶端之間共享。
目標
目前,不同的客戶端程序會生成不同的錢包文件。他們有不同的文件格式,不同的存儲方式,以及不同的加密方式。用戶難以在不同的客戶端程序之間遷移,因爲錢包文件格式不同。儘管可以通過導出私鑰來實現移植,但是對於具有多個私鑰的錢包而言,這是非常麻煩的。我們需要一個通用的錢包格式,允許用戶安全而輕鬆地遷移到所有平臺上,而無需更改錢包文件或導出私鑰。
基本原理
錢包標準應該考慮安全性和跨平臺兼容性。爲了安全起見,我們要求實現使用NEP-2(https://github.com/neo-project/proposals/blob/master/nep-2.mediawiki)機制來加密或解密私鑰。爲了達成跨平臺要求,我們使用JSON格式來描述錢包文件,以便在每個平臺上能夠識別錢包文件的內容。
規範
JSON格式的錢包文件由以下內容構成基本結構
{ "name": "MyWallet", "version": "1.0", "scrypt": {}, "accounts": \[\], "extra": null }
name
是用戶對錢包文件所做的標記。
version
目前已經修復1.0
並將用於未來的功能升級。
scrypt
是一個ScryptParameters對象,它描述了用於加密和解密錢包中私鑰的SCrypt算法的參數。
accounts
是一個Account對象的數組,用於描述錢包中每個賬戶的詳細信息。
extra
是由客戶的實現者定義的用於存儲額外數據的對象。這個字段可以null。
ScryptParameters
ScryptParameters對象具有以下結構:
{ “n”:16384, “r”:8, “p”:8}
n
是定義CPU /內存成本的參數。必須是2 ^ N的值。
r
是一個調整參數。
p
是一個調整參數(並行參數)。大的p值會增加SCrypt的計算成本,而不會增加內存使用量。
賬戶
賬戶對象具有以下結構:
{ “address”:“AQLASLtT6pWbThcSCYU1biVqhMnzhTgLFq”, “label”:“MyAddress”, “isDefault”:true, “lock”:false, “key”:“6PYWB8m1bCnu5bQkRUKAwbZp2BHNvQ3BQRLbpLdTuizpyLkQPSZbtZfoxx”, “contract”:{}, “extra”:null}
address
是帳戶的base58編碼地址。
label
是用戶對帳戶所做的標籤。
isDefault
指示該帳戶是否是默認的更改帳戶。
lock
指示該帳戶是否被用戶鎖定。客戶不應將資金用於鎖定的賬戶。
key
是NEP-2格式的帳戶的私鑰。該字段可以是null(僅用於監視地址或非標準地址)。
contract
是描述合同細節的合約對象。這個字段可以是null(僅供觀看地址)。
extra
是由客戶的實現者定義的用於存儲額外數據的對象。這個字段可以null
。
合約
合約對象具有以下結構:
{ "script": "21036dc4bf8f0405dcf5d12a38487b359cb4bd693357a387d74fc438ffc7757948b0ac", "parameters": \[\], "deployed": false }
script
是合同的腳本代碼。如果合同已經部署到區塊鏈,這個字段可以是null。
parameters
是一個Parameter對象的數組,它描述了契約函數中每個參數的細節。有關Parameter對象的更多信息,請參閱NEP-3:NeoContract ABI中的說明。(https://github.com/neo-project/proposals/blob/master/nep-3.mediawiki)
deployed
表示合約是否已經部署到區塊鏈。
舊版兼容性
所有舊格式的錢包應該可以很容易地轉換成這個新的JSON格式。如果這些錢包文件包含一些額外的數據,它們可以存儲在文件中extra
。
應用
neo-project / neo:https://github.com/neo-project/neo/blob/master/neo/Implementations/Wallets/NEP6/NEP6Wallet.cs
CityOfZion / neon-js:https://github.com/CityOfZion/neon-js/blob/feature/nep-wallet/src/wallet/Wallet.js