a21a01cf1a
* start node families topic branch * start node families topic branch * initialise node families contract * define contract storage * registering new family in storage * accepting family invitation * add_pending_invitation * revoke_pending_invitation * remove_family_member * reject_pending_invitation * disband_family * added unit tests for the storage methods * added restriction on uniquness of family names * update rustc version for node families contract common * clippy * basic queries by id * query_families_paged * change family membership storage and expose query for all members of a family * queries for pending invitations * queries for past invitations * queries for past data per node * queries for past family members * query_past_members_for_node_paged * queries for family by name and by owner * fixup family name normalisation * fixed incorrect lower bound for queries for past data * implement contract and storage initialisation * stubbing tx messages that are to be exposed by the contract * handler for updating config * removed partial fee return * wip: create family * move mixnet contract interaction traits to shared location * store original family name alongside the normalised variant * prevent family creation if owner has a node in another family * try_disband_family * try_invite_to_family + shared helpers * try_revoke_family_invitation * accept_family_invitation * stub method for node unbonding * try_reject_family_invitation * unit tests for family name normalisation * try_leave_family * try_kick_from_family * fix outdated comments and add paid fee event attribute * feat: NMv3: leave family upon node unbonding * NF contract handling of unbonding * lints * init node families contract when creating performance contract tester * clippy * avoid self-dep in the contract dev deps * introduced client traits for interacting with the node families contract * add node families contract to cache refresher * added query for all node family members (globally) and started scaffolding nym-api caches * docs and cache -> api conversion * calculating average node age based on individual timestamps * wire up node families cache * http stubs * filled in the implementation * route tests + extracting shared code * review fixes * feat: expose family information for all dvpn gateway endpoints within NS API * expose family information for explorer v3 route * clippy * review comments and optimise db family update * feat: Node Families: expose stake information inside DVpnGateway * chore: update lock files after rebase * chore: sort workspace members * explicitly require providing node families contract address for mixnet contract migration * fix missing node families contract address env export * dont swallow cache overwrite failures in fixture * pin network-defaults rustc version due to contracts dep * further version pinning * chore: update mixnet contract schema
292 lines
7.6 KiB
JSON
292 lines
7.6 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "InstantiateMsg",
|
|
"type": "object",
|
|
"required": [
|
|
"current_nym_node_version",
|
|
"epoch_duration",
|
|
"epochs_in_interval",
|
|
"initial_rewarding_params",
|
|
"node_families_contract_address",
|
|
"rewarding_denom",
|
|
"rewarding_validator_address",
|
|
"vesting_contract_address"
|
|
],
|
|
"properties": {
|
|
"current_nym_node_version": {
|
|
"type": "string"
|
|
},
|
|
"epoch_duration": {
|
|
"$ref": "#/definitions/Duration"
|
|
},
|
|
"epochs_in_interval": {
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"initial_rewarding_params": {
|
|
"$ref": "#/definitions/InitialRewardingParams"
|
|
},
|
|
"interval_operating_cost": {
|
|
"default": {
|
|
"maximum": "1000000000000000",
|
|
"minimum": "0"
|
|
},
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/RangedValue_for_Uint128"
|
|
}
|
|
]
|
|
},
|
|
"key_validity_in_epochs": {
|
|
"default": null,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
],
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"node_families_contract_address": {
|
|
"type": "string"
|
|
},
|
|
"profit_margin": {
|
|
"default": {
|
|
"maximum": "1",
|
|
"minimum": "0"
|
|
},
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/RangedValue_for_Percent"
|
|
}
|
|
]
|
|
},
|
|
"rewarding_denom": {
|
|
"type": "string"
|
|
},
|
|
"rewarding_validator_address": {
|
|
"type": "string"
|
|
},
|
|
"version_score_params": {
|
|
"default": {
|
|
"penalty": "0.995",
|
|
"penalty_scaling": "1.65"
|
|
},
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/VersionScoreFormulaParams"
|
|
}
|
|
]
|
|
},
|
|
"version_score_weights": {
|
|
"default": {
|
|
"major": 100,
|
|
"minor": 10,
|
|
"patch": 1,
|
|
"prerelease": 1
|
|
},
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/OutdatedVersionWeights"
|
|
}
|
|
]
|
|
},
|
|
"vesting_contract_address": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"additionalProperties": false,
|
|
"definitions": {
|
|
"Decimal": {
|
|
"description": "A fixed-point decimal value with 18 fractional digits, i.e. Decimal(1_000_000_000_000_000_000) == 1.0\n\nThe greatest possible value that can be represented is 340282366920938463463.374607431768211455 (which is (2^128 - 1) / 10^18)",
|
|
"type": "string"
|
|
},
|
|
"Duration": {
|
|
"type": "object",
|
|
"required": [
|
|
"nanos",
|
|
"secs"
|
|
],
|
|
"properties": {
|
|
"nanos": {
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"secs": {
|
|
"type": "integer",
|
|
"format": "uint64",
|
|
"minimum": 0.0
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"InitialRewardingParams": {
|
|
"type": "object",
|
|
"required": [
|
|
"active_set_work_factor",
|
|
"initial_reward_pool",
|
|
"initial_staking_supply",
|
|
"interval_pool_emission",
|
|
"rewarded_set_params",
|
|
"staking_supply_scale_factor",
|
|
"sybil_resistance"
|
|
],
|
|
"properties": {
|
|
"active_set_work_factor": {
|
|
"$ref": "#/definitions/Decimal"
|
|
},
|
|
"initial_reward_pool": {
|
|
"$ref": "#/definitions/Decimal"
|
|
},
|
|
"initial_staking_supply": {
|
|
"$ref": "#/definitions/Decimal"
|
|
},
|
|
"interval_pool_emission": {
|
|
"$ref": "#/definitions/Percent"
|
|
},
|
|
"rewarded_set_params": {
|
|
"$ref": "#/definitions/RewardedSetParams"
|
|
},
|
|
"staking_supply_scale_factor": {
|
|
"$ref": "#/definitions/Percent"
|
|
},
|
|
"sybil_resistance": {
|
|
"$ref": "#/definitions/Percent"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"OutdatedVersionWeights": {
|
|
"description": "Defines weights for calculating numbers of versions behind the current release.",
|
|
"type": "object",
|
|
"required": [
|
|
"major",
|
|
"minor",
|
|
"patch",
|
|
"prerelease"
|
|
],
|
|
"properties": {
|
|
"major": {
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"minor": {
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"patch": {
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"prerelease": {
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"Percent": {
|
|
"description": "Percent represents a value between 0 and 100% (i.e. between 0.0 and 1.0)",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/Decimal"
|
|
}
|
|
]
|
|
},
|
|
"RangedValue_for_Percent": {
|
|
"type": "object",
|
|
"required": [
|
|
"maximum",
|
|
"minimum"
|
|
],
|
|
"properties": {
|
|
"maximum": {
|
|
"$ref": "#/definitions/Percent"
|
|
},
|
|
"minimum": {
|
|
"$ref": "#/definitions/Percent"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"RangedValue_for_Uint128": {
|
|
"type": "object",
|
|
"required": [
|
|
"maximum",
|
|
"minimum"
|
|
],
|
|
"properties": {
|
|
"maximum": {
|
|
"$ref": "#/definitions/Uint128"
|
|
},
|
|
"minimum": {
|
|
"$ref": "#/definitions/Uint128"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"RewardedSetParams": {
|
|
"type": "object",
|
|
"required": [
|
|
"entry_gateways",
|
|
"exit_gateways",
|
|
"mixnodes",
|
|
"standby"
|
|
],
|
|
"properties": {
|
|
"entry_gateways": {
|
|
"description": "The expected number of nodes assigned entry gateway role (i.e. [`Role::EntryGateway`])",
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"exit_gateways": {
|
|
"description": "The expected number of nodes assigned exit gateway role (i.e. [`Role::ExitGateway`])",
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"mixnodes": {
|
|
"description": "The expected number of nodes assigned the 'mixnode' role, i.e. total of [`Role::Layer1`], [`Role::Layer2`] and [`Role::Layer3`].",
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"standby": {
|
|
"description": "Number of nodes in the 'standby' set. (i.e. [`Role::Standby`])",
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"Uint128": {
|
|
"description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```",
|
|
"type": "string"
|
|
},
|
|
"VersionScoreFormulaParams": {
|
|
"description": "Given the formula of version_score = penalty ^ (versions_behind_factor ^ penalty_scaling) define the relevant parameters",
|
|
"type": "object",
|
|
"required": [
|
|
"penalty",
|
|
"penalty_scaling"
|
|
],
|
|
"properties": {
|
|
"penalty": {
|
|
"$ref": "#/definitions/Decimal"
|
|
},
|
|
"penalty_scaling": {
|
|
"$ref": "#/definitions/Decimal"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|