Polyglot: Bitcoin protocols made easy.¶
Powered by BitSV: https://github.com/AustEcon/bitsv
Polyglot is designed to be Bitcoin SV’s most intuitive way to interact with a myriad of metanet protocols through python - a match made in heaven.
This library is heavily inspired by ofek’s library bit (bitsv’s predecessor)
Here are some examples:
Polyglot extends bitsv with the polyglot.Upload class, which inherits all of the properties of the bitsv.PrivateKey class such as checking balance, unspends, sending payments etc.
Upload an image < 100kb with b:// protocol (https://github.com/unwriter/B):
>>> import polyglot
>>> uploader = polyglot.Upload('your private key goes here in WIF format')
>>> # Optional parameters shown for completeness are populated from the file path by default
>>> uploader.upload_b(file, media_type=None, encoding=None, file_name=None)
See image here: https://bico.media/252ea6d5a4a4bfc956518403f6e5aa2ced1c2590d1120cd75341e0233d1b06e3
This works for a wide range of media types.
Upload large multimedia > 100kb with bcat:// protocol (https://bcat.bico.media/):
>>> file = "C:/Users/username/Pictures/BSV_banner.jpg""
>>> uploader.upload_bcat(file)
See image here: https://bico.media/be8b6a79e66934d3419265fbf3295d03e331a4c08098ae7f817a7592ffaedd2b
Please note: For BCAT protocol, it is very important to have an adequate number of “fresh” utxos with 1 confirmation to generate the parts. To do this see #3 Utilities (next).
Basic Utilities
Some basic utilities are included for working with utxo splitting and manually extracting the media type / handling of the file based on the file path (with extension) - to cover some potentially more advanced useage patterns of the B and BCAT protocols.
>>> uploader.get_media_type_for_file_name(file) #--> media_type
>>> uploader.get_encoding_for_file_name(file) #--> encoding,
>>> uploader.get_filename(path) #--> file_name.ext)
But additionally:
>>> uploader.get_largest_utxo(self) #--> largest utxo (for splitting)
>>> uploader.split_biggest_utxo(self) #--> splits utxo into 100000 satoshi amounts
>>> uploader.filter_utxos_for_bcat(self) #-- > filters utxos with 0 conf or too low amount to handle a 100kb tx
>>> get_file_ext(file) #--> .ext
>>> calculate_txid(rawtx) #--> txid
Features¶
Currently Working:¶
1. Uploading¶
B:// (for multimedia up to 100kb) - https://github.com/unwriter/B
BCAT:// (for multimedia up to 310mb uncompressed, 110GB with nested gzip) - https://bcat.bico.media/
2. UTXO management¶
Utilities for splitting / selecting UTXOs for a single private key - especially for use in BCAT protocol.
Bip32 level UTXO management is also planned
Planned:¶
1. HTML reference converter¶
A Class that will allow for easy conversion of metanet style referencing:
B:// (ref. by txid)
C:// (ref. by sha256 hash of content)
D:// (ref. by dynamic state - linked to identity system)
To localhost paths or mainstream internet urls as well as toggling it all back and forth.
This will allow quick iteration of building a web application on the local machine but also rapid conversion to b://, c:// d:// etc. referencing styles for deployment to the blockchain.
Would just need a dictionary of {path : B:// reference} pairs for example to be swapped back and forth. Many other features in mind (possibly for another repository).
2. Downloading¶
Should be able to specify content by:
B:// (ref. by txid)
C:// (ref. by sha256 hash of content)
D:// (ref. by dynamic state - linked to identity system)
Should work for content uploaded via BCAT
And have it be downloaded.
If it is a static html page then should optionally allow retreival of all referenced content to reconstruct the entire webpage on the local machine.
3. Identity protocols (Money Button, AIP etc.):¶
I would like to add a very simple interface for interacting with - AIP (https://github.com/BitcoinFiles/AUTHOR_IDENTITY_PROTOCOL) - other ID protocols (e.g. Ryan X. Charles of Money Button has been working hard on this area)
4. “Linking / mapping / database functions”:¶
MAP protocol for linking all kinds of different protocols together (powerful)
(maybe) A.N.N.E. protocol by Mr Scatmann - https://medium.com/@bsmith12251960/a-n-n-e-the-alpha-testing-begins-545f809c6129
Installation¶
Polyglot is distributed on PyPI as a universal wheel and is available on Linux/macOS
and Windows and supports Python 3.6+. pip
>= 8.1.2 is required.
$ pip install polyglot-bitcoin # pip3 if pip is Python 2 on your system.
User Guide¶
This section will tell you a little about the project, show how to install it, and will then walk you through how to use BitSV with many examples and explanations of best practices.
Credits¶
CoinGeek for putting on an amazing hackathon from which this project was born!
Donate¶
Made by $AustEcon (Handcash handle)
- Next topic: Intro