Using a Savings Account (transfer_from_savings and transfer_to_savings) to protect your liquid STEEM and SBD

With today's hardfork and updates, one of the most important additions (IMHO) is the Savings Account.

For those of you with liquid balances (balances that could be moved instantly, SBD or STEEM) - this feature will help you sleep a bit better at night. It will for me, that's for sure.

STEEM Currencies and risk of attacks

Each account on the steem network has always had a balance for these three things:

  • STEEM (The cryptocurrency)
  • SP (STEEM Power, or VESTS)
  • SBD (STEEM Backed Dollars)

SBD and STEEM are currencies that can be transfered between accounts within seconds, allowing for fast and easy transfers of wealth. SP is not transferable at all (except through a power down), so it's a bit different.

The security risk with the transferable currencies is that if an account is compromised, an attacker could immediately transfer any STEEM or SBD into the account to a different account, much in the same way an attacker could steal BTC if they had your private keys.

Saving Accounts - a little peace of mind

Hard fork 14 introduces two new balances, a Savings STEEM balance and a Savings SBD balance. The benefit of these balances is that they have a timed withdrawal of 72 hours, and during that time the withdrawal can be canceled at any time. This 72 hour window provides a layer of security and time to secure your account should it become compromised.

For me personally, I have been holding SBD earnings from my posts to take advantage of the 10% APR interest that's paid our every 30 days and has the ability to compound. For the past two months though, if anyone gained access to my active key, they could have stolen those funds.

No more! I have transfered the majority of my SBD into the savings account. This means that if my active key is compromised and a withdrawal of my SBD is initiated, I have 72 hours to use my owner key to change my active key (to prevent further actions) and cancel the withdrawal request. Attack thwarted!

How do I use this feature?

Currently to use this feature, you MUST use the cli_wallet command line program to initiate the transfers. We can assume in the coming weeks this functionality will be added to the "Transfers" tab of our profile page, but if you're impatient like me, here's how you get started.

If you're unsure of how to use the cliwallet, here's a few links that might get you started. This article will not cover how to setup the cliwallet, there's enough to it already.

How do I transfer funds into the savings balance?

At any point, instantly, you can transfer funds in the form of SBD or STEEM into your savings balance. With your keys loaded into the wallet, and your wallet unlocked, you can run the following command to transfer funds into savings.

transfer_to_savings from to amount memo broadcast

For example, if I, jesta, want to transfer 10 SBD into my own savings account, I would run:

transfer_to_savings jesta jesta "10.000 SBD" "" true

You can also do the same thing with STEEM, like so:

transfer_to_savings jesta jesta "5.000 STEEM" "" true

You'll notice with all of these transactions, the format of the currency itself is the amount with 3 decimal places, followed by the currency symbol. This is similar how the cli_wallet works for all currency amounts. The memo field can also be represented by "" (an empty field) or you can put whatever note you'd like on the transaction (which will be publicly visible).

Protip: If you want to transfer funds to someone else's savings account, you can do that as well. As an example, let's say I want to transfer 10 SBD to the @bounty bot and deposit it directly into the savings account for safe keeping:

transfer_to_savings jesta bounty "10.000 SBD" "" true

It would transfer from my non-savings SBD instantly, directly to @bounty's savings account, and then take the @bounty account 3 full days to be able to access those funds.

How do I withdraw funds from the savings balance?

Withdrawing funds isn't instant, it takes 72 hours from the moment it's initiated for the funds to become available. The command is only slightly more complicated than the deposit.

transfer_from_savings from request_id to amount memo broadcast

The one major difference in withdrawal is the presence of a request_id. The request_id field can be any number you'd like, and it's a reference ID that you can use in the future to cancel the withdrawal.

So for example, let's say I want to withdraw the 10 SBD I deposited in the earlier examples.

transfer_from_savings jesta 1 jesta "10.000 SBD" "" true

In this request, I've assigned the requestid to be 1 just to make it easy. Each active requestid must be unique, meaning that for 3 days (until this withdrawal complete), I cannot use 1 in another request as it's request ID. Once this transfer is complete, I could use it again. While 1 is unavailable, I could use any other number to issue more withdraw requests.

And just as before, the same request could be used to withdraw the 5.000 STEEM deposited in the earlier examples, and you can even withdraw to another account by changing the to field.

The one thing you can't do yet is withdraw from your savings directly to another accounts savings (I think?).

How can I cancel a withdrawal from the savings balance?

The last part of controlling your withdrawals is being able to cancel one of your transfer_from_savings operations. This is the command you would use if you changed your mind about withdrawing funds or if your account was compromised and you're in the process of recovering.

cancel_transfer_from_savings from request_id broadcast

The same as before, we will use the example above to illustrate how this was done. The withdraw of 10 SBD I initiated earlier with a request_id of 1 could be canceled by running the following command:

cancel_transfer_from_savings jesta 1 true

The request_id is whatever number you choose to use during the withdraw command. This number is published on the blockchain along with the request, so even if your account was compromised and someone else choose the number, you'd be able to see it and cancel it.

This operation cancels the withdraw request immediately and keeps it locked in your savings account until you choose to withdraw again.

Where this feature is heading (I assume)

There's a lot of great ways this system will be improved in the future. I'm not part of the core development team, nor do I have insights into exactly what they will do, but I am going to assume we will see the following things added to steemit.com to support these operations:

  • The viewing of savings balances on your wallet/transfers page. They currently do not display, and using this feature will make it appear as if your balance has been lost. Fear not! It's not gone.
  • The ability to deposit funds into a savings account from the wallet/transfer page.
  • The ability to initiate a withdraw from the wallet/transfer page.
  • The ability to view all pending withdraw requests from the wallet/transfer page. This should also include when the withdraw will be completed.
  • The ability to cancel any pending withdraw from the wallet/transfer page.
  • Hopefully a small note on the wallet/transfer page on how to seek assistance should your account become compromised, the 72 hour window for recovery, and documentation on how to recover.

I am currently working on displaying information related to this new feature on both steemstats.com and steemdb.com. If I get brave, I may attempt to add this information to the wallet/transfers page as a pull request myself.

I hope this guide has helped explain one of the most awesome features in this most recent update, and if you have questions, feel free to ask them below! Hopefully as a community we can clarify and answer any questions that may arise.

$ 186.258 SBD
20