Info

Source on GitHub

https://github.com/dkaraush/ton-web

Smart Contract Address

-1:d9bb6fde2410a2445f4e213013f5a0ac584a580a67478fa2992be4bae24c3079

Source on GitHub

https://github.com/dkaraush/ton-mixer

Smart Contract Address

-1:77f4c928f9546314ab00fc9176c4ea1cc1bae0e921d5241600f3e957e4bf0a2a

Testing and Issues

You can test this entry and submit issues during the testing period of the Blockchain Contest, Stage 2 contest.

Entries with serious issues will not be able to win the contest, but even minor issues might be important for overall results.

Voting

2

Comments

1. TON Web
Link (more detailed info): https://tonweb.site

A smart-contract, which helps to store files directly in its persistent storage with support of get-methods, used in tonweb.site.
Smart-contract itself is written in Fift/FunC.

todo:
- scripts to send messages with editing/deleting/creating new files in smart-contract (contract has this functionality, but it wasn't tested properly and is not used now)
MacOS Mojave 10.14.3 / Chromium 80.0.3967.0 (Developer Build) (64-bit)
2. TON Mixer
Application link: https://tonweb.site/-1:2bcc9840e7b9ec6b77fe3543b4eefbf3ba6c69fd98f362b3d3b2f4b752adb5e8

A service, which helps to anonimize the source of Grams.
Smart-contract address is just one of current working nodes.

A service uses default wallet codes (fift, func) and is written in Node.JS using toncenter.com (thanks @rulon for such great work)

In screenshot you can see, how it is working on server side. Now another nodes are active.
MacOS Mojave 10.14.3 / Chromium 80.0.3967.0 (Developer Build) (64-bit)
Continuation of an answer to Chic Dolphin:

3) "Because the way you select nodes is deterministic (ordering by balance) upon seeing incoming transaction I can predict which nodes will handle it."
Yep, if you know balance of each. Is "predictable" bad in this case?
But, as I said, maybe I should have submitted version, where more than one node send transaction back.

4) "Another interesting choice is that if you don't have enough money (how is that?) you simply don't send full amount."
I warn user, before his transaction, how much money can I send him back.
MacOS Mojave 10.14.3 / Chromium 80.0.3967.0 (Developer Build) (64-bit)
You have not added any comments yet...
by rating

Issues

Chic Dolphin Dec 24, 2019 at 04:43
About that mixer. If I read the code correctly there are nodes, if I want to hide my transaction I "reserve" some random node. I send my grams to that node, and once it detects balance change it orders other nodes to send me that balance within 30m interval.

So the obvious problem is that there is only one output. If I send 100 grams, it isn't difficult to find a wallet that received 95 grams 30m later.

Alternatively I can discover all nodes either by submitting api requests, or watching those that leave 0.15 gram balance (MixerNode.minStake). Because the way you select nodes is deterministic (ordering by balance) upon seeing incoming transaction I can predict which nodes will handle it. In worst case scenario first that will have enough balance will handle it all.

Another interesting choice is that if you don't have enough money (how is that?) you simply don't send full amount.
1
Bold Wolf Dec 24, 2019 at 08:54
I can't fully answer here, as for "Text too big" error. You can find continuation of this answer in comments under this project.

1) "If I send 100 grams, it isn't difficult to find a wallet that received 95 grams 30m later."
In empty network, it is obvious to find hidden transaction, as it would be only one in the system. But I understand my mistake, in my previous version few nodes send parts of full amount, but, again, it will not hide transaction 100%.
Maybe fixing and adding more outputs would improve anonymity, thanks for the idea.

2) "Alternatively I can discover all nodes either by submitting api requests"
If you have more, than one IP.
I believe there's no way of making good mixer until zk-SNARKs are implemented. I would focus on this.
1
Bold Wolf Dec 24, 2019 at 09:06
I agree with you. Maybe, somebody more professional should implement own mixer, or, as you said, it is not possible without zk-SNARKs.
I tried to make it in few days (in last days I just thought, that TON Web sucks as a project here) and, to be honest, I don't satisfied with the result of my mixer, it has holes.
Chic Dolphin Dec 25, 2019 at 13:47
> In empty network, it is obvious to find hidden transaction, as it would be only one in the system.

Let's say we both wanna hide 100 grams, we secretly communicate with each other exchange our destination addresses and toss the coin. If it's heads then we send 10 grams to each other, if it's tails then we send 10 grams to our own destinations. And we repeat that process 10 times. The net result is that no-one else except us two knows whos destination belongs to whom.

It's not about transaction count. It's about ensuring that transactions are indistinguishable from each other. Scale that to more users, make sure they burn the records afterwards and that's mixer.
1
Bold Wolf Dec 25, 2019 at 15:45
Thanks for your reply.
Clever Turkey Feb 11 at 01:30
Storing big files entirely in blockchain is very expensive, so the implemented approach is hardly to be widely used. It also seems that big files can't be uploaded at all in this way.

The mixer seems to be too simple to provide real anonymity.
Bold Wolf Feb 11 at 05:56
Thanks for your reply.
I haven't recommended to store big files in-chain and I haven't said, that websites should be large in it.
https://tonweb.site/-1:d9bb6fde2410a2445f4e213013f5a0ac584a580a67478fa2992be4bae24c3079/index.html webpage costs me only around ~2-3G. I think it's not so expensive, but, of course, overpriced. This project was about "what-if" purpose.
Nobody added any issues yet...