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
NEO開發者交流QQ群:795681763