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

文章目錄

  • 摘要
  • 動機
  • 基本原理
  • 詳述
    • 錢包
    • Scrypt參數
    • 帳戶
    • 合約
  • 向後兼容性
  • 實現

 

摘要

本NEP描述了一個錢包標準用於錢包文件在NEO多種實現間的兼容。git

動機

目前,不一樣的客戶端程序生成不一樣的錢包文件。它們具備不一樣的文件格式,不一樣的存儲方式以及不一樣的加密方式。用戶很難在不一樣的客戶端程序之間進行遷移,由於錢包文件的格式不一樣。儘管能夠經過導出私鑰來實現遷移,可是對於具備多個私鑰的錢包來講是很麻煩的。咱們須要一種通用錢包格式,容許用戶安全輕鬆地跨全部平臺遷移,而無需更改錢包文件或導出私鑰。github

基本原理

錢包標準應考慮安全性和跨平臺兼容性。爲了安全起見,咱們要求實現使用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值中。ui

實現

• 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加密

相關文章
相關標籤/搜索