Updates and softens a bit a wallet schema to support the current structure

This commit is contained in:
Igor Kuzmenko 2017-07-18 20:09:34 +02:00
parent 83be9af811
commit e5efe43abf
4 changed files with 198 additions and 296 deletions

View file

@ -24,8 +24,9 @@ file.close()
results = JSON::Validator.fully_validate(schema, document) results = JSON::Validator.fully_validate(schema, document)
if results.empty? if results.empty?
exit(0) exit(0)
else else
puts results puts ARGV[1]
exit(1) puts results
exit(1)
end end

View file

@ -32,9 +32,6 @@ platform:
link: "https://appworld.blackberry.com/webstore/content/23952882/" link: "https://appworld.blackberry.com/webstore/content/23952882/"
source: "https://github.com/bitcoin-wallet/bitcoin-wallet" source: "https://github.com/bitcoin-wallet/bitcoin-wallet"
screenshot: "bitcoinwalletandroid.png" screenshot: "bitcoinwalletandroid.png"
os:
- android
- blackberry
check: check:
control: "checkgoodcontrolfull" control: "checkgoodcontrolfull"
validation: "checkpassvalidationspvp2p" validation: "checkpassvalidationspvp2p"

View file

@ -40,7 +40,6 @@ platform:
text: "walletbitgo" text: "walletbitgo"
link: "https://www.bitgo.com/" link: "https://www.bitgo.com/"
screenshot: "bitgo.png" screenshot: "bitgo.png"
os:
check: check:
control: "checkpasscontrolmulti" control: "checkpasscontrolmulti"
validation: "checkfailvalidationcentralized" validation: "checkfailvalidationcentralized"

View file

