NEP-6錢包標準

NEOGO發表於2019-01-21

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

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

NEO開發者交流QQ群:795681763



相關文章