python开发steem机器人,通过json文件管理beempy创建的steem账号密码

in STEEM CN/中文5 years ago (edited)

steem使用的是分级授权,因此一个steem账号,具有4个密码:"owner", "active", "posting", "memo".

这些密码都很长,靠人脑记住,是不太现实.只能靠文件存储,让机器人自己读写.

上次已经示范了如何通过beempy,现在就让这个创建过程使用json文件管理.

beem.png

json文件存储的格式(/bots.json):

{
    "nodes": [
        "https://anyx.io",
        "https://api.steemit.com"
    ],
    "steems": {
        "steemaccount": {
        }
    }
}

这里就示范beempy创建新号存入json文件(create_claimed_account_beem.py):

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 用消耗RC领取的pending claimed accounts,创建 steem 新号
# Export the key of the specified account from the local Wallet
# python create_claimed_account_beem.py creator account

import sys
import getopt
import time
import json
# from beem import Steem
from beem.account import Account
from beem.instance import shared_steem_instance
from beemgraphenebase.account import BrainKey, PasswordKey

# 必须有创建者 creator 和新号 account
try:
    creator = sys.argv[1]
    account = sys.argv[2]
except Exception as e:
    sys.exit()
print('creator:', creator)
print('account:', account)

stm = shared_steem_instance()
# 解锁本地钱包(操作钱包时,需要解锁,否则不用)
# 输入本地钱包密码或在代码中直接赋值
# Enter the local wallet password or set value directly in the code
password = ''  # 'walletkey'
if not password:
    password = input('local wallet password : ')
stm.wallet.unlock(password)

# 本地存储 steem 账号信息的文件
accounts_file = '/bots.json'

try:
    # 创建者账号
    creatorA = Account(creator, steem_instance=stm)
    accountA = Account(account, steem_instance=stm)
except Exception as e:
    print('account can be created:', account)

# 生成一套新密码
bk = BrainKey()
brainkey = bk.get_brainkey()
print('brain key:', str(brainkey))
prikey = str(bk.get_private())
print('private key:', str(prikey))
pubkey = format(bk.get_public(), "STM")
print('public key:', str(pubkey))

# 创建新号:本地存储 owner(默认不存储)
tx = stm.create_claimed_account(
    account, creator=creatorA, password=prikey, store_owner_key=True)
print('create_claimed_account:', json.dumps(tx, indent=4))

# 获取整套密钥
posting_key = PasswordKey(account, prikey, role="posting", prefix=stm.prefix)
active_key = PasswordKey(account, prikey, role="active", prefix=stm.prefix)
memo_key = PasswordKey(account, prikey, role="memo", prefix=stm.prefix)
owner_key = PasswordKey(account, prikey, role="owner", prefix=stm.prefix)
# 提取整套密钥中的公钥
# active_pubkey = active_key.get_public_key()
# owner_pubkey = owner_key.get_public_key()
# posting_pubkey = posting_key.get_public_key()
memo_pubkey = memo_key.get_public_key()
# 提取整套密钥中的私钥
active_privkey = active_key.get_private_key()
posting_privkey = posting_key.get_private_key()
owner_privkey = owner_key.get_private_key()
memo_privkey = memo_key.get_private_key()

print('posting_privkey:', str(posting_privkey))
print('active_privkey:', str(active_privkey))
print('owner_privkey:', str(owner_privkey))
print('memo_privkey:', str(memo_privkey))

with open(accounts_file, 'r', encoding='utf-8') as f:
    # 直接用load()传入文件对象,将文件中字符串内容转为json字典
    accounts_dict = json.load(f)
    # print('old.accounts_dict:', accounts_dict)
    accounts_dict['steems'][account] = {
        "name": account,  # steem 账号名称
        "email": "sample@,pwd",  # steem 注册 email
        "mobile": "sample9,from",  # steem 注册 手机号
        "keys": {
            "brain": brainkey,  # steem 账号的脑密码
            "private": prikey,  # steem 账号当前的私钥
            "public": pubkey,  # steem 账号当前的公钥
            "history": [   # steem 账号的私钥的修改记录
                prikey,
                "sample2",
                "sample3"
            ],
            "posting": str(posting_privkey),  # steem 账号的 posting 私钥
            "active": str(active_privkey),  # steem 账号的 active 私钥
            "owner": str(owner_privkey),  # steem 账号的 owner 私钥
            "memo": str(memo_privkey),  # steem 账号的 memo 私钥,用于解密memo
            "memo_key": str(memo_pubkey)  # steem 账号的 memo 公钥,用于加密memo
        }
    }
with open(accounts_file, 'w', encoding='utf-8') as f:
    # 用dump()传入字典和文件对象,将json字典转为字符串,存入文件
    json.dump(accounts_dict, f, indent=4, ensure_ascii=False)

执行程序:python create_claimed_account_beem dappcoder newaccddd
执行结果,和预期一致:

Sort:  

Congratulations @dappcoder! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published more than 30 posts. Your next target is to reach 40 posts.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Do not miss the last post from @steemitboard:

Valentine's day challenge - Give a badge to your beloved!
Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Yay!
Your post has been boosted with ESTM. Keep up the good work!
Dear reader, Install Android, iOS Mobile app or Windows, Mac, Linux Surfer app!
Learn more: https://esteem.app
Join our discord: https://discord.me/esteem

Coin Marketplace

STEEM 0.20
TRX 0.25
JST 0.037
BTC 97184.44
ETH 3434.21
USDT 1.00
SBD 3.07