{"action":"created","issue":{"url":"https://api.github.com/repos/dashpay/dash/issues/1066","repository_url":"https://api.github.com/repos/dashpay/dash","labels_url":"https://api.github.com/repos/dashpay/dash/issues/1066/labels{/name}","comments_url":"https://api.github.com/repos/dashpay/dash/issues/1066/comments","events_url":"https://api.github.com/repos/dashpay/dash/issues/1066/events","html_url":"https://github.com/dashpay/dash/pull/1066","id":181896730,"number":1066,"title":"new PoSe - MNVERIFY","user":{"login":"UdjinM6","id":1935069,"avatar_url":"https://avatars.githubusercontent.com/u/1935069?v=3","gravatar_id":"","url":"https://api.github.com/users/UdjinM6","html_url":"https://github.com/UdjinM6","followers_url":"https://api.github.com/users/UdjinM6/followers","following_url":"https://api.github.com/users/UdjinM6/following{/other_user}","gists_url":"https://api.github.com/users/UdjinM6/gists{/gist_id}","starred_url":"https://api.github.com/users/UdjinM6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UdjinM6/subscriptions","organizations_url":"https://api.github.com/users/UdjinM6/orgs","repos_url":"https://api.github.com/users/UdjinM6/repos","events_url":"https://api.github.com/users/UdjinM6/events{/privacy}","received_events_url":"https://api.github.com/users/UdjinM6/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2016-10-09T16:36:47Z","updated_at":"2016-10-18T14:03:05Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/dashpay/dash/pulls/1066","html_url":"https://github.com/dashpay/dash/pull/1066","diff_url":"https://github.com/dashpay/dash/pull/1066.diff","patch_url":"https://github.com/dashpay/dash/pull/1066.patch"},"body":"So the idea is to use an approach similar to the old PoSe but it's kind of upside-down - instead of relaying \"ban\" score we relay signed \"success\" plus it uses randomized nonce to verify that node is not only online but is synced and is capable of signing a message properly. This message is constructed in a kind of ping-pong like manner: it's initially constructed by a verifying node, filled with signature of a verified node and finally filled with additional fields and a signature of a verifying node. And only then it's relayed to the rest of the network but only if a verifying node is a masternode. In this scheme all nodes only know that some legit masternode (or at least a masternode from the top `MAX_POSE_RANK` which was also able to construct a correct signature) verified some another legit/reachable masternode (or at least a masternode that was able to construct a correct signature). So once nodes have quite a few such messages for some masternode they can be pretty sure that announced IP address of that node was OK. In other words, it's not \"exclude who was banned first\" (like it was in the old version) but \"approve the one who was verified first and exclude the others with the same IP\". Assuming that majority of masternodes are legit, they should get much faster approval comparing to malicious nodes if someone would try to game the system.\r\n\r\nNote that if we can't connect to some masternode (e.g. during mixing), its `nPoSeBanScore` is increased (local only which looks like a bit controversial design but eventually the whole masternode network should arrive at the same decision pretty soon imo). Once some masternode is finally \"banned\" in that way it would have to stay offline for at least `MASTERNODE_POSE_BAN_SECONDS` (1 day in proposed code) to be removed from the list and be able to enter the list again (or one can move funds to a new outpoint and start from scratch). If it's alive and sending pings, this period of \"ban\" is extended. This way if your node was offline for a short period of time, it can probably miss few checks from top masternodes and they will set some local \"ban\" score but getting your node back online should save you from hijacking your ip by some other node and you should get to \"approved\" state again quite quickly.\r\n\r\nTODO: if that scheme proves itself in testing we could probably start paying bock rewards only to masternodes with `IsPoSeVerified()` equal `true`.\r\n\r\nNOTE: This requires proto bump to 70203 (not included)."},"comment":{"url":"https://api.github.com/repos/dashpay/dash/issues/comments/254517049","html_url":"https://github.com/dashpay/dash/pull/1066#issuecomment-254517049","issue_url":"https://api.github.com/repos/dashpay/dash/issues/1066","id":254517049,"user":{"login":"UdjinM6","id":1935069,"avatar_url":"https://avatars.githubusercontent.com/u/1935069?v=3","gravatar_id":"","url":"https://api.github.com/users/UdjinM6","html_url":"https://github.com/UdjinM6","followers_url":"https://api.github.com/users/UdjinM6/followers","following_url":"https://api.github.com/users/UdjinM6/following{/other_user}","gists_url":"https://api.github.com/users/UdjinM6/gists{/gist_id}","starred_url":"https://api.github.com/users/UdjinM6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UdjinM6/subscriptions","organizations_url":"https://api.github.com/users/UdjinM6/orgs","repos_url":"https://api.github.com/users/UdjinM6/repos","events_url":"https://api.github.com/users/UdjinM6/events{/privacy}","received_events_url":"https://api.github.com/users/UdjinM6/received_events","type":"User","site_admin":false},"created_at":"2016-10-18T14:03:05Z","updated_at":"2016-10-18T14:03:05Z","body":"Rebased/fixed.\r\n\r\nHad to incorporate #1078, refactor `CMasternode::Check`, `CMasternodeMan::CheckMnbAndUpdateMasternodeList` and `CMasternodeBroadcast` to streamline/fix logic. Hope additional changes make sense :)"}}
{"actor":{"display_login":"UdjinM6"}}