Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow RBF in Transaction Builder #1543

Closed
NicolasDorier opened this issue Jun 6, 2019 · 24 comments · Fixed by #5099
Closed

Allow RBF in Transaction Builder #1543

NicolasDorier opened this issue Jun 6, 2019 · 24 comments · Fixed by #5099

Comments

@NicolasDorier
Copy link
Contributor

Less extreme version of #1540

I did a Over The Coffee (OTC) trade recently. I wanted to make 2 transaction:

  • One transaction with low fee that I broadcast before the coffee
  • Same transaction RBFing the first one in case the transaction is not confirmed after the coffee.

Because Wasabi make a non RBFable transaction on the transaction builder, I could not achieve this.

@lontivero
Copy link
Collaborator

First some numbers. Analyzing the latest 200 blocks we can see that only the 5.8% of the transactions were replaceable.

In 200 blocks, with a total of 4,631,98 transactions there were 27,305 replaceable transactions (RBF). This gives us a rbf tx rate 0.0589

RBF per block (200)
Blocks: 001.  Total Txs: 002749  RBF Txs: 00234  Rate: 0.0851218624954529  
Blocks: 002.  Total Txs: 006028  RBF Txs: 00405  Rate: 0.0671864631718646  
Blocks: 003.  Total Txs: 009035  RBF Txs: 00606  Rate: 0.0670724958494743  
Blocks: 004.  Total Txs: 011291  RBF Txs: 00769  Rate: 0.0681073421309007  
Blocks: 005.  Total Txs: 012850  RBF Txs: 00874  Rate: 0.0680155642023346  
Blocks: 006.  Total Txs: 014796  RBF Txs: 00993  Rate: 0.0671127331711273  
Blocks: 007.  Total Txs: 017004  RBF Txs: 01166  Rate: 0.0685721006821924  
Blocks: 008.  Total Txs: 019340  RBF Txs: 01262  Rate: 0.065253360910031  
Blocks: 009.  Total Txs: 020836  RBF Txs: 01340  Rate: 0.064311768093684  
Blocks: 010.  Total Txs: 021594  RBF Txs: 01365  Rate: 0.0632120033342595  
Blocks: 011.  Total Txs: 022336  RBF Txs: 01392  Rate: 0.0623209169054441  
Blocks: 012.  Total Txs: 025160  RBF Txs: 01640  Rate: 0.0651828298887122  
Blocks: 013.  Total Txs: 027434  RBF Txs: 01750  Rate: 0.0637894583363709  
Blocks: 014.  Total Txs: 029393  RBF Txs: 01860  Rate: 0.0632803728778961  
Blocks: 015.  Total Txs: 031320  RBF Txs: 02002  Rate: 0.0639208173690932  
Blocks: 016.  Total Txs: 033539  RBF Txs: 02137  Rate: 0.0637168669310355  
Blocks: 017.  Total Txs: 035623  RBF Txs: 02286  Rate: 0.0641720236925582  
Blocks: 018.  Total Txs: 037160  RBF Txs: 02366  Rate: 0.0636706135629709  
Blocks: 019.  Total Txs: 039568  RBF Txs: 02456  Rate: 0.0620703598867772  
Blocks: 020.  Total Txs: 041241  RBF Txs: 02527  Rate: 0.0612739749278631  
Blocks: 021.  Total Txs: 043939  RBF Txs: 02649  Rate: 0.0602881267211361  
Blocks: 022.  Total Txs: 046599  RBF Txs: 02746  Rate: 0.0589283031824717  
Blocks: 023.  Total Txs: 049204  RBF Txs: 02972  Rate: 0.060401593366393  
Blocks: 024.  Total Txs: 051085  RBF Txs: 03054  Rate: 0.0597827150827053  
Blocks: 025.  Total Txs: 053868  RBF Txs: 03157  Rate: 0.058606222618252  
Blocks: 026.  Total Txs: 056564  RBF Txs: 03377  Rate: 0.0597022841383212  
Blocks: 027.  Total Txs: 059350  RBF Txs: 03563  Rate: 0.060033698399326  
Blocks: 028.  Total Txs: 062568  RBF Txs: 03770  Rate: 0.0602544431658356  
Blocks: 029.  Total Txs: 065149  RBF Txs: 04009  Rate: 0.0615358639426545  
Blocks: 030.  Total Txs: 068532  RBF Txs: 04186  Rate: 0.0610809548823907  
Blocks: 031.  Total Txs: 070878  RBF Txs: 04322  Rate: 0.0609780185671153  
Blocks: 032.  Total Txs: 073594  RBF Txs: 04542  Rate: 0.0617169877979183  
Blocks: 033.  Total Txs: 076552  RBF Txs: 04730  Rate: 0.0617880656285923  
Blocks: 034.  Total Txs: 078590  RBF Txs: 04920  Rate: 0.0626033846545362  
Blocks: 035.  Total Txs: 081039  RBF Txs: 05147  Rate: 0.0635126297214921  
Blocks: 036.  Total Txs: 083939  RBF Txs: 05383  Rate: 0.0641299038587546  
Blocks: 037.  Total Txs: 086953  RBF Txs: 05614  Rate: 0.0645636148264005  
Blocks: 038.  Total Txs: 089869  RBF Txs: 05883  Rate: 0.0654619501719169  
Blocks: 039.  Total Txs: 092467  RBF Txs: 05978  Rate: 0.0646500913839532  
Blocks: 040.  Total Txs: 094653  RBF Txs: 06123  Rate: 0.0646889163576432  
Blocks: 041.  Total Txs: 097331  RBF Txs: 06313  Rate: 0.0648611439315326  
Blocks: 042.  Total Txs: 099664  RBF Txs: 06464  Rate: 0.0648579226200032  
Blocks: 043.  Total Txs: 101935  RBF Txs: 06559  Rate: 0.0643449256879384  
Blocks: 044.  Total Txs: 104229  RBF Txs: 06770  Rate: 0.0649531320457838  
Blocks: 045.  Total Txs: 106819  RBF Txs: 06948  Rate: 0.0650446081689587  
Blocks: 046.  Total Txs: 109550  RBF Txs: 07034  Rate: 0.0642081241442264  
Blocks: 047.  Total Txs: 112619  RBF Txs: 07246  Rate: 0.064340830588089  
Blocks: 048.  Total Txs: 115805  RBF Txs: 07518  Rate: 0.0649194767065325  
Blocks: 049.  Total Txs: 118890  RBF Txs: 07666  Rate: 0.0644797712170914  
Blocks: 050.  Total Txs: 118898  RBF Txs: 07666  Rate: 0.0644754327238473  
Blocks: 051.  Total Txs: 121366  RBF Txs: 07716  Rate: 0.063576289899972  
Blocks: 052.  Total Txs: 124319  RBF Txs: 07827  Rate: 0.062959000635462  
Blocks: 053.  Total Txs: 125748  RBF Txs: 07854  Rate: 0.0624582498329993  
Blocks: 054.  Total Txs: 128409  RBF Txs: 07940  Rate: 0.0618336720946351  
Blocks: 055.  Total Txs: 131276  RBF Txs: 08078  Rate: 0.0615344769797983  
Blocks: 056.  Total Txs: 133358  RBF Txs: 08144  Rate: 0.0610687022900763  
Blocks: 057.  Total Txs: 135197  RBF Txs: 08193  Rate: 0.0606004571107347  
Blocks: 058.  Total Txs: 137873  RBF Txs: 08323  Rate: 0.0603671494781429  
Blocks: 059.  Total Txs: 139085  RBF Txs: 08386  Rate: 0.0602940647805299  
Blocks: 060.  Total Txs: 141492  RBF Txs: 08471  Rate: 0.0598691092075877  
Blocks: 061.  Total Txs: 141543  RBF Txs: 08471  Rate: 0.0598475374974389  
Blocks: 062.  Total Txs: 142444  RBF Txs: 08511  Rate: 0.0597497964112213  
Blocks: 063.  Total Txs: 144446  RBF Txs: 08563  Rate: 0.0592816692743309  
Blocks: 064.  Total Txs: 146738  RBF Txs: 08632  Rate: 0.0588259346590522  
Blocks: 065.  Total Txs: 149372  RBF Txs: 08721  Rate: 0.0583844361727767  
Blocks: 066.  Total Txs: 152110  RBF Txs: 08840  Rate: 0.0581158372230623  
Blocks: 067.  Total Txs: 154067  RBF Txs: 08892  Rate: 0.0577151499023152  
Blocks: 068.  Total Txs: 156305  RBF Txs: 08976  Rate: 0.0574261859825341  
Blocks: 069.  Total Txs: 158526  RBF Txs: 09059  Rate: 0.0571452001564412  
Blocks: 070.  Total Txs: 161029  RBF Txs: 09143  Rate: 0.0567785926758534  
Blocks: 071.  Total Txs: 162884  RBF Txs: 09216  Rate: 0.0565801429237985  
Blocks: 072.  Total Txs: 165233  RBF Txs: 09311  Rate: 0.0563507289706051  
Blocks: 073.  Total Txs: 166844  RBF Txs: 09366  Rate: 0.0561362710076479  
Blocks: 074.  Total Txs: 168465  RBF Txs: 09452  Rate: 0.0561066096815362  
Blocks: 075.  Total Txs: 169854  RBF Txs: 09504  Rate: 0.0559539369105232  
Blocks: 076.  Total Txs: 172089  RBF Txs: 09632  Rate: 0.05597103824184  
Blocks: 077.  Total Txs: 174646  RBF Txs: 09717  Rate: 0.0556382625425146  
Blocks: 078.  Total Txs: 177160  RBF Txs: 09851  Rate: 0.0556051027319937  
Blocks: 079.  Total Txs: 179580  RBF Txs: 09883  Rate: 0.0550339681479007  
Blocks: 080.  Total Txs: 181702  RBF Txs: 09969  Rate: 0.0548645584528514  
Blocks: 081.  Total Txs: 183813  RBF Txs: 10073  Rate: 0.0548002589588332  
Blocks: 082.  Total Txs: 185378  RBF Txs: 10187  Rate: 0.054952583370195  
Blocks: 083.  Total Txs: 187140  RBF Txs: 10259  Rate: 0.0548199209148231  
Blocks: 084.  Total Txs: 188433  RBF Txs: 10322  Rate: 0.0547780908864159  
Blocks: 085.  Total Txs: 189991  RBF Txs: 10334  Rate: 0.0543920501497439  
Blocks: 086.  Total Txs: 192670  RBF Txs: 10443  Rate: 0.054201484403384  
Blocks: 087.  Total Txs: 193842  RBF Txs: 10506  Rate: 0.0541987804500573  
Blocks: 088.  Total Txs: 195571  RBF Txs: 10556  Rate: 0.0539752826339283  
Blocks: 089.  Total Txs: 198218  RBF Txs: 10613  Rate: 0.0535420597523938  
Blocks: 090.  Total Txs: 198848  RBF Txs: 10642  Rate: 0.0535182652075957  
Blocks: 091.  Total Txs: 199850  RBF Txs: 10676  Rate: 0.0534200650487866  
Blocks: 092.  Total Txs: 202306  RBF Txs: 10786  Rate: 0.0533152748806264  
Blocks: 093.  Total Txs: 205504  RBF Txs: 10934  Rate: 0.0532057770165058  
Blocks: 094.  Total Txs: 207975  RBF Txs: 11090  Rate: 0.0533237167928838  
Blocks: 095.  Total Txs: 211259  RBF Txs: 11252  Rate: 0.0532616361906475  
Blocks: 096.  Total Txs: 213800  RBF Txs: 11293  Rate: 0.0528203928905519  
Blocks: 097.  Total Txs: 215903  RBF Txs: 11396  Rate: 0.0527829627193693  
Blocks: 098.  Total Txs: 218933  RBF Txs: 11610  Rate: 0.0530299223963496  
Blocks: 099.  Total Txs: 221472  RBF Txs: 11754  Rate: 0.0530721716514954  
Blocks: 100.  Total Txs: 224719  RBF Txs: 11964  Rate: 0.0532398239579208  
Blocks: 101.  Total Txs: 224860  RBF Txs: 11992  Rate: 0.0533309614871476  
Blocks: 102.  Total Txs: 227716  RBF Txs: 12031  Rate: 0.0528333538266964  
Blocks: 103.  Total Txs: 230938  RBF Txs: 12221  Rate: 0.052918965263404  
Blocks: 104.  Total Txs: 234201  RBF Txs: 12445  Rate: 0.0531381164042852  
Blocks: 105.  Total Txs: 236769  RBF Txs: 12523  Rate: 0.0528912146438089  
Blocks: 106.  Total Txs: 239773  RBF Txs: 12796  Rate: 0.0533671430895055  
Blocks: 107.  Total Txs: 242513  RBF Txs: 13016  Rate: 0.0536713495771361  
Blocks: 108.  Total Txs: 244821  RBF Txs: 13110  Rate: 0.0535493278762851  
Blocks: 109.  Total Txs: 247382  RBF Txs: 13231  Rate: 0.0534840853416983  
Blocks: 110.  Total Txs: 249871  RBF Txs: 13380  Rate: 0.0535476305773779  
Blocks: 111.  Total Txs: 253306  RBF Txs: 13723  Rate: 0.0541755821022795  
Blocks: 112.  Total Txs: 253307  RBF Txs: 13723  Rate: 0.0541753682290659  
Blocks: 113.  Total Txs: 256405  RBF Txs: 14036  Rate: 0.0547415222012051  
Blocks: 114.  Total Txs: 257889  RBF Txs: 14138  Rate: 0.0548220358371237  
Blocks: 115.  Total Txs: 259121  RBF Txs: 14227  Rate: 0.0549048514014688  
Blocks: 116.  Total Txs: 261819  RBF Txs: 14434  Rate: 0.0551296888308335  
Blocks: 117.  Total Txs: 264356  RBF Txs: 14547  Rate: 0.0550280682110487  
Blocks: 118.  Total Txs: 267482  RBF Txs: 14880  Rate: 0.0556299115454498  
Blocks: 119.  Total Txs: 267659  RBF Txs: 14970  Rate: 0.0559293728213884  
Blocks: 120.  Total Txs: 269834  RBF Txs: 15095  Rate: 0.0559418012555868  
Blocks: 121.  Total Txs: 272383  RBF Txs: 15217  Rate: 0.0558661884185136  
Blocks: 122.  Total Txs: 275172  RBF Txs: 15447  Rate: 0.0561357987004492  
Blocks: 123.  Total Txs: 278435  RBF Txs: 15790  Rate: 0.0567098245551026  
Blocks: 124.  Total Txs: 281119  RBF Txs: 15937  Rate: 0.0566912944340297  
Blocks: 125.  Total Txs: 284318  RBF Txs: 16216  Rate: 0.057034728719251  
Blocks: 126.  Total Txs: 287223  RBF Txs: 16485  Rate: 0.0573944287191485  
Blocks: 127.  Total Txs: 288942  RBF Txs: 16658  Rate: 0.0576517086474102  
Blocks: 128.  Total Txs: 290659  RBF Txs: 16725  Rate: 0.0575416553418267  
Blocks: 129.  Total Txs: 293578  RBF Txs: 16840  Rate: 0.0573612464149221  
Blocks: 130.  Total Txs: 296640  RBF Txs: 17116  Rate: 0.0576995685005394  
Blocks: 131.  Total Txs: 299048  RBF Txs: 17277  Rate: 0.0577733340467082  
Blocks: 132.  Total Txs: 301392  RBF Txs: 17414  Rate: 0.0577785740829219  
Blocks: 133.  Total Txs: 303647  RBF Txs: 17592  Rate: 0.0579356950669692  
Blocks: 134.  Total Txs: 306408  RBF Txs: 17799  Rate: 0.0580892143808256  
Blocks: 135.  Total Txs: 309138  RBF Txs: 18038  Rate: 0.0583493455996998  
Blocks: 136.  Total Txs: 312176  RBF Txs: 18300  Rate: 0.0586207780226539  
Blocks: 137.  Total Txs: 314771  RBF Txs: 18472  Rate: 0.0586839321284362  
Blocks: 138.  Total Txs: 316960  RBF Txs: 18507  Rate: 0.0583890711761737  
Blocks: 139.  Total Txs: 319202  RBF Txs: 18587  Rate: 0.0582295850276627  
Blocks: 140.  Total Txs: 322182  RBF Txs: 18829  Rate: 0.0584421227753257  
Blocks: 141.  Total Txs: 325309  RBF Txs: 19065  Rate: 0.0586058178531796  
Blocks: 142.  Total Txs: 328132  RBF Txs: 19252  Rate: 0.0586715102458767  
Blocks: 143.  Total Txs: 330723  RBF Txs: 19453  Rate: 0.0588196164161549  
Blocks: 144.  Total Txs: 332652  RBF Txs: 19541  Rate: 0.0587430708367904  
Blocks: 145.  Total Txs: 334750  RBF Txs: 19605  Rate: 0.0585660941000747  
Blocks: 146.  Total Txs: 336074  RBF Txs: 19657  Rate: 0.0584900944434857  
Blocks: 147.  Total Txs: 338205  RBF Txs: 19766  Rate: 0.0584438432311764  
Blocks: 148.  Total Txs: 341179  RBF Txs: 19968  Rate: 0.058526462648639  
Blocks: 149.  Total Txs: 343442  RBF Txs: 20054  Rate: 0.0583912276308663  
Blocks: 150.  Total Txs: 346230  RBF Txs: 20220  Rate: 0.0584004852265835  
Blocks: 151.  Total Txs: 348947  RBF Txs: 20470  Rate: 0.0586622037157505  
Blocks: 152.  Total Txs: 350870  RBF Txs: 20611  Rate: 0.0587425542223616  
Blocks: 153.  Total Txs: 352895  RBF Txs: 20751  Rate: 0.058802193286955  
Blocks: 154.  Total Txs: 354585  RBF Txs: 20864  Rate: 0.0588406164953396  
Blocks: 155.  Total Txs: 356884  RBF Txs: 20901  Rate: 0.058565248091817  
Blocks: 156.  Total Txs: 358603  RBF Txs: 20954  Rate: 0.0584323053627549  
Blocks: 157.  Total Txs: 361640  RBF Txs: 21222  Rate: 0.0586826678464772  
Blocks: 158.  Total Txs: 362742  RBF Txs: 21264  Rate: 0.0586201763236681  
Blocks: 159.  Total Txs: 365585  RBF Txs: 21390  Rate: 0.0585089650833595  
Blocks: 160.  Total Txs: 368570  RBF Txs: 21495  Rate: 0.0583199934883469  
Blocks: 161.  Total Txs: 371335  RBF Txs: 21757  Rate: 0.0585912989618539  
Blocks: 162.  Total Txs: 374441  RBF Txs: 21862  Rate: 0.0583857002838899  
Blocks: 163.  Total Txs: 376232  RBF Txs: 21990  Rate: 0.0584479789066321  
Blocks: 164.  Total Txs: 378896  RBF Txs: 22116  Rate: 0.0583695789873738  
Blocks: 165.  Total Txs: 381143  RBF Txs: 22335  Rate: 0.0586000529984809  
Blocks: 166.  Total Txs: 383906  RBF Txs: 22528  Rate: 0.0586810312941189  
Blocks: 167.  Total Txs: 387042  RBF Txs: 22734  Rate: 0.0587378114003131  
Blocks: 168.  Total Txs: 389521  RBF Txs: 22938  Rate: 0.0588877108037821  
Blocks: 169.  Total Txs: 391890  RBF Txs: 23148  Rate: 0.0590675954987369  
Blocks: 170.  Total Txs: 393314  RBF Txs: 23196  Rate: 0.0589757801654658  
Blocks: 171.  Total Txs: 395382  RBF Txs: 23334  Rate: 0.0590163436878765  
Blocks: 172.  Total Txs: 397013  RBF Txs: 23412  Rate: 0.0589703611720523  
Blocks: 173.  Total Txs: 399486  RBF Txs: 23559  Rate: 0.0589732806656554  
Blocks: 174.  Total Txs: 401476  RBF Txs: 23664  Rate: 0.0589425021670038  
Blocks: 175.  Total Txs: 404052  RBF Txs: 23852  Rate: 0.0590320057814341  
Blocks: 176.  Total Txs: 405267  RBF Txs: 24036  Rate: 0.0593090481090244  
Blocks: 177.  Total Txs: 407399  RBF Txs: 24147  Rate: 0.059271132231547  
Blocks: 178.  Total Txs: 409393  RBF Txs: 24215  Rate: 0.0591485443082808  
Blocks: 179.  Total Txs: 412291  RBF Txs: 24388  Rate: 0.0591523947891174  
Blocks: 180.  Total Txs: 415156  RBF Txs: 24483  Rate: 0.0589730125543169  
Blocks: 181.  Total Txs: 417467  RBF Txs: 24553  Rate: 0.0588142296277311  
Blocks: 182.  Total Txs: 420271  RBF Txs: 24662  Rate: 0.0586811842834742  
Blocks: 183.  Total Txs: 422923  RBF Txs: 24808  Rate: 0.0586584319131379  
Blocks: 184.  Total Txs: 426339  RBF Txs: 24957  Rate: 0.0585379240463575  
Blocks: 185.  Total Txs: 429112  RBF Txs: 25141  Rate: 0.0585884337888477  
Blocks: 186.  Total Txs: 431424  RBF Txs: 25314  Rate: 0.0586754561637739  
Blocks: 187.  Total Txs: 432027  RBF Txs: 25352  Rate: 0.0586815175903358  
Blocks: 188.  Total Txs: 433467  RBF Txs: 25402  Rate: 0.0586019235605017  
Blocks: 189.  Total Txs: 436784  RBF Txs: 25700  Rate: 0.0588391516172754  
Blocks: 190.  Total Txs: 439332  RBF Txs: 25866  Rate: 0.0588757477260933  
Blocks: 191.  Total Txs: 441444  RBF Txs: 25982  Rate: 0.0588568425440146  
Blocks: 192.  Total Txs: 443322  RBF Txs: 26124  Rate: 0.058927822215004  
Blocks: 193.  Total Txs: 445820  RBF Txs: 26230  Rate: 0.0588354044233099  
Blocks: 194.  Total Txs: 448204  RBF Txs: 26288  Rate: 0.0586518638834102  
Blocks: 195.  Total Txs: 450848  RBF Txs: 26527  Rate: 0.0588380119241962  
Blocks: 196.  Total Txs: 453583  RBF Txs: 26702  Rate: 0.0588690493250408  
Blocks: 197.  Total Txs: 455996  RBF Txs: 26801  Rate: 0.0587746383740208  
Blocks: 198.  Total Txs: 458363  RBF Txs: 26948  Rate: 0.0587918309287617  
Blocks: 199.  Total Txs: 460928  RBF Txs: 27070  Rate: 0.0587293460149958  
Blocks: 200.  Total Txs: 463198  RBF Txs: 27305  Rate: 0.0589488728362385

