140 lines
5.6 KiB
JSON
140 lines
5.6 KiB
JSON
|
{
|
||
|
"title": "Wallet",
|
||
|
"description": "An LBC wallet",
|
||
|
"type": "object",
|
||
|
"required": ["name", "version", "accounts", "preferences"],
|
||
|
"additionalProperties": false,
|
||
|
"properties": {
|
||
|
"name": {
|
||
|
"description": "Human readable name for this wallet",
|
||
|
"type": "string"
|
||
|
},
|
||
|
"version": {
|
||
|
"description": "Wallet spec version",
|
||
|
"type": "integer",
|
||
|
"$comment": "Should this be a string? We may need some sort of decimal type if we want exact decimal versions."
|
||
|
},
|
||
|
"accounts": {
|
||
|
"description": "Accounts associated with this wallet",
|
||
|
"type": "array",
|
||
|
"items": {
|
||
|
"type": "object",
|
||
|
"required": ["address_generator", "certificates", "encrypted", "ledger", "modified_on", "name", "private_key", "public_key", "seed"],
|
||
|
"additionalProperties": false,
|
||
|
"properties": {
|
||
|
"address_generator": {
|
||
|
"description": "Higher level manager of either singular or deterministically generated addresses",
|
||
|
"type": "object",
|
||
|
"oneOf": [
|
||
|
{
|
||
|
"required": ["name", "change", "receiving"],
|
||
|
"additionalProperties": false,
|
||
|
"properties": {
|
||
|
"name": {
|
||
|
"description": "type of address generator: a deterministic chain of addresses",
|
||
|
"enum": ["deterministic-chain"],
|
||
|
"type": "string"
|
||
|
},
|
||
|
"change": {
|
||
|
"$ref": "#/$defs/address_manager",
|
||
|
"description": "Manager for deterministically generated change address (not used for single address)"
|
||
|
},
|
||
|
"receiving": {
|
||
|
"$ref": "#/$defs/address_manager",
|
||
|
"description": "Manager for deterministically generated receiving address (not used for single address)"
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
"required": ["name"],
|
||
|
"additionalProperties": false,
|
||
|
"properties": {
|
||
|
"name": {
|
||
|
"description": "type of address generator: a single address",
|
||
|
"enum": ["single-address"],
|
||
|
"type": "string"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
"certificates": {
|
||
|
"type": "object",
|
||
|
"description": "Channel keys. Mapping from public key address to pem-formatted private key.",
|
||
|
"additionalProperties": {"type": "string"}
|
||
|
},
|
||
|
"encrypted": {
|
||
|
"type": "boolean",
|
||
|
"description": "Whether private key and seed are encrypted with a password"
|
||
|
},
|
||
|
"ledger": {
|
||
|
"description": "Which network to use",
|
||
|
"type": "string",
|
||
|
"examples": [
|
||
|
"lbc_mainnet",
|
||
|
"lbc_testnet"
|
||
|
]
|
||
|
},
|
||
|
"modified_on": {
|
||
|
"description": "last modified time in Unix Time",
|
||
|
"type": "integer"
|
||
|
},
|
||
|
"name": {
|
||
|
"description": "Name for account, possibly human readable",
|
||
|
"type": "string"
|
||
|
},
|
||
|
"private_key": {
|
||
|
"description": "Private key for address if `address_generator` is a single address. Root of chain of private keys for addresses if `address_generator` is a deterministic chain of addresses. Encrypted if `encrypted` is true.",
|
||
|
"type": "string"
|
||
|
},
|
||
|
"public_key": {
|
||
|
"description": "Public key for address if `address_generator` is a single address. Root of chain of public keys for addresses if `address_generator` is a deterministic chain of addresses.",
|
||
|
"type": "string"
|
||
|
},
|
||
|
"seed": {
|
||
|
"description": "Human readable representation of `private_key`. encrypted if `encrypted` is set to `true`",
|
||
|
"type": "string"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
"preferences": {
|
||
|
"description": "Timestamped application-level preferences. Values can be objects or of a primitive type.",
|
||
|
"$comment": "enable-sync is seen in example wallet. encrypt-on-disk is seen in example wallet. they both have a boolean `value` field. Do we want them explicitly defined here? local and shared seem to have at least a similar structure (type, value [yes, again], version), value being the free-form part. Should we define those here? Or can there be any key under preferences, and `value` be literally be anything in any form?",
|
||
|
"type": "object",
|
||
|
"additionalProperties": {
|
||
|
"type": "object",
|
||
|
"required": ["ts", "value"],
|
||
|
"additionalProperties": false,
|
||
|
"properties": {
|
||
|
"ts": {
|
||
|
"type": "number",
|
||
|
"description": "When the item was set, in Unix time format.",
|
||
|
"$comment": "Do we want a string (decimal)?"
|
||
|
},
|
||
|
"value": {
|
||
|
"$comment": "Sometimes this has been an object, sometimes just a boolean. I don't want to prescribe anything."
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
"$defs": {
|
||
|
"address_manager": {
|
||
|
"description": "Manager for deterministically generated addresses",
|
||
|
"type": "object",
|
||
|
"required": ["gap", "maximum_uses_per_address"],
|
||
|
"additionalProperties": false,
|
||
|
"properties": {
|
||
|
"gap": {
|
||
|
"description": "Maximum allowed consecutive generated addresses with no transactions",
|
||
|
"type": "integer"
|
||
|
},
|
||
|
"maximum_uses_per_address": {
|
||
|
"description": "Maximum number of uses for each generated address",
|
||
|
"type": "integer"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|