개발이야기 008. talkit.bank 여섯번째 프로그램 - talkit.bank, talkit.wallet, talkit 계정의 자동 Claim 기능 만들기

in kr •  13 hours ago 

image.png

안녕하세요 @talkit.bank 입니다.

저는 구상만 하는 것을 별로 좋아 하지 않아서 ^^

오늘도 하나의 프로그램을 작성해 보겠습니다.

제가 운영하고 있는 계정들의 클레임을 현재 수동으로 하고 있는데 자동으로 진행 하겠습니다.

1시간마다 Claim해서 얼마 안되지만 SP의 경우 보팅 파워에 도움이 되게 하려고 합니다. ^^

CREATE TABLE steem_claim_rewards_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    claim_time DATETIME NOT NULL,
    user_id VARCHAR(50) NOT NULL,
    sbd DECIMAL(18, 6) NOT NULL,
    steem DECIMAL(18, 6) NOT NULL,
    sp DECIMAL(18, 6) NOT NULL
);

데이타로 저장해야 하기에 위와 같이 테이블을 생성 합니다.

from steem import Steem
from steem.account import Account
import pymysql
from datetime import datetime

# MySQL 연결 정보 설정
DB_HOST = "localhost"  # MySQL 서버 주소
DB_USER = "MySQL아이디"       # MySQL 사용자명
DB_PASSWORD = "your_password"  # MySQL 비밀번호
DB_NAME = "your_database"      # 데이터베이스 이름

# 계정 정보 설정
ACCOUNTS = [
    {"user_id": "아이디1", "posting_key": "posting_key_for_talkit"},
    {"user_id": "아이디2", "posting_key": "posting_key_for_talkit_bank"},
    {"user_id": "아이디3", "posting_key": "posting_key_for_talkit_wallet"},
    {"user_id": "아이디4", "posting_key": "posting_key_for_kayap"}
]

def save_to_mysql(user_id, sbd, steem_balance, sp):
    """MySQL에 데이터를 저장하는 함수"""
    try:
        connection = pymysql.connect(
            host=DB_HOST,
            user=DB_USER,
            password=DB_PASSWORD,
            database=DB_NAME,
            charset="utf8mb4",
            cursorclass=pymysql.cursors.DictCursor
        )
        with connection.cursor() as cursor:
            sql = """
                INSERT INTO steem_claim_rewards_log (claim_time, user_id, sbd, steem, sp)
                VALUES (%s, %s, %s, %s, %s)
            """
            cursor.execute(sql, (datetime.now(), user_id, sbd, steem_balance, sp))
        connection.commit()
        print(f"{user_id}의 보상 내역이 MySQL에 저장되었습니다.")
    except Exception as e:
        print(f"MySQL 저장 중 오류 발생: {str(e)}")
    finally:
        connection.close()

def claim_rewards():
    """모든 계정의 보상을 클레임하고 MySQL에 저장하는 함수"""
    for account in ACCOUNTS:
        try:
            steem = Steem(keys=[account["posting_key"]])
            acc = Account(account["user_id"], steem_instance=steem)

            sbd = float(acc.get_balance("reward_sbd").amount)
            steem_balance = float(acc.get_balance("reward_steem").amount)
            vests = float(acc.get_balance("reward_vests").amount)
            sp = float(steem.vests_to_sp(vests))  # Vests를 Steem Power로 변환

            print(f"계정 {account['user_id']} - 현재 보상: SBD: {sbd}, STEEM: {steem_balance}, SP: {sp}")

            if sbd > 0 or steem_balance > 0 or sp > 0:
                print(f"{account['user_id']} 계정의 보상을 클레임합니다...")
                acc.claim_reward_balance()
                print(f"{account['user_id']} 계정의 보상 클레임 완료!")
                save_to_mysql(account["user_id"], sbd, steem_balance, sp)
            else:
                print(f"{account['user_id']} 계정은 보상할 것이 없습니다.")
        except Exception as e:
            print(f"{account['user_id']} 계정에서 오류 발생: {str(e)}")

다중으로 가능하도록 코드를 만들었고,

위코드에서 아이디와 포스팅 키만 제대로 넣으시면 됩니다.

당연히 MySQL 관련 접속 정보도 수정해주십시오 ^^

저는 1시간에 한번씩 Claim 하도록 스케쥴러를 수정 해 두었습니다.

감사합니다.



Posted through the ECblog app (https://blog.etain.club)

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Upvoted! Thank you for supporting witness @jswit.