{"action":"opened","issue":{"url":"https://api.github.com/repos/barryWhiteHat/miximus/issues/23","repository_url":"https://api.github.com/repos/barryWhiteHat/miximus","labels_url":"https://api.github.com/repos/barryWhiteHat/miximus/issues/23/labels{/name}","comments_url":"https://api.github.com/repos/barryWhiteHat/miximus/issues/23/comments","events_url":"https://api.github.com/repos/barryWhiteHat/miximus/issues/23/events","html_url":"https://github.com/barryWhiteHat/miximus/issues/23","id":340024632,"node_id":"MDU6SXNzdWUzNDAwMjQ2MzI=","number":23,"title":"Internal transfers without revealing the recipient","user":{"login":"HarryR","id":303926,"node_id":"MDQ6VXNlcjMwMzkyNg==","avatar_url":"https://avatars3.githubusercontent.com/u/303926?v=4","gravatar_id":"","url":"https://api.github.com/users/HarryR","html_url":"https://github.com/HarryR","followers_url":"https://api.github.com/users/HarryR/followers","following_url":"https://api.github.com/users/HarryR/following{/other_user}","gists_url":"https://api.github.com/users/HarryR/gists{/gist_id}","starred_url":"https://api.github.com/users/HarryR/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HarryR/subscriptions","organizations_url":"https://api.github.com/users/HarryR/orgs","repos_url":"https://api.github.com/users/HarryR/repos","events_url":"https://api.github.com/users/HarryR/events{/privacy}","received_events_url":"https://api.github.com/users/HarryR/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-07-10T22:09:53Z","updated_at":"2018-07-10T22:09:53Z","closed_at":null,"author_association":"NONE","body":"It would be good to be able to perform an anonymous transfer between two recipients without the ether leaving the contract. As per discussion on https://github.com/AntoineRondelet/snark-mixer/issues/2\r\n\r\nThis can be achieved by introducing a `WithdrawThenDeposit` function which does the `Withdraw` then `Deposit` logic without the ether leaving the contract. e.g. spend 1 coin, then create another coin with a new owner, with the same value.\r\n\r\nHowever, there are problems: the `address` that ether is sent to is specified as part of the nullifier, in addition to the `salt`. If the long-term address of the coin owners is included as part of the nullifier then any coin they own will be revealed, this will link their account to the on-chain actions even if the transactions are submitted by a third party.\r\n\r\nOne way to get around this is to construct the nullifier using `ecrecover`, the person submits the `(v,r,s)` components of the ECDSA signature of all the functions parameters, then the recovered address is combined with the `salt` to create the `nullifier`.\r\n\r\nSource code refs:\r\n\r\n * https://github.com/barryWhiteHat/miximus/blob/7ef365fb818492a2e6c4ec06956f70baf20cf76b/contracts/Verifier.sol#L111\r\n * https://github.com/barryWhiteHat/miximus/blob/7ef365fb818492a2e6c4ec06956f70baf20cf76b/contracts/Miximus.sol#L32\r\n\r\nSo, the contract functions can be expanded as the recipient no longer needs to be specified in the `nullifier` - and we can now rely on a signature of the one-time-key for the nullifier to prove ownership of the coin.\r\n\r\n * Deposit\r\n * WithdrawToSender (sends to `msg.sender`)\r\n * WithdrawToAddress (sends to address specified in parameter)\r\n * Transfer (internal Withdraw then re-Deposit)\r\n"}}
{"actor":{"display_login":"HarryR"}}