ZmnSCPxj [ARCHIVE] on Nostr: š
Original date posted:2021-09-10 š Original message:Good morning Filippo, > ...
š
Original date posted:2021-09-10
š Original message:Good morning Filippo,
> Hi!
>
> From the proposal it is not clear why a miner must reference other miners' shares in his shares.
> What I mean is that there is a huge incentive for a rogue miner to not reference any share from
> other miner so he won't share the reward with anyone, but it will be paid for the share that he
> create because good miners will reference his shares.
> The pool will probably become unprofitable for good miners.
>
> Another thing that I do not understand is how to resolve conflicts. For example, using figure 1 at
> page 1, a node could be receive this 2 valid states:
>
> 1. L -> a1 -> a2 -> a3 -> R
> 2. L -> a1* -> a2* -> R
>
> To resolve the above fork the only two method that comes to my mind are:
>
> 1. use the one that has more work
> 2. use the longest one
> Btw both methods present an issue IMHO.
>
> If the longest chain is used:
> When a block (L) is find, a miner (a) could easily create a lot of share with low difficulty
> (L -> a1* -> a2* -> ... -> an*), then start to mine shares with his real hashrate (L -> a1 -> a2)
> and publish them so they get referenced. If someone else finds a block he gets the reward cause he
> has been referenced. If he finds the block he just attaches the funded block to the longest chain
> (that reference no one) and publishes it without sharing the reward
> (L -> a1* -> a2* -> ... -> an* -> R).
>
> If is used the one with more work:
> A miner that has published the shares (L -> a1 -> a2 -> a3) when find a block R that alone has more
> work than a1 + a2 + a3 it just publish (L -> R) and he do not share the reward with anyone.
My understanding from the "Braid" in braidpool is that every share can reference more than one previous share.
In your proposed attack, a single hasher refers only to shares that the hasher itself makes.
However, a good hasher will refer not only to its own shares, but also to shares of the "bad" hasher.
And all honest hashers will be based, not on a single chain, but on the share that refers to the most total work.
So consider these shares from a bad hasher:
BAD1 <- BAD2 <- BAD3
A good hasher will refer to those, and also to its own shares:
BAD1 <- BAD2 <- BAD3
^ ^ ^
| | |
| | +------+
| +-----+ |
| | |
+--- GOOD1 <- GOOD2 <- GOOD3
`GOOD3` refers to 5 other shares, whereas `BAD3` refers to only 2 shares, so `GOOD3` will be considered weightier, thus removing this avenue of attack and resolving the issue.
Even if measured in terms of total work, `GOOD3` also contains the work that `BAD3` does, so it would still win.
Regards,
ZmnSCPxj
Published at
2023-06-07 22:58:31Event JSON
{
"id": "57598f3fc530308dda6169af247dd433049f3b32cc6bca5fcb07baa336b2ae66",
"pubkey": "4505072744a9d3e490af9262bfe38e6ee5338a77177b565b6b37730b63a7b861",
"created_at": 1686178711,
"kind": 1,
"tags": [
[
"e",
"cf6e3f45507ab6c2dd6465b985d885dd65b758d1cbeaa2f701fd88fb43bf7aa3",
"",
"root"
],
[
"e",
"2d65b335a37a033ab00985ce1061707c77bdb1d5eca6e1e593246b61ee3baf68",
"",
"reply"
],
[
"p",
"3221fad3c7c1235440e545456cb5a0581af4b1a9a1b07edabe1441e373aa3548"
]
],
"content": "š
Original date posted:2021-09-10\nš Original message:Good morning Filippo,\n\n\u003e Hi!\n\u003e\n\u003e From the proposal it is not clear why a miner must reference other miners' shares in his shares.\n\u003e What I mean is that there is a huge incentive for a rogue miner to not reference any share from\n\u003e other miner so he won't share the reward with anyone, but it will be paid for the share that he\n\u003e create because good miners will reference his shares.\n\u003e The pool will probably become unprofitable for good miners.\n\u003e\n\u003e Another thing that I do not understand is how to resolve conflicts. For example, using figure 1 at\n\u003e page 1, a node could be receive this 2 valid states:\n\u003e\n\u003e 1. L -\u003e a1 -\u003e a2 -\u003e a3 -\u003e R\n\u003e 2. L -\u003e a1* -\u003e a2* -\u003e R\n\u003e\n\u003e To resolve the above fork the only two method that comes to my mind are:\n\u003e\n\u003e 1. use the one that has more work\n\u003e 2. use the longest one\n\u003e Btw both methods present an issue IMHO.\n\u003e\n\u003e If the longest chain is used:\n\u003e When a block (L) is find, a miner (a) could easily create a lot of share with low difficulty\n\u003e (L -\u003e a1* -\u003e a2* -\u003e ... -\u003e an*), then start to mine shares with his real hashrate (L -\u003e a1 -\u003e a2)\n\u003e and publish them so they get referenced. If someone else finds a block he gets the reward cause he\n\u003e has been referenced. If he finds the block he just attaches the funded block to the longest chain\n\u003e (that reference no one) and publishes it without sharing the reward\n\u003e (L -\u003e a1* -\u003e a2* -\u003e ... -\u003e an* -\u003e R).\n\u003e\n\u003e If is used the one with more work:\n\u003e A miner that has published the shares (L -\u003e a1 -\u003e a2 -\u003e a3) when find a block R that alone has more\n\u003e work than a1 + a2 + a3 it just publish (L -\u003e R) and he do not share the reward with anyone.\n\n\nMy understanding from the \"Braid\" in braidpool is that every share can reference more than one previous share.\n\nIn your proposed attack, a single hasher refers only to shares that the hasher itself makes.\n\nHowever, a good hasher will refer not only to its own shares, but also to shares of the \"bad\" hasher.\n\nAnd all honest hashers will be based, not on a single chain, but on the share that refers to the most total work.\n\nSo consider these shares from a bad hasher:\n\n BAD1 \u003c- BAD2 \u003c- BAD3\n\nA good hasher will refer to those, and also to its own shares:\n\n BAD1 \u003c- BAD2 \u003c- BAD3\n ^ ^ ^\n | | |\n | | +------+\n | +-----+ |\n | | |\n +--- GOOD1 \u003c- GOOD2 \u003c- GOOD3\n\n`GOOD3` refers to 5 other shares, whereas `BAD3` refers to only 2 shares, so `GOOD3` will be considered weightier, thus removing this avenue of attack and resolving the issue.\nEven if measured in terms of total work, `GOOD3` also contains the work that `BAD3` does, so it would still win.\n\nRegards,\nZmnSCPxj",
"sig": "8a050ffdedbf311539c3e97d15776c34cc84c8bc95fd22c2b74d3f6371b6fe8a6cb30c3b9ced096e2222654963bc714c7f8bc61a0bfefc7b1a65aafcbc4ca2ea"
}