@ -2,317 +2,222 @@
# This file is licensed under the MIT License (MIT) available on # This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT. # http://opensource.org/licenses/MIT.
id: https://bitcoin.org/quality-assurance/schemas/wallets.yaml id: https://bitcoin.org/quality-assurance/schemas/wallets.yaml
description: The main container description: The wallet object
type: object type: object
required: required:
- layout
- id - id
- wallets - title
additionalProperties: false - titleshort
properties: - compat
layout: - level
description: The Jekyll page layout to use - platform
type: string # additionalProperties can not be true, as then the wallet fails due to license
enum:
- base
properties:
id: id:
description: The page identifier to use for translations description: The page identifier to use for translations
type: string type: string
max_wallet_text_length: title:
description: > description: The full wallet name; displayed when you view the full listing
The global maximum length for a wallet text description in any type: string
langugage (counted in Unicode characters). Ensures text doesn't minLength: 1
overfill its box. maxLength: 100
titleshort:
description: A short name displayed on the overview page
type: string
minLength: 1
maxLength: 20
## TODO: change this into an array so we can practically test values
compat:
description: A complete list of platforms supported by the wallet
type: string
minLength: 1
## TODO: we should probably use names here and translate to
## numbers (if required) in the template
level:
description: |
The wallet's overall security level.
1 - full nodes
2 - SPV using random servers (e.g. P2P SPV, Electrum servers, etc...)
3 - Hybrid & multisig wallets
4 - Web wallets
type: integer type: integer
minimum: 1
maximum: 4
## The wallets array ## The platforms the wallet supports
wallets: platform:
description: The array containing all wallets description: the platforms the wallet supports
type: array type: array
uniqueItems: true additionalProperties: false
items: items:
description: The wallets. Each value is an arbitrary ID
type: object type: object
additionalProperties: ## matches anything since this is an arbitrary ID string additionalProperties:
required: - default
- title
- titleshort
- compat
- level
- platform
additionalProperties: false
properties:
title:
description: The full wallet name; displayed when you view the full listing
type: string
minLength: 1
maxLength: 100
titleshort: required:
description: A short name displayed on the overview page - os
type: string - name
minLength: 1
maxLength: 20
## TODO: change this into an array so we can practically test values properties:
compat: name:
description: A complete list of platforms supported by the wallet type: string
type: string enum:
minLength: 1 - desktop
- mobile
## TODO: we should probably use names here and translate to - hardware
## numbers (if required) in the template - web
level: os:
description: | description: The specific operating systems the wallet supports
The wallet's overall security level. type: array
1 - full nodes uniqueItems: true
2 - SPV using random servers (e.g. P2P SPV, Electrum servers, etc...) items:
3 - Hybrid & multisig wallets description: List of operating systems with wallet details
4 - Web wallets
type: integer
minimum: 1
maximum: 4
## The platforms the wallet supports
platform:
description: the platforms the wallet supports
type: object type: object
additionalProperties: false required: &required
## Wallets that want to use different names, screenshots, - name
## download URLs, or scoring for different versions (e.g. an - text
## Android version and an iOS version) must declare both a - link
## default platform for the main platform (desktop, mobile, - screenshot
## hardware, web) and then a sub-platform in the platform field - check
## for any entries that diverge from the default (android, ios, ## TODO: Not currently required, but we should aim for making it required #
## blackberry, etc...). We use a long hand-maintained list of # - source
## dependencies here to ensure that any wallet using a additionalProperties:
## sub-platform also declares main platform. - privacycheck
#
## TODO: refactor YAML to get rid of this weirdness
dependencies:
android:
- mobile
ios:
- mobile
blackberry:
- mobile
windowsphone:
- mobile
windows:
- desktop
linux:
- desktop
mac:
- desktop
properties: properties:
desktop: name:
description: Wallets that run on desktop operating systems type: string
type: object enum:
required: &desktop-required # mobile os
- text - android
- link - windowsphone
# - source ## TODO: Not currently required, but we should aim for making it required - blackberry
- screenshot - ios
- os # desktop os
- check - windows
- privacycheck - mac
additionalProperties: false - linux
properties: # pseudo web os
text: &text - web
description: > # pseudo hardware os
The identifier for the wallet's translation string. - hardware
Also used for the wallet's icon within the /img/wallet/ text: &text
directory. description: >
type: string The identifier for the wallet's translation string.
link: &link Also used for the wallet's icon within the /img/wallet/
description: The download URL directory.
type: string type: string
format: uri link: &link
source: &source description: The download URL
description: The source code download URL type: string
type: string format: uri
format: uri source: &source
screenshot: &screenshot description: The source code download URL
description: File name for screenshot within the /img/screenshots/ directory type: string
type: string format: uri
os: screenshot: &screenshot
description: The specific operating systems the wallet supports description: File name for screenshot within the /img/screenshots/ directory
type: array type: string
uniqueItems: true check: &check
items: description: The wallet's features (or lack thereof)
type: string
enum:
- windows
- mac
- linux
check: &check
description: The wallet's features (or lack thereof)
type: object
required:
- control
- validation
- transparency
- environment
- privacy
# - fees ## TODO: make required when web wallets moved
additionalProperties: false
properties:
control:
description: How much control the user has over their money (e.g. private keys)
type: string
enum:
- checkgoodcontrolfull
- checkpasscontrolhybrid
- checkpasscontrolmulti
- checkfailcontrolthirdpartyinsured
- checkfailcontrolthirdparty
validation:
description: How much assurance the user has that their bitcoins are real
type: string
enum:
- checkgoodvalidationfullnode
- checkgoodvalidationfullnoderequired
- checkneutralvalidationvariable
- checkpassvalidationspvp2p
- checkpassvalidationspvservers
- checkpassvalidationservers
- checkfailvalidationcentralized
transparency:
description: How much insight the user has into the code they run
type: string
enum:
- checkgoodtransparencydeterministic
- checkpasstransparencyopensource
- checkpasstransparencyopensourcehardware
- checkpasstransparencyopenspechardware
- checkfailtransparencyclosedsource
- checkfailtransparencyremote
- checkfailtransparencynew
environment:
description: How secure is the environment the wallet runs in
type: string
enum:
- checkgoodenvironmenthardware
- checkpassenvironmentmobile
- checkpassenvironmenttwofactor
- checkfailenvironmentdesktop
privacy:
description: How much privacy the wallet gives the user
type: string
enum:
- checkgoodprivacyimproved
- checkpassprivacybasic
- checkneutralprivacyvariable
- checkfailprivacyweak
fees:
description: How does the wallet decide what fee to pay
type: string
enum:
- checkgoodfeecontrolfull
- checkpassfeecontroldynamic
- checkpassfeecontroloverride
- checkneutralfeecontrolvariable
- checkfailfeecontrolstatic
privacycheck: &privacycheck
description: Details about the wallet's privacy settings
type: object
required:
- privacyaddressreuse
- privacydisclosure
- privacynetwork
additionalProperties: false
properties:
privacyaddressreuse:
description: Does the wallet default to address reuse?
type: string
enum:
- checkpassprivacyaddressrotation
- checkfailprivacyaddressrotation
privacydisclosure:
description: To whom, if anyone, does the wallet reveal the addresses it uses?
type: string
enum:
- checkpassprivacydisclosurefullnode
- checkfailprivacydisclosurespv
- checkfailprivacydisclosurecentralized
- checkfailprivacydisclosureaccount
privacynetwork:
description: What network-level privacy options does the wallet support
type: string
enum:
- checkpassprivacynetworksupporttorproxy
- checkfailprivacynetworknosupporttor
mobile: &mobile
description: Wallets that run on mobile devices with limited operating systems
type: object
required: *desktop-required
properties:
text: *text
link: *link
source: *source
screenshot: *screenshot
os:
description: The specific operating systems the wallet supports
type: array
uniqueItems: true
items:
type: string
enum:
- android
- blackberry
- ios
- windowsphone
check: *check
privacycheck: *privacycheck
## Aliases for the mobile platform to allow setting
## specific download URLs and screenshots for apps on
## different mobile platforms
android: *mobile
ios: *mobile
blackberry: *mobile
windowsphone: *mobile
web:
description: Wallets that run in a web browser
type: object type: object
required: required:
- text - control
- link - validation
# - source ## Not required :-( - transparency
- screenshot - environment
- os - privacy
- check ## TODO: make required when web wallets moved
- privacycheck # - fees
additionalProperties: false additionalProperties: false
properties: properties:
text: *text control:
link: *link description: How much control the user has over their money (e.g. private keys)
source: *source type: string
screenshot: *screenshot enum:
os: - checkgoodcontrolfull
type: null - checkpasscontrolhybrid
check: *check - checkpasscontrolmulti
privacycheck: *privacycheck - checkfailcontrolthirdpartyinsured
- checkfailcontrolthirdparty
hardware: validation:
description: Transaction-signing hardware that works in conjunction with software that interacts with the network description: How much assurance the user has that their bitcoins are real
type: string
enum:
- checkgoodvalidationfullnode
- checkgoodvalidationfullnoderequired
- checkneutralvalidationvariable
- checkpassvalidationspvp2p
- checkpassvalidationspvservers
- checkpassvalidationservers
- checkfailvalidationcentralized
transparency:
description: How much insight the user has into the code they run
type: string
enum:
- checkgoodtransparencydeterministic
- checkpasstransparencyopensource
- checkpasstransparencyopensourcehardware
- checkpasstransparencyopenspechardware
- checkfailtransparencyclosedsource
- checkfailtransparencyremote
- checkfailtransparencynew
environment:
description: How secure is the environment the wallet runs in
type: string
enum:
- checkgoodenvironmenthardware
- checkpassenvironmentmobile
- checkpassenvironmenttwofactor
- checkfailenvironmentdesktop
privacy:
description: How much privacy the wallet gives the user
type: string
enum:
- checkgoodprivacyimproved
- checkpassprivacybasic
- checkneutralprivacyvariable
- checkfailprivacyweak
fees:
description: How does the wallet decide what fee to pay
type: string
enum:
- checkgoodfeecontrolfull
- checkpassfeecontroldynamic
- checkpassfeecontroloverride
- checkneutralfeecontrolvariable
- checkfailfeecontrolstatic
privacycheck: &privacycheck
description: Details about the wallet's privacy settings
type: object type: object
required: required:
- text - privacyaddressreuse
- link - privacydisclosure
- source - privacynetwork
- screenshot
- check
additionalProperties: false additionalProperties: false
properties: properties:
text: *text privacyaddressreuse:
link: *link description: Does the wallet default to address reuse?
source: *source type: string
screenshot: *screenshot enum:
check: *check - checkpassprivacyaddressrotation
- checkfailprivacyaddressrotation
privacydisclosure:
description: To whom, if anyone, does the wallet reveal the addresses it uses?
type: string
enum:
- checkpassprivacydisclosurefullnode
- checkfailprivacydisclosurespv
- checkfailprivacydisclosurecentralized
- checkfailprivacydisclosureaccount
privacynetwork:
description: What network-level privacy options does the wallet support
type: string
enum:
- checkpassprivacynetworksupporttorproxy
- checkfailprivacynetworknosupporttor