Metamaskのトランザクション

Chat GPTへのお願いの仕方(プロンプトエンジニアリング)がうまくなるため、投げ込んだお願い事をメモしていってます。

目的

仮想通貨の話です。
任意のパブリックアドレスに接続してそのトランザクションを取得。その中のうち、自分のアドレスに送金したトランを抽出し、dict形式で保存。

ポイント

パブリックアドレスに加えてネットワークも重要で、それをプロンプトに入れる。

Chat GPTに投げかけた言葉

次のPythonプログラムを作って。

プログラム: """
* 仮想通貨のパブリックアドレス[abcdefg]に接続し、ネットワークが「BSC」のトランザクションを取得
* そのアドレスへ送金したトランザクションを抽出
* 送金元アドレスと送金額をdictに格納
"""

ばっちり動いたんですが、単位がえらいことになってるので(兆を超える桁)、追加質問。

送金額の単位は?

→ Weiという単位で入っていて、1BNB=10**18(10の18乗)だそう。ということで、手動でプログラムを修正。

CSVに出力する部分もお願い。

dicttranhist.csvに保存する機能を追加して。修正箇所だけ教えて。

さらについでにdictの読み込み部分もお願い。

tranhist.csvを改めてdict(dic_hist)に読み込みするには?


作ってくれたプログラム

import csv
import requests

api_bsc = "***********" #要修正
public_address = "************" #要修正

def get_transactions(address, api_key):
    base_url = "https://api.bscscan.com/api"
    payload = {
        "module": "account",
        "action": "txlist",
        "address": address,
        "startblock": 0,
        "endblock": 99999999,
        "sort": "asc",
        "apikey": api_key
    }
    response = requests.get(base_url, params=payload)
    return response.json()

def extract_incoming_transactions(transactions):
    incoming_transactions = []
    for tx in transactions['result']:
        if tx['to'].lower() == address.lower():
            incoming_transactions.append(tx)
    return incoming_transactions

def store_sender_and_value(transactions):
    sender_and_value = {}
    for tx in transactions:
        sender_and_value[tx['from']] = float(tx['value']) / (10 ** 18) #ここ手動で修正
    return sender_and_value

def save_to_csv(data, filename="tranhist.csv"):
    with open(filename, mode="w", newline='') as csvfile:
        fieldnames = ["Sender", "Value"]
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        for sender, value in data.items():
            writer.writerow({"Sender": sender, "Value": value})

def load_from_csv(filename="tranhist.csv"):
    dic_hist = {}
    with open(filename, mode="r", newline='') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            dic_hist[row["Sender"]] = float(row["Value"]) #ここもintからfloatに変えてます
    return dic_hist


if __name__ == "__main__":
    address = public_address  # Replace with the actual public address
    api_key = api_bsc  # Replace with your BSCScan API key

    transactions = get_transactions(address, api_key)
    incoming_transactions = extract_incoming_transactions(transactions)
    sender_and_value_dict = store_sender_and_value(incoming_transactions)

    print(sender_and_value_dict)
    save_to_csv(sender_and_value_dict)

    test_dic = load_from_csv()
    print(test_dic)


めちゃらくち~ん


この記事が気に入ったらサポートをしてみませんか?