Skip to content

Latest commit

 

History

History
167 lines (107 loc) · 6.08 KB

README.rst

File metadata and controls

167 lines (107 loc) · 6.08 KB

Polyglot: Bitcoin protocols made easy

Documentation: https://austecon.github.io/polyglot/ Powered by BitSV: https://github.com/AustEcon/bitsv

Powered by BitSV: https://github.com/AustEcon/bitsv

https://img.shields.io/travis/AustEcon/polyglot.svg?branch=master&style=flat-square https://img.shields.io/pypi/pyversions/bitsv.svg?style=flat-square https://img.shields.io/badge/license-MIT-orange.svg?style=flat-square

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.

The style of this library is 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.

  1. 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.

  1. 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).

  1. Basic Utilities

Some basic utilities are included for working with utxo splitting and extracting the media type / handling of the file based on the file path (with extension and content) - 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
  1. Easy Upload

You can also let polyglot pick whether to use the bcat or b:// protocol based on filesize, and handle utxo splitting automatically:

>>> uploader.upload_easy(path) #--> txid
  1. Command-line Script

Easy upload is also available as a command-line script:

$ polyglot-cli filename --testnet
Enter private key in wif format:
da5a1c7d4a36bfd175a67038234b6159e3c219b1eb409503324677ea89244e7c

Features

Currently Working:

1. Uploading

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":

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.

Credits

  • CoinGeek / nChain / Bitcoin Association for putting on an amazing hackathon from which this project was born!