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 cli_wallet, here's a few links that might get you started. This article will not cover how to setup the cli_wallet, there's enough to it already.
- @pfunk/a-learner-s-guide-to-using-steem-s-cliwallet-part-1
- @lantto/how-to-use-the-steem-cli-wallet
- @steem-id/tutorial-how-to-use-cliwallet-without-downloading-complete-blockchain-on-windows-x64
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 request_id to be 1
just to make it easy. Each active request_id 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.
With the amounts some people have this is an important security feature. I still think we need 2-factor authentication as an extra protection. I've not tried the cli-wallet, so I hope this makes it to the web soon. Seeing some other new features this week
Good information. Thanks
Thanks for explaining this new feature in details for us. You rock :)
Can you clarify this 72 hours window, please? Does that mean that the withdrawal is confirmed after 72 hours only? That it takes 72 hours for the transfered funds to really appear in the destination wallet?
By the way - why is the upgrade called a hard fork and not ... well, upgrade? :)
The 72 hour window means that it takes 72 hours for the transaction to process. During the transfer, the funds are no longer reported in your savings balance or in your normal balance, but you can cancel the withdraw request at any time to return it to the savings balance.
So if on Monday at Noon you initiate a withdraw, Thursday at noon the funds will appear in your normal balance and be available for transfer/spending/powerup/etc.
And it's called a hard fork because the witnesses are actually creating a fork of the network, invalidating the old network. The witnesses get the final say on whether the fork is accepted or not. I don't know if that makes it make any more sense, but I'm still pre-coffee :)
It makes sense on both accounts, post-several-coffees :) Thanks a lot!
Thank you for posting in manner that can be easily understood. Cheers.
Good stuff @jesta! I've given you my witness vote right from the start for a damn good reason, you're a great asset to Steem(it)!
Thanks for posting this useful information:)
Good info. Will look into this to protect my money
At all cost lets take full responsibility of our account to avoid the unfavorable things to happen like account compromised.
Great post, thanks for the info. Will be doing this soon!
Thanks for this great information, i was worried about my account, first dropped so much in value and can't get it out.. this is a good addition.. Good to know!
Excellent post! As more of these features are added, I hope people's confidence in this platform will continue to increase.