天天看點

NEP提案6摘要動機基本原理詳述向後相容性實作

文章目錄

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

繼續閱讀