Hey friends,
TL;DR;: - secure the owner key of your registered account
- continue using your account by means of the active_key
this quick tutorial is meant for people that want to put their account name's private key on ice.
This is not a cold storage solution for your funds but for the account
which is registered on the blockchain.
Note that open market orders are not recoverable from the new keys. So
please close your open orders before doing this.
Background:The blockchain differenciates between at least two pub/priv keys:
owner_key- 'owns' the account on the blockchain.
- it's like the master of everything.
- all keys are derived from this. Comparable with the seed of HD wallets from Bitcoin.
- can NOT be updated/changed on the blockchain
active_key- derived from owner_key
- used for (TITAN and non-TITAN) transaction to a registered account name
- used to derive market keys .. (at least that's my understanding)
- can be updated/changed on the blockchain
signing_key (delegates only)
- used to sign blocks (different chapter, different howto)
Howto secure your account's owner key:1) Make a backup of your wallet
wallet_backup_create
2) set a new active key
wallet_account_update_active_key <accountname> <payingAccountName>
with
<accountname> denoting the account name for which you want to
update to a new active key and [t]<payingAccountName>[/tt] is the account which
is funded and pays the transaction fee. The client itself derives a new
active_key (deterministically from the owner key) and sends an update
transaction to the network. You current wallet will still be able to receive
new funds.
3) wait for one or two blocks
4) Dump the new active key
wallet_dump_account_private_key <accountname> active_key
5) create new wallet
6) import private key from above into new wallet
wallet_import_private_key <wif> "" false false
The "" tells the client to figure out the account name automatically and
"false false" tells the client to not 'create' but import an existing account
and not rescan the blockchain (which we will do manually because we have some
more accounts to secure
)
7) Repeat 2) to 6)
8 ) Rescan
rescan
Done. Your funds should all appear again. Even those that have been traded on the blockchain.
For the brave guys in the community: I wrote a python script to do the above
steps for all accounts (it worked here
)
https://github.com/xeroc/bitshares-pytools/blob/master/user-tonewactivekey/main.pySample output:
# Reading accounts
## setting new active keys
- a.delegate.xeroc
- b.delegate.xeroc
- c.delegate.xeroc
- d.delegate.xeroc
- delegate.xeroc
- e.delegate.xeroc
Error changing active key for exchange.xeroc. Probably not able to pay. Please fund account.
- exchange.xeroc
Error changing active key for exchange.xeroc. Probably not able to pay. Please fund account.
- f.delegate.xeroc
- payouts.xeroc
- xeroc-delegate-1
- xeroc-delegate-2
- xeroc-delegate-3
- xeroc-delegate-4
- xeroc-delegate-5
- xeroc-delegate-6
- xeroc-delegate-7
- xeroc-delegate-8
- xeroc-delegate-9
## waiting two blocks to confirm
## moving funds to new active keys
-- exchange.xeroc : sending XXXXXXXX BTC
-- exchange.xeroc : sending XXXXXXXX EUR
-- payouts.xeroc : sending XXXXXXXX EUR
-- payouts.xeroc : sending XXXXXXXX USD
-- xeroc-delegate-1 : sending XXXXXXXX EUR
-- xeroc-delegate-1 : sending XXXXXXXX USD
## waiting two blocks to confirm
## new active keys
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
wallet_import_private_key 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DISCLAIMER:
THE TUTORIAL IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.