Wallets that always build replaceable transactions by default are leaking some privacy because they have that fingerprint. This is because the rbf transactions are just a tiny fraction of the total number of transactions. Clearly that is something that is going to change until the point that one day not using rbf could become a privacy leak.

It could worth to analyze whether allowing the users to opt for rbf (turned off by default) impacts in the users privacy or not. Also, I think we need to have in mind that Wasabi transactions would be RBF transactions that only spend outputs with witness program v0 (it has to be < 0.058 by sure)

IMO, given there are wallets that allow us to do rbf and spend segwit outputs (bitcoin core, electrum, samourai, greenaddress?) I think that allowing the users to opt rbf will not be a big problem in the short term but currently I am not so sure, probably is okay.

@NicolasDorier
Copy link
Contributor Author

NicolasDorier commented Jun 7, 2019

I am not saying to put it default, but as optional in the transaction builder. I also use wasabi as a normal wallet.

@benthecarman
Copy link
Contributor

benthecarman commented Jun 27, 2019

I've been working on this and unsure on how to do the UX. I was thinking of adding a right-click option on a replaceable transactions in the history tab, but I am open to other ideas.

@nopara73
Copy link
Contributor

nopara73 commented Jun 27, 2019

I would discourage you to work on this. RBF is full of UX and privacy issues. It'll make our wallet state issues worse and don't even work as expected, since some pools, like Antpool intentionally don't mine RBF at all.

@dmp1ce
Copy link

dmp1ce commented Jul 1, 2019

I cannot speak to the UX issues but perhaps a warning explaining the privacy issues with RBF would be good. I use RBF all the time on Electrum. I wasn't aware of privacy issues.

@FrancisPouliot
Copy link
Contributor

@nopara73 @lontivero I agree with @NicolasDorier it is important to have RBF in wasabi. This is the #1 feature my operators are telling me is missing from Wasabi vs Electrum. Since coinjoin adds time to the OTC trade process, it would help to have RBF to compensate.

I don't personally see how/why RBF reduces privacy. The wasabi coinjoins already has its own fingerprint so someone snooping already knows a person is using wasabi wallet when spending out.

Trust me, some people do bump the fees to RBF transactions manually. I'd say on average we used to bump at least 1-2 transactions daily

@nopara73
Copy link
Contributor

nopara73 commented Jul 3, 2019

Privacy Issues:

  • Post-mix wallet fingerprinting by just setting RBF. This enables observers to have a better guess on the change.
  • Wallet fingerprinting by using RBF. If you bump the fee you may tell exactly which wallet the user uses or not using by just looking at how much you're bumping the fee.
  • If you use RBF the observer can tell exactly which was the change output by just taking a look at which output contributed to the fees.
  • The design of most possible implementations would gravitate to people to either always use RBF or never, this would make the RBF users deanonymized, because their wallet settings are different from other people's.

Social/Practical Issues

  • Some pools, like Antpool intentionally doesn't mine RBF transactions, so RBF doesn't even work as intended.
  • Many (if not most?) software gets confused by RBF transactions if used, resulting in awkward "what the hell is going on user experiences?"
  • Even Wasabi was confused by RBF transacitons for a very long time. But I wouldn't be surprised if implementing RBF would highlight hidden bugs those we are not aware of.

UX Issues

  • A user should not know what RBF is.

That being said I am not completely against implementing RBF, but it won't be a one nighter work.

@dmp1ce
Copy link

dmp1ce commented Jul 3, 2019

@FrancisPouliot That must be annoying to RBF manually. How do you do that? Broadcast raw transactions on Wasabi?

I resorted to child pays for parent the other day when fees were high. I'm not sure it worked very well since I couldn't get the fees very high on Wasabi.

@benthecarman
Copy link
Contributor

I started working on this a bit ago, but abandoned it due to it being out of what I was confident working on. If someone wants to work on this, feel free to take my code: benthecarman@247a090

@FrancisPouliot
Copy link
Contributor

@dmp1ce we don't do it with wasabi, which is a problem. We could import a seed into electrum but afaik they don't allow bech32 derivation when importing a private master key

@MaxHillebrand
Copy link
Contributor

I agree with @nopara73, there are several privacy issues with RBF.
Yet I also agree with @FrancisPouliot that this is a very important feature for many users, and one that I'm personally missing.

I say more power to the user, allow RBF in the advanced setting while explaining that it decreases privacy.

@knocte
Copy link

knocte commented Jul 4, 2019

UX issues
A user should not know what RBF is.

Also I think fixing this issue above is simple: simply don't use the term RBF, or even ReplaceByFee, just explain in simple words, something like: [x] allow increasing the fee for stuck unconfirmed transactions and when clicking on it, an informative dialog can appear with a paragraph explaining why enabling this can have certain privacy issues.

@harding
Copy link

harding commented Aug 21, 2019

Only 5.8% of transactions [signaled replacablity]. Wallets that always build replaceable transactions by default are leaking some privacy

This is obviously a very important point for privacy-focused software like Wasabi. However, consider what would happen if every transaction signaled support for opt-in RBF. In that case, we could switch to full-RBF (every transaction is replaceable by default) without affecting the system, making it an uncontroversial change. If full RBF is adopted, then opt-in signaling is no longer needed and this source of transaction differentiation goes away.

Obviously 100% of transactions signaling BIP125 is extremely improbable, but there's probably a reasonable threshold of BIP125 signaling where it's clear the community is ready for full-RBF.
For that reason, if no other, I encourage wallet developers who think RBF is a good idea to implement BIP125 signaling even if they don't implement any fee bumping options. Related to the original point, even if Wasabi doesn't implement any fee bumping features, it could perhaps still improve its ability to blend in by signaling RBF randomly 5.8% of the time (or whatever the current percentage is).

Wallet fingerprinting by using RBF. If you bump the fee you may tell exactly which wallet the user uses or not using by just looking at how much you're bumping the fee.

If you use RBF the observer can tell exactly which was the change output by just taking a look at which output contributed to the fees.

I think this is an option you'd want to present to the user, as sometimes they may prefer faster confirmation (bump fee) and sometimes they may prefer privacy (don't bump fee). E.g., to fee bump in Bitcoin Core GUI right now, a dialog is popped up that tells the user the current fee and the proposed new fee, with the replacement only being sent if the user clicks "Ok". Wasabi could do something similar but also add a line "Warning: fee bumping reduces your privacy." You might even be able to track bumped change outputs differently in Wasabi's coin control so users know that output was extra strongly associated with its wallet software and previous transaction.

Some pools, like Antpool intentionally doesn't mine RBF transactions,
so RBF doesn't even work as intended.

Although I do believe Antpool initially didn't allow replacements, I think this is now outdated information. Because of BIP152 compact block propagation (and related technologies like FIBRE), there's poorer-than-average propagation (and thus higher orphan rates) for blocks with many transactions that aren't found in most node mempools (e.g. transactions that were RBF replaced). Thus not allowing replacements costs the pool money both in lost fees and higher orphan rates.

It was for that reason and others that Bitcoin Core recently removed its -mempoolreplacement option that made it easy for nodes to disable accepting replacements. (Of course, someone who still wants the option could patch their code.)

However, this should be easily testable given enough time. I just setup my node to begin recording data and will reply when I have results.

@nopara73
Copy link
Contributor

@harding Since you took the time to write this comprehensive reply, let me revisit the first part of this issue with some more structured deductive reasoning and wishful thinking. By first part, I mean, if we should signal RBF or not.

When to signal RBF? Never, always or let the user decide?

Firstly, an insight can be gained by recognizing that Wasabi cannot have opt-in RBF at all, because that would fragment the userbase and whichever side would end up being the minority, the always signalling or the never signalling users, is deemed to be deanonymized. So, regarding the question: "Should Wasabi be signalling RBF or not?" The only viable answers are "always" or "never", "let the user have a choice" is a serious privacy leak.

To signal or not to signal RBF?

Next, let me examine the question if the wallet fingerprinting, caused by signalling would be an issue or not for Wasabi.

Obviously 100% of transactions signaling BIP125 is extremely improbable, but there's probably a reasonable threshold of BIP125 signaling where it's clear the community is ready for full-RBF.

There's an inherent design constraint in Wasabi that makes this situation better than it'd initially seem. We don't need data on the whole blockchain, we need data on only P2WPKH input only transactions. IMO if the signalling reaches 40%, then we won't have to worry anymore, we could have a choice to decide. In fact, the more reasonable choice would be to decide for it, because of the trend. If the signalling reaches >60%, then we should signal RBF, even if we wouldn't intend to let the user use it.

So the Wasabi relevant metric is P2WPKH input only tx signalling, not the whole blockchain signalling. When this metric reaches >40% then it'll make sense to signal.

The decision on whether to actually use RBF or not can be deferred to when we start signalling it.

@NicolasDorier
Copy link
Contributor Author

@nopara73 what about "Maybe" where you activate RBF at random?

@harding
Copy link

harding commented Aug 22, 2019

Wasabi cannot have opt-in RBF at all

Sorry, when I said "opt-in RBF" I was referring to the technical name of the feature, not per-user configuration of Wasabi.

BIP: 125
Layer: Applications
Title: Opt-in Full Replace-by-Fee Signaling

IMO, giving users a choice would only be something worth considering if Wasabi had the ability to RBF fee bump. Otherwise I agree that users choosing RBF signaling could only degrade their privacy with almost no redeeming benefit.

We don't need data on the whole blockchain, we need data on only P2WPKH input only transactions. IMO if the signalling reaches 40%, then we won't have to worry anymore

The point I was trying to make is that, at some level of adoption across all transactions in the average recent block, Bitcoin Core and other nodes can switch to relaying and mining fee-based replacements by default---not just replacements of transactions that signal BIP125. If that change is made, then nobody needs to signal BIP125 and this method for distinguishing between wallets goes away---improving the privacy of all wallets.

To that end, my suggestion was that Wasabi could signal BIP125 randomly with the same probability as BIP125-signaling transactions are seen on the network (or BIP125-signaling all-P2WPKH input txes, as you say). I think that would improve Wasabi's privacy and increase the number of BIP125-signaling transactions on the network.

@nopara73
Copy link
Contributor

Could someone make a statistics on what percentage of all transactions those only have P2WPKH inputs signalled for RBF during the past month?

Signalling randomly for RBF with the above probability is a privacy improvement for Wasabi. Also a good start to kick off this issue and catch the pitfalls early on.

@knocte
Copy link

knocte commented Aug 23, 2019

Signalling randomly for RBF with the above probability

You could maybe design this so that the coordinator gives the probability info to the client, so that it's updated live without the need of updating the client?

@nopara73
Copy link
Contributor

You could maybe design this so that the coordinator gives the probability info to the client, so that it's updated live without the need of updating the client?

Could be. I think it's a bit overkill though:) Also when there's an acceptable way to not delegate something to the coordinator it's better to not do that, so that part of Wasabi will still work without the coordinator.

@MaxHillebrand
Copy link
Contributor

Thanks @harding for your in depth thoughts on the topic!
I agree with you, the user should have at least the option to use RBF, since it is an important feature for efficient fee management that I would like to use. So for me, long term goal is to have RBF implemented, it's now rather a question of strategy.
Though I do share the wallet finger printing privacy concern of @nopara73. And here the suggestion to give every Wasabi transaction a probability of auto-RBF-signaling of the current average of P2WPKH RBF usage is very smart!!

So how about this:

  • By default, every Wasabi transaction has X% chance of signaling RBF automatically without user input.
  • Increase X with the current adoption in the network, until >50%, then let all tx signal by default.
  • In the advanced settings, allow users to specify signaling RBF for all or none transactions.

I think this would actually increase wallet finger printing privacy compared to the current implementation, it would drive further adoption of RBF which further increases privacy, and it introduces a very powerful feature to the wallet.

@Transisto
Copy link

Transisto commented Sep 24, 2020

I agree with @MaxHillebrand and I'd add that the advanced setting could simply enable or disable the option to shot the RBF tick-box.

If you're spending spending 0.1s from an obvious wasabi mix you're already doxing your wallet anyway.

This is the current electrum implementation for doing an RBF / "priority boost" / "increase fee"

image

image

I don't see anything wrong with that interface except that for preserving privacy of which output is change there should be an option to subtract the fee from amount sent share the cost among output could be an option too but currently much more susceptible to fingerprinting.

image
Almost every bitcoin sellers charge the transaction fee to the buyers so there's a clear use case for such a feature.

Ps: RBF when sending MAX always takes the fee from recipient.

@lontivero
Copy link
Collaborator

I agree that RBF could be implemented with small impact on privacy. I would implemented as follow: a user wants to speed up his transaction then he goes to the History tab and does right click on the unconfirmed transaction, a context menu opens with an option "Bump fee/Increase fee" and when the user clicks on it an small pop-up window appears (very similar to the one shown by Electrum).


On the other hand RBF could be one of those features that wallet developer implement because estimating fees is a really hard problem. For that reason I would prefer to invest time in improving the fee estimations using the fee histogram which gives us a clear picture of the current pressure on the mempool and its variation over the time.

@nopara73
Copy link
Contributor

I leave my full ACK here for full RBF implementation. (eg.: right click/speed up tx) Handling high fees more and more outweigh the privacy concerns, which aren't huge in the first place.

@Transisto
Copy link

Transisto commented Dec 24, 2020

I leave my full ACK here for full RBF implementation. (eg.: right click/speed up tx) Handling high fees more and more outweigh the privacy concerns, which aren't huge in the first place.

Once that's done, it might alleviate your privacy concerns with RBF.
spesmilo/electrum#6783

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

10 participants