NEO改進協議提案6(NEP-6)

NEO技術飯發表於2018-12-14

文章目錄

  1. 摘要
  2. 動機
  3. 基本原理
  4. 詳述

    錢包
    Scrypt引數
    賬戶

  5. 合約 向後相容性
  6. 實現

摘要

本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-projec…
• CityOfZion/neon-js: https://github.com/CityOfZion…

原文連結:https://github.com/neo-projec…

相關文章