Python Help: what database should I use for sending Lightning Streaming Sats into Hive for Podcasting 2.0?

avatar
(Edited)

UPDATE: I'm using MongoDB along with the Motor Python library for async connections. It's proving to be .... interesting. But it does seem to be working.

I'm working on something cool.... a limited Lightning Network to Hive bridge for podcasters on 3speak.

Streaming Sats raw data

As I alluded to but didn't fully explain last week, every show on @threespeak is becoming a podcast because 3speak are adding RSS feeds to all their channels. It was a relatively simple code change with a huge implication. I'll explore that in a post very soon.

The programming question

What I need help with is a modern database way, fully containerised to run alongside another containerised Python script I'm writing which reads the incoming invoices off my own Lightning node.

I'm bewildered by the choices of MongoDB, Postgres, MySQL and even wondering if MySQLLite is enough for what I'm doing! I suspect I'll use Tortoise ORM alongside the FastAPI I'm using so far.

My code is fetching and building a Python Dict object with the details of each keysend invoice and this is what I need to store in the database.

I already have a basic model in Pydantic so what's the best database to store these two datastructures?

class V4VDetails(BaseModel):
    action: Optional[str]
    app_name: Optional[str]
    podcast: Optional[str]
    name: Optional[str]
    url: Optional[str]
    itemID: Optional[int]
    episode_guid: Optional[str]
    episode: Optional[str]
    ts: Optional[int]
    speed: Optional[float]
    feedID: Optional[int]
    action: Optional[str]
    message: Any
    hive_accname: Optional[str]

and

class V4VItem(BaseModel):
    r_hash: str
    add_index: int
    value: int
    settle_date: int
    utc_datetime: datetime = None
    localtime: datetime = None
    details: V4VDetails

The Background

For now I'm working on one very specific aspect. These new Podcasting 2.0 Certified RSS feeds which @threespeak generates include what is called a "Value Block". This looks like:

<podcast:value type="lightning" method="keysend" suggested="0.00000050000">
  <podcast:valueRecipient name="brianoflondon via 3Speak" address="0396693dee59afd67f178af392990d907d3a9679fa7ce00e806b8e373ff6b70bd8" type="node" split="99"></podcast:valueRecipient>
  <podcast:valueRecipient name="PodcastIndex" address="03ae9f91a0cb8ff43840e3c322c4c61f019d8c1c3cea15a25cfc425ac605e61a4a" type="node" fee="True" split="1"></podcast:valueRecipient>
</podcast:value>

When someone listens to a podcast with a block like that in the RSS on one of the new streaming sats enabled Podcasting 2.0 apps from newpodcastapps.com they can automatically send a small payment to the creator via the Lightning network. They can also send boosts and now messages too.

One day, perhaps, we'll have Hive as a native option in the system but for now the main dev effort has gone into the Lightning network. Unfortunately receiving Lightning is a non trivial option as it generally involves having a node on the Bitcoin network running 24/7.

So for now one Lightning Node is going to receive payments on behalf of 3speak video creators and forward those as Hive transfers along with any messages or notes that come in.


brianoflondon hive footer.png



0
0
0.000
3 comments
avatar
(Edited)

Yeah I'd try MySQLLite first, should be easier because it's an embedded database which means the DB engine runs as a part of the app. I think that would work better for your setups. Start simple and work your way up.

0
0
0.000
avatar

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

You distributed more than 67000 upvotes.
Your next target is to reach 68000 upvotes.

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

0
0
0.000