zkSync questions for crypto newbies

Hi, I’ve been trying to figure out how to use zkSync for a few days, but I haven’t been able to. Currently I have a normal ETH address (L1 I think they call it) that has worked without problems. Unfortunately I don’t use any wallet shown in the examples, I use Coinomi. Can I use that wallet? I would like you to answer some questions

  1. if I don’t switch to zkSync, will I not be able to receive payments? I have no problem with not getting paid monthly.

  2. Can I use coinomi to make this change?

  3. Why are things so complicated? :roll_eyes:

You can use wallets, available on https://wallet.zksync.io/ directly or with WalletConnect.
On Coinomi site the last one is available - so you can try to use it. You can also import your private key to the Metamask and connect it to https://wallet.zksync.io/ without problems.

  1. Depends on fee on Ethereum. Your earned sum should be in 4 times greater than fee to transfer them (or in 10 times in the future, see October 8, 2021: Payouts for the month of September complete, PLUS, plan for SNO Payments rules)
  2. You need to test it
  3. because it’s crypto.

Concerning 3. - it is very simple to cash out from eth or btc, on a level with using any modern bank app. I think it is complicated because of other reasons (not like they are not valid, but topic starter may get wrong impression).
By the way, Alexey, do you have any well working, simple and fast method for going from L2 storj to RUB? If so, could you please share? Sorry If I assumed wrong.

With the last changes from the Central Bank of Russia your Remote banking could be blocked by your bank for attempt to sell or buy any crypto, unless you are Self-employed or Individual Entrepreneur who are working with the crypto as a professional and have all confirming documents like origin of your income and report of paid taxes.
I know, the law do not require that, but CB is pushing the idea to make crypto illegal. They are breaking some laws doing so, but are you ready to meet them in the court?

If not take into consideration complications with fiat/crypto in Russia, it’s relatively easy.
You can swap them to ETH or USDT right on L2 but only in Numio wallet as far as I heard (I do not use it, so cannot confirm), the other way is to withdraw to Binance deposit address for STORJ and sell them for USDT or BTC, then sell USDT/BTC via p2p.
At this point withdrawal from L2 to L1 address costs almost the same as from L1 to L1 transfer. But you will pay a one-time activation fee with your first withdrawal. From the bright side - you do not need to have ETH to send your funds to L1 address from your L2 account (you can pay fee in STORJ), unlike L1 to L1 transfers where you can pay fee only in ETH.

1 Like

Thanks for replying so soon! If I am not mistaking and text of law did not get updated since beginning of this year, a person has to make tax declaration only if annual turnover with crypto is > rub600k, otherwise it is not getting penalized in any way. For better or worse, that is not my case :slight_smile: Anyway, there are some services which, when you cash-out, randomize payments to your account / card within a certain time period as if it is a normal use case scenario. Also they have a daily transaction limit of rub100k or something. This more or less allows to get by. Of course, after law will be set in stone and with more precise conditions, it is better go for self-employed status + tax-declaring all this stuff.
Thanks for sharing some methods on L2. If I will change to L2 I will try out one of your methods.

Yes. However, the CB “recommends” to banks to block any “suspicious activity” with cash and Credit/Debit card by 115-FZ law (otherwise the license may be revoked).
Most private exchangers fund your card with cash through ATMs, or send tiny amounts from various accounts. This is treated as a “suspicious activity” in 100% cases independently of sum.
These changes applied since October 1, 2021.
So banks have no choice, even if it breaks many other laws, starting from the presumption of innocence to the civil code.
The CB is failed to prohibit crypto by law, but they find another way to achieve their goal.

1 Like

If that is a frequent approach, it will bring so much trouble. Even at my daily work we are sending some small amounts, like 1-3k, to colleagues as a birthday present, and there may be 20 or 30 transactions, so it falls under description of suspicious.
Anyway, I will try to cash-out sometime in future as soon as transfer costs of tokens will be more or less bearable and will get back with some news if my bank account will get any problems. Hopefully, as with many other “bright” ideas, implementation of such control will be far from ideal.
Last time I did it (in August), it went fine.

I think the correct answer to #3 is actually, “because nobody has yet figured out how to make high quality learning resources for it.”

It’s hard work making learning resources and testing that they actually work for your audience. I assume people are working on it, it seems like many people are trying. From where I sit, everything I’ve found misses the mark though.

Until this happens, there will probably be a lot of us who hang around under the old system. I don’t really mind that much, but I think that’s the reality.

I’m agree, but not only the lack of learning resources. Most of people just do not read.
You can give as much comprehensive guide as possible, but it’s doesn’t help, if people do not want to read and learn. They want a simple solutions like “send them to my bank card”.

They do not care that it’s extremely difficult to make it happen, our governments and banks all wants money, preferably - all, only the law can slow down them a little bit, but not stop.
So, if something got easier with fiat it will costs maximum price in fee/tax/whatever, often for both sides.


I emphatically disagree.

When I came to Storj to begin with, I had minimal experience configuring servers or Linux services, zero experience with or understanding of Docker and containers, and light-to-moderate experience with cryptocurrencies. I relished the challenge, it was a little frustrating to get set up, and I did need a little help, but I got it done. I’ve had a node operating since April. It’s been knocked offline a couple times, which has been frustrating, but also a learning opportunity. I’ve been able to keep the thing going. Why? Because Storj provides excellent, clear documentation of how to do things that can be rather daunting.

I think my experience is rather typical of SNOs. Our stories may differ, but I think it’s safe to assume that anyone who’s managed to get a node set up is willing to read, follow instructions, operate outside their comfort zone. Almost by definition, we are willing to do stuff much more complex than “sending a bank card.” There may be a small handful of people who had their node set up 100% by a friend and who didn’t bother to learn anything in the process, but it’s hard for me to believe that’s very many of us.

Personally, I have read all kinds of stuff about ZkSync. I’ve watched videos, read discussions, read instruction pages. I’ve had people advise switching to ZkSync, and ultimately learned their reasoning was that they assumed I wanted to get a payout sooner, without ever asking me if in fact I wanted that. I see instructions full of jargon and terms I don’t know, which when I go and learn the jargon, I come back and it still doesn’t make sense to me after I’ve learned the terminology. I’ve invested many, many several hours into trying to understand ZkSync and how it would apply to my situation, but the unfortunate truth is, my understanding has made basically zero progress.

Now with the 10% bonus, which I appreciate, I’m tempted to make another major investment in learning. But when I think it through, I realize this: With the earnings I’ve made so far, that 10% payoff would amount to between $1 and $2. It is not worth the stress of trying to wade through mixed up documentation (or the risk of making a mistake and screwing up my payouts without knowing I did something wrong).

My other choice is to wait. It will still be a few months before I get a payout under L1, so there’s not really a downside to waiting. But perhaps if I wait, either (a) somebody will finally put together documentation that makes sense to me, and I’ll find it; or (b) Storj will find an easier solution. So, for the time being, I’ll wait.

Not because I’m lazy, but because I value my time.


You just gift me an almost lost hope, seriously!
I wrote many articles on our documentation site and your positive feedback motivates me to continue. Answering thousands of questions detailed in our documentation, I began to believe that no one ever reads it.
So thank you!

I would like to hear, what difficulties did you have with our documentation about how to configure the zkSync and what other not answered questions do you have?

Regarding the reasons of switch to zkSync - it’s highly depends on trust (suddenly :slight_smile: ). If you believe, that you would be paid - you likely will not switch to zkSync, since the fee is too high to do anything with your earnings anyway, so doesn’t really matter - did you receive them right away (zkSync) or they would be postponed on your Undistributed balance. The maybe a difference could be if you want to take market risks and will have an ability to withdraw your fund when you want, not when we sent the payout.
But if you just want to receive an earned USD sum - you likely will leave a default option (Ethereum or in other words L1, the Layer One).

The other reason to switch to zkSync if you decided to leave the network. The final balance will depend on the Minimum Payout Threshold anyway, so you don’t have many options:

  • either opt-in for zkSync and receive your undistributed final balance in the nearest payout period;
  • or wait for a wonder (reducing fees on Ethereum) and receive your undistributed amount in some time in the future;
  • or start a new node with the same wallet to earn enough to receive undistributed amount altogether.

Thank you, this reply is very helpful, and validates what I thought I was learning (but I was not entirely sure).

This is a great question, and I want to be able to give you a very clear answer, so let me take a few days and I will focus on it and take clear notes. And who knows, maybe the third (or is it fourth?) time is a charm, and I’ll finally just figure it out :slight_smile:


I just want to add that I’ve read a lot of the documentation you’ve written en use it as reference whenever I want to set up a new node or change things. It recently came in handy when setting up the node for the QA satellite. Don’t get discouraged by people asking questions that are answered in the documentation. The ones that do read it don’t need to ask, so you simply don’t hear from them.

The only thing I can say is that when someone is new to crypto currencies, Ethereum alone is probably already a lot to deal with and learn. zkSync just adds another layer of complications on top of something that’s already new and fairly complex. The first few months it really doesn’t matter all that much as it’s not worth moving tokens anyway. Maybe you can tell new node operators not to worry about it for a while and then after a few months just send them a mail with instructions to set up zkSync. They may be more open to it then.

Either way, please don’t give up on documenting it. I really need and use that stuff!


Totally completely off topic… but… I’d like to point out that…

ZkSync has a hint on its website that a zksync token may be in the works in the future and Early Adopters of several crypto platforms sometimes get really nice rewards dropped into a wallet address when those tokens hit the general market…

recent ENS drop was nice :slight_smile:

When I started running a Storj Node back in 2019, I tried all kinds of things. My curiosity has been generously rewarded.


Alexey, just wanted to let you know, I still haven’t taken the plunge, but I have reviewed the docs a little more closely. I have some questions below, I hope they are not too off base, but these are the things I wonder about before jumping in.

One general insight, it occurred to me that the huge difference between docker and zkSync (per my analogy above) is that there is a TON of documentation about docker available online, for all different skill levels and backgrounds, but the documentation about zkSync is very minimal and very simplistic (there’s documentation suitable for crypto experts and developers, but for beginners there are only platitudes). I think by asking newbies to use a platform/tool that is pretty new, this is one of the consequences – you don’t benefit from years of people making blog posts and YouTube videos for something like zkSync, on the level that people have done it for docker.

Anyway, here are my questions:

  1. I believe my docker command contains my Ethereum L1 address. Will I need to replace that with the zkSync L2 address? The docs do not state this clearly one way or the other. And if I do, where will I find the zkSync L2 address to paste in?
  2. You give an option for binary versions and another option for docker versions. Choices without clear guidance are difficult. I suppose I’m better off specifying after the image name, but it would be nice if the docs clearly stated if that is the better choice, and maybe why. Otherwise, I feel like I’m just rolling the dice.
  3. You say “navigate to the zkSync Wallet (https://wallet.zksync.io/), and connect your L1 ethereum wallet.” Could you state in the documentation what this step accomplishes? I am guessing that it has something to do with enabling me in the future to convert from L2 Ethereum into a currency that I can trade more easily on exchanges etc., but it would be nice if the docs could state exactly what this step is for, and also if it could state something about the choice between connecting “ethereum wallet” vs. “wallet connect.”
  4. Under the heading “Send tokens from zkSync (L2) to Ethereum (L1)” you state, “you need to reconnect your L1 Ethereum wallet to zkSync.” This is surprising to read, since I thought it was taken care of in the step above. How frequently will it have to be reconnected – is that every time I want to “withdraw” to L1? If the action I referred to in #3 above is something that will need to be repeated periodically, could the docs explain that better?
  5. I think the term “withdraw” is used, and is probably technically correct, in places where I would expect to see the term “convert” or maybe “transfer”. I tend to think of a “withdrawal” as meaning that I am taking money away from a financial institution, and bringing it into my own personal custody. But in this case, I think it means “transferring” it from one … address? … to another. It’s still not in my own personal custody, it’s just somewhere that it’s more …accessible?.. fungible? Or something like that. I find this terminology usage pretty confusing. Not sure if there’s anything to be done about that.
  6. From what I have read here in the forums, I think this step of “withdrawing” (also referred to as “Send to Ethereum,” I think that is the same thing) is the step where it’s possible, if I make poor choices of some kind, to end up paying very high fees. I hope you remember what I am talking about, if not I will try to find the place I have seen you talk about this. If that is the case, could the docs be VERY clear about what choices will lead to the most optimal fees?
1 Like

zkSync uses the same address as L1. This also allows for anyone to trigger an emergency withdrawal to your L1 address (if they pay the fee) and cryptographically ensures your ownership of the tokens on the Ethereum blockchain. There’s no need to change your address because of this. It’s the same.

There are different kind of installs so mentioning different options is relevant. For docker you can change the config or add it to the docker run command. Anything added to the run command takes precedence. On windows installs it’s harder to change that command so better to change the config file. I personally prefer adding the option to the docker command because I manage multiple nodes and this allows me to use default config files for all of them and have all my settings in one place. But both options will work.

You don’t necessarily need to do this before being able to receive tokens, but you will in order to transfer them out either to another L2 address or to an L1 address. It’s good to try it first though to make sure the wallet you use works and to familiarize yourself with the environment. But if you hold the keys to the wallet you will always be able to log in by switching to a supported wallet like metamask for example.

I don’t know if reconnecting is the right word here. You use your Ethereum wallet to sign a proof of ownership in order to log in to the zkSync wallet interface. So think of it more as a way to log in than a way to connect them.
You do need to do a one time activation transaction, which automatically gets added once you want to transfer tokens for the first time. Though they’ve said they are working on getting rid of that step. For now this adds a little bit to the cost of your first withdrawal or transfer, so keep that in mind. This step generates a new key pair that zkSync uses and only has to be done once per address.

Withdraw is used to specify transferring from an L2 address to an L1 address. You are withdrawing from L2. Transfer is also used but refers to transfers within the zkSync network, L2 to L2.

As long as you hold the keys to your Ethereum wallet, the tokens are entirely in your own custody, whether on L1 or L2. No one else can access them or move them, all those actions would require your private key. So in that sense the bank analogy doesn’t hold up. You don’t even rely on trusting the zkSync network as every 10 minutes the entire zkSync state is written to the Ethereum blockchain. Even if zkSync goes down entirely, emergency withdrawal can still be used to get your tokens from the zkSync contract on the Ethereum blockchain and doesn’t require the zkSync network.

Withdrawal requires a transaction on the Ethereum blockchain, this requires slightly more code than a normal token transaction and so the cost is a bit higher than a token transaction on Ethereum normally is. The 10% bonus was put in place to cover this. If you wait until it makes sense to transfer, you can pocket most of that bonus though. I just recommend saving up in L2 until the costs are more than covered.

Hope that helps!


This helps a great deal, thank you. (I do still hope that some of your clarifications will make it into the official documentation, though!)

One final question for now, and I think I’m ready to go: I’m using docker-compose. So does this mean I add a line like this?
image: storjlabs/storagenode:latest
operator.wallet-features: zksync

And, I guess timing is everything (maybe…?) I just completed a survey promising $25 STORJ, got to the end and found out that I had to have zkSync enabled. Well, if I enable it now, I hope that’s good enough!

I’m not that familiar yet with docker compose, but I think it should be something like this.

command: --operator.wallet-features="zksync"

The point of this would be to add this argument to the entry point of the docker container. I believe this should do just that.

You can check the web dashboard to see if it works. It should say zksync opted in next to your wallet address. If this isn’t it, best wait for someone with more experience with docker compose.


Tried both those syntaxes, also tried the version in the docs under “Binary versions” with the [square brackets], none reflected as working, so I reverted to what I had.

*** UPDATE ***
Was advised that rebooting the server box probably did not reload the config file. @BrightSilence your syntax was correct! But I was missing the step of running the following command after saving the file:

docker-compose up -d