文章目錄
- 摘要
- 動機
- 基本原理
- 詳述
- 錢包
- Scrypt引數
- 賬戶
- 合約
- 向後相容性
- 實現
摘要
本NEP描述了一個錢包標準用於錢包檔案在NEO多種實現間的相容。
動機
目前,不同的客戶端程式生成不同的錢包檔案。它們具有不同的檔案格式,不同的儲存方式以及不同的加密方式。使用者很難在不同的客戶端程式之間進行遷移,因為錢包檔案的格式不同。儘管可以透過匯出私鑰來實現遷移,但是對於具有多個私鑰的錢包來說是很麻煩的。我們需要一種通用錢包格式,允許使用者安全輕鬆地跨所有平臺遷移,而無需更改錢包檔案或匯出私鑰。
基本原理
錢包標準應考慮安全性和跨平臺相容性。為了安全起見,我們要求實現使用NEP-2機制來加密或解密私鑰。對於跨平臺,我們使用JSON格式來描述錢包檔案,以便可以在每個平臺上輕鬆識別錢包檔案的內容。
詳述
錢包
Json格式的錢包檔案具有以下的基礎結構:
{ "name": "MyWallet", "version": "1.0", "scrypt": {}, "accounts": [], "extra": null }
name是使用者對錢包檔案所做的標籤。
version目前固定為1.0,將來用於功能性升級。
scrypt是一個ScryptParameters物件,用於描述錢包私鑰加密解密用的SCrypt演算法的引數。
accounts是一個Account物件陣列,用於描述錢包中每個帳戶的詳細資訊。
extra是由客戶端的實現者定義,用於儲存額外的資料。該欄位可以為null。
Scrypt引數
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格式。此欄位可以為空(僅限觀察地址或非標準地址)。
contract是一個Contract物件,用於描述合約的細節。該欄位可以為null(僅限監視地址)。
extra是由客戶端的實現者定義的用於儲存額外資料的物件。該欄位可以為null。
合約
合約物件有以下結構:
{ "script": "21036dc4bf8f0405dcf5d12a38487b359cb4bd693357a387d74fc438ffc7757948b0ac", "parameters": [], "deployed": false }
script是合約的指令碼程式碼。如果合約已經被部署在區塊鏈上,則該值可以為null。
parameters是引數物件陣列,用於描述合約函式中每個引數的細節。需要更多引數物件的資訊,可以檢視NEP-3:NeoContractABI中的描述。
向後相容性
所有舊格式的錢包必需可以輕易轉換成這種新的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/master/src/wallet/Wallet.js
原文連結:https://github.com/neo-project/proposals/blob/master/nep-6.mediawiki