文章目錄
- 摘要
- 動機
- 基本原理
- 詳述
-
- 錢包
- 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