March 7, 2024, February payouts complete and updates

Hello! Payouts for the completed month of February are done.

First off, hopefully you have seen our announcement regarding payout rates that took effect December 1st . You should go read this if you haven’t, especially as it generated a lot of (very valuable) discussion. This is the third pay period where these rates were applied.

Layer 1

For layer 1 payments, we paid just 164 unique wallet addresses. This was due to extremely high fees this month. There is no specific minimum payment threshold but it appears that for standard payouts, the pipeline was able to pay out for people who earned $62.19 or more.


Luckily, people who opted into layer 2 still had decently low fees.

For zkSync Legacy/Lite payments, we paid 810 unique wallet addresses. Thanks to everyone who helped us keep fees low by adopting zkSync! As a reminder, in September , we announced that zkSync Era and Legacy adopters now receive a 3% bonus.

For zkSync Era payments, we paid 174 unique wallet addresses. This is once again the most yet, and thank you for volunteering to help us try this new technology! Like zkSync Legacy/Lite, zkSync Era adopters received a 3% bonus. Note that zkSync payments of both kinds are now also subject to a minimum payout threshold. The pipeline paid any zkSync transaction of $0.96 or more.

As of last month, and thanks to our friends at txFusion, zkSync Era now supports paying fees in STORJ token, thanks to txFusion’s STORJ Paymaster! Please see our thread at to see more about how this works.

Note that because zkSync Era now supports paying fees in STORJ token (which was the last remaining thing zkSync Lite was better at than zkSync Era), we are now sunsetting support for zkSync Lite, as announced last month. Starting in 1 month, we will start processing wallet addresses that have opted in legacy zkSync through layer 1. You will need to opt into zkSync Era if you want to keep using layer 2.

If you want to start using zkSync Era, you can do so in a similar fashion to zkSync Lite/Legacy by modifying your wallet features configuration. The wallet features value is an ordered list and can include multiple values. Here is how you would specify preferring zkSync Era to zkSync Lite/Legacy, and zkSync Lite/Legacy to layer 1 in your config file:

operator.wallet-features: ["zksync-era", "zksync"]

And here is how you would specify it on the command line:


Naturally, you can remove zksync from the comma-separated list if you only want zksync-era.

Cost basis tool

Also as announced last month, in advance of tax season, we are finally introducing something that has been long requested - clear cost basis reporting!

We haven’t yet added this data to storage node dashboards, which is a bit more complex since we would need to create a new protocol to provide historical data. So, instead, we’ve created a new tool for looking up the historical cost basis of any SNO transaction in 2023 and 2024:

I know some of our SNOs are quite handy with making scripts and tools. We thought of you and made sure there is a JSON API provided by this tool (click the Raw link after looking up a transaction for an example).

Ukrainian bonus

As we announced in October 9, 2023, September payouts complete and more payouts announcements, this payout period is the final payout period for the Ukrainian bonus. We’ll be posting more about where our donations for these months have gone soon.

Final thoughts

Across all layers, we paid 1,127 unique addresses. As always, if you have more questions, please make sure you’ve read through our mega FAQ .


Wow! A new SNO could run a node for 9 months… get all the way through the withholding period… and still not make enough to get paid!

Doesn’t seem to be deterring people though: almost 25k active nodes now?!?


Is there still the 24h money freeze for security reasons on ZkSync ERA? Has someone figured out the best way to move L2 ERA STORJ to L1 ETH?

1 Like

It has been this way in the past as well. I remember having to earn $75 USD before actually getting a payout on L1.


Guess I’ll go back to trying out zksync-era again.

Any word on accepting direct payment to storj storage account wallets with zksync-era?

You should really subscribe to the roadmap so you won’t have to repeat yourself.


hah, fair point.

Now, to figure out how to subscribe…

Nifty. Thanks for the reminder on this.


Is it only this small modification to config which I shall do to get paid Feb-March fee? All the rest keep without chenges?


yes. Just make sure that you have a private key from this wallet address to be able to fix anything what could go wrong.

Just to be 100% sure:

  1. This adress remain same as before (no changes to run command)
  2. Open this config file
    Put value “zksync-era”, “zksync” to this line
  3. Restart the node. Repeat for each node


1 Like

Something wrong, got this kind of mistake:

C:\Users\Администратор>docker logs --tail 50 storagenodeD1.19
      --tracing.buffer-size int          buffer size for collector batch packet size
      --tracing.enabled                  whether tracing collector is enabled (default true)
      --tracing.interval duration        how frequently to flush traces to tracing agent (default 0s)
      --tracing.queue-size int           buffer size for collector queue size
      --tracing.sample float             how frequent to sample traces

Error: While parsing config: yaml: line 124: did not find expected key
  storagenode-updater run [flags]

      --binary-location string             the storage node executable binary location (default "storagenode")
  -h, --help                               help for run
      --identity.cert-path string          path to the certificate chain for this identity (default "identity/identity.cert")
      --identity.key-path string           path to the private key for this identity (default "identity/identity.key")
      --log string                         deprecated, use --log.output
      --service-name string                storage node OS service name (default "storagenode")
      --version.check-interval duration    Interval to check the version (default 15m0s)
      --version.request-timeout duration   Request timeout for version checks (default 1m0s)
      --version.server-address string      server address to check its version against (default "")

Global Flags:
      --config-dir string                main directory for storagenode configuration (default "config")
      --debug.addr string                address to listen on for debug endpoints (default "")
      --debug.trace-out string           If set, a path to write a process trace SVG to
      --defaults string                  determines which set of configuration defaults to use. can either be 'dev' or 'release' (default "release")
      --identity-dir string              main directory for storagenode identity credentials (default "identity")
      --log.caller                       if true, log function filename and line number
      --log.development                  if true, set logging to development mode
      --log.encoding string              configures log encoding. can either be 'console', 'json', 'pretty', or 'gcloudlogging'.
      --log.level Level                  the minimum log level to log (default info)
      --log.output string                can be stdout, stderr, or a filename (default "stderr")
      --log.stack                        if true, log stack traces
      --metrics.addr string              address(es) to send telemetry to (comma-separated) (default "") string               application name for telemetry identification. Ignored for certain applications. (default "storagenode-updater") string        application suffix. Ignored for certain applications. (default "-release")
      --metrics.event-addr string        address(es) to send telemetry to (comma-separated) (default "")
      --metrics.instance-prefix string   instance id prefix
      --metrics.interval duration        how frequently to send up telemetry. Ignored for certain applications. (default 1m0s)
      --tracing.agent-addr string        address for jaeger agent (default "") string               application name for tracing identification (default "storagenode-updater") string        application suffix (default "-release")
      --tracing.buffer-size int          buffer size for collector batch packet size
      --tracing.enabled                  whether tracing collector is enabled (default true)
      --tracing.interval duration        how frequently to flush traces to tracing agent (default 0s)
      --tracing.queue-size int           buffer size for collector queue size
      --tracing.sample float             how frequent to sample traces

2024-03-30 18:04:04,360 INFO exited: storagenode (exit status 1; not expected)
2024-03-30 18:04:04,361 INFO exited: storagenode-updater (exit status 1; not expected)

Please check the syntax in the 124 line of your config.yaml file. It should be

or just for zkSync Era:

operator.wallet-features: ["zksync-era"]

Since you use docker, you may revert your changes in the config.yaml file and add a command line option after the image name in your docker run command instead:

docker run -it -d ... storjlabs/storagenode:latest --operator.wallet-features="zksync-era"

Thank you Alexey, I did. This means correct setup?

Looks like. If you keep it like that, you likely can receive the Undistributed on the next month to your zkSync address.

Appears that effort is now complete and live on accounts…

1 Like

Hello, did anybody get paid already?

You can watch this address

1 Like

FYI, I just tested it using TxPortal, which allowed me to pay the fee with Storj.

I just sent a small amount as a test. Cost me $0.03 USD fee.

storj account wallet:

Thank you to the Storj crew for completing this feature.


It will be published on the forum.
But why? Do you pay your servers rental from the income?
Then, well, we tried to warn you - it’s not a predictable income, the usage depends on customers and payout in the first two weeks of every month with a Minimum Payout Threshold, which depends on a fee on the selected network (zkSync Era (L2) has significantly less fees, thus you can receive a payout which will not be sent via Ethereum (L1)).
Thus we recommend to use what you have now and what will be online anyway, with Storj or without.

No, I don’t. Just want to know, what zksynk setup is correct and paiments for Feb-March will arrive.