{"action":"created","issue":{"url":"https://api.github.com/repos/ripple/rippled/issues/1842","repository_url":"https://api.github.com/repos/ripple/rippled","labels_url":"https://api.github.com/repos/ripple/rippled/issues/1842/labels{/name}","comments_url":"https://api.github.com/repos/ripple/rippled/issues/1842/comments","events_url":"https://api.github.com/repos/ripple/rippled/issues/1842/events","html_url":"https://github.com/ripple/rippled/pull/1842","id":176468379,"number":1842,"title":"Dynamize trusted validator list and quorum (RIPD-1220):","user":{"login":"wilsonianb","id":5885521,"avatar_url":"https://avatars.githubusercontent.com/u/5885521?v=3","gravatar_id":"","url":"https://api.github.com/users/wilsonianb","html_url":"https://github.com/wilsonianb","followers_url":"https://api.github.com/users/wilsonianb/followers","following_url":"https://api.github.com/users/wilsonianb/following{/other_user}","gists_url":"https://api.github.com/users/wilsonianb/gists{/gist_id}","starred_url":"https://api.github.com/users/wilsonianb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wilsonianb/subscriptions","organizations_url":"https://api.github.com/users/wilsonianb/orgs","repos_url":"https://api.github.com/users/wilsonianb/repos","events_url":"https://api.github.com/users/wilsonianb/events{/privacy}","received_events_url":"https://api.github.com/users/wilsonianb/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"JoelKatz","id":877549,"avatar_url":"https://avatars.githubusercontent.com/u/877549?v=3","gravatar_id":"","url":"https://api.github.com/users/JoelKatz","html_url":"https://github.com/JoelKatz","followers_url":"https://api.github.com/users/JoelKatz/followers","following_url":"https://api.github.com/users/JoelKatz/following{/other_user}","gists_url":"https://api.github.com/users/JoelKatz/gists{/gist_id}","starred_url":"https://api.github.com/users/JoelKatz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JoelKatz/subscriptions","organizations_url":"https://api.github.com/users/JoelKatz/orgs","repos_url":"https://api.github.com/users/JoelKatz/repos","events_url":"https://api.github.com/users/JoelKatz/events{/privacy}","received_events_url":"https://api.github.com/users/JoelKatz/received_events","type":"User","site_admin":false},"assignees":[{"login":"JoelKatz","id":877549,"avatar_url":"https://avatars.githubusercontent.com/u/877549?v=3","gravatar_id":"","url":"https://api.github.com/users/JoelKatz","html_url":"https://github.com/JoelKatz","followers_url":"https://api.github.com/users/JoelKatz/followers","following_url":"https://api.github.com/users/JoelKatz/following{/other_user}","gists_url":"https://api.github.com/users/JoelKatz/gists{/gist_id}","starred_url":"https://api.github.com/users/JoelKatz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JoelKatz/subscriptions","organizations_url":"https://api.github.com/users/JoelKatz/orgs","repos_url":"https://api.github.com/users/JoelKatz/repos","events_url":"https://api.github.com/users/JoelKatz/events{/privacy}","received_events_url":"https://api.github.com/users/JoelKatz/received_events","type":"User","site_admin":false},{"login":"nbougalis","id":5085415,"avatar_url":"https://avatars.githubusercontent.com/u/5085415?v=3","gravatar_id":"","url":"https://api.github.com/users/nbougalis","html_url":"https://github.com/nbougalis","followers_url":"https://api.github.com/users/nbougalis/followers","following_url":"https://api.github.com/users/nbougalis/following{/other_user}","gists_url":"https://api.github.com/users/nbougalis/gists{/gist_id}","starred_url":"https://api.github.com/users/nbougalis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nbougalis/subscriptions","organizations_url":"https://api.github.com/users/nbougalis/orgs","repos_url":"https://api.github.com/users/nbougalis/repos","events_url":"https://api.github.com/users/nbougalis/events{/privacy}","received_events_url":"https://api.github.com/users/nbougalis/received_events","type":"User","site_admin":false}],"milestone":null,"comments":11,"created_at":"2016-09-12T19:54:49Z","updated_at":"2016-10-20T21:27:52Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ripple/rippled/pulls/1842","html_url":"https://github.com/ripple/rippled/pull/1842","diff_url":"https://github.com/ripple/rippled/pull/1842.diff","patch_url":"https://github.com/ripple/rippled/pull/1842.patch"},"body":"Instead of specifying a static list of trusted validators in the config\r\nor validators file, the configuration can now include trusted validator\r\nlist publisher keys and URIs where validator lists are served.\r\nPublisher public keys should use the account public Base58 encoding to\r\ndistinguish them from node public keys. The sites are regularly queried\r\nfor the latest recommended list of validators from the trusted\r\npublishers.\r\n\r\nThe trusted validator list and quorum are now reset each consensus\r\nround using the fetched validator lists and the list of recent\r\nvalidations seen. The validation quorum is no longer configurable.\r\n\r\nValidator lists are expected to be served as JSON and include the\r\nfollowing fields:\r\n\r\n* \"manifest\": Base64-encoded serialization of a manifest containing the\r\n  validator publisher's master and signing public keys. This has the\r\n  same format as the [validation_manifest] config section.\r\n    \r\n* \"blob\": Base64-encoded JSON string containing a \"sequence\" and\r\n  \"validators\" field. \"validators\" contains an array of objects with\r\n  \"validation_public_key\" and \"manifest\" fields.\r\n  \"validation_public_key\" must be an Ed25519 master public key.\r\n\r\n* \"signature\": Hex-encoded signature of the blob using the publisher's\r\n  signing key.\r\n\r\n* \"version\": 1\r\n\r\n* \"refreshInterval\" (optional)\r\n"},"comment":{"url":"https://api.github.com/repos/ripple/rippled/issues/comments/255233432","html_url":"https://github.com/ripple/rippled/pull/1842#issuecomment-255233432","issue_url":"https://api.github.com/repos/ripple/rippled/issues/1842","id":255233432,"user":{"login":"JoelKatz","id":877549,"avatar_url":"https://avatars.githubusercontent.com/u/877549?v=3","gravatar_id":"","url":"https://api.github.com/users/JoelKatz","html_url":"https://github.com/JoelKatz","followers_url":"https://api.github.com/users/JoelKatz/followers","following_url":"https://api.github.com/users/JoelKatz/following{/other_user}","gists_url":"https://api.github.com/users/JoelKatz/gists{/gist_id}","starred_url":"https://api.github.com/users/JoelKatz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JoelKatz/subscriptions","organizations_url":"https://api.github.com/users/JoelKatz/orgs","repos_url":"https://api.github.com/users/JoelKatz/repos","events_url":"https://api.github.com/users/JoelKatz/events{/privacy}","received_events_url":"https://api.github.com/users/JoelKatz/received_events","type":"User","site_admin":false},"created_at":"2016-10-20T21:27:52Z","updated_at":"2016-10-20T21:27:52Z","body":"I think something is badly wrong with the quorum logic. The `quorum_` field holds the number of keys in `trustedKeys` that must sign something for us to accept it.\r\n\r\nSo, for example, `LedgerMaster::checkAccept` accepts a ledger as fully-validated if the number of trusted validations it has exceeds the quorum. That makes sense if *and only if* a validation is trusted if and only if it was signed by a key in `trustedKeys`.\r\n\r\nBut that's not what we're doing. If you look in `addValidation` we set a validation to trusted if it passes the `getTrustedKey` test and it doesn't have to pass `getListedKey` if it's already set to trusted. But `getTrustedKey` doesn't care if a key is in `trustedKeys` or not! It only cares if there's a manifest, not whether it was chosen and included in the quorum.\r\n\r\nOr do I misunderstand something?"}}
{"actor":{"display_login":"JoelKatz"}}