Giter VIP home page Giter VIP logo

contenthashpy's Introduction

ContentHash for Python

version downloads license python

build coverage quality

Python implementation of EIP 1577 content hash.

Description

This is a simple package made for encoding and decoding content hashes has specified in the EIP 1577. This package will be useful for every Ethereum developer wanting to interact with EIP 1577 compliant ENS resolvers.

For JavaScript implementation, see pldespaigne/content-hash.

Installation

Requirements

ContentHash requires Python 3.8 or higher.

From PyPI

The recommended way to install ContentHash is from PyPI with PIP.

pip install content-hash

From Source

Alternatively, you can also install it from the source.

git clone https://github.com/filips123/ContentHashPy.git
cd ContentHashPy
pip install .

Usage

Supported Codecs

The following codecs are currently supported:

  • swarm
  • ipfs
  • ipns

Every other codec supported by multicodec will be encoded by default in utf-8. You can see the full list of the supported codecs here.

Getting Codec

You can use a get_codec function to get codec from the content hash.

It takes a content hash as a HEX string and returns the codec name. A content hash can be prefixed with a 0x, but it's not mandatory.

import content_hash

chash = 'bc037a716b746c776934666563766f367269'
codec = content_hash.get_codec(chash)

print(codec) # onion

Decoding

You can use a decode function to decode a content hash.

It takes a content hash as a HEX string and returns the decoded content as a string. A content hash can be prefixed with a 0x, but it's not mandatory.

import content_hash

chash = 'e3010170122029f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f'
value = content_hash.decode(chash)

print(value) # QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4

Encoding

You can use an encode function to encode a content hash.

It takes a supported codec as a string and a value as a string and returns the corresponding content hash as a HEX string. The output will not be prefixed with a 0x.

import content_hash

codec = 'swarm-ns'
value = 'd1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162'
chash = content_hash.encode(codec, value)

print(chash) # e40101701b20d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162

Creating Codecs

All supported codec profiles are available in content_hash/profiles/__init__.py, in PROFILES dictionary. You need to add a new profile there. You only need to add a new profile if your codec encoding and decoding are different from utf-8.

Each profile must have the same name as the corresponding codec in the multicodec library.

A profile must also have decode and encode function. They should be passed as a string containing the name of the module for required decode or encode. All such modules are available in content_hash/decodes and content_hash/encodes.

Each module name should describe it as much as possible. Its name can only contain valid characters for Python modules.

Each decode module must have a decode function. It must be a function that takes a bytes input and returns a str result.

Each encode module must have an encode function. It must be a function that takes a str input and returns a bytes result.

All inputs and outputs must be the same as in the JavaScript implementation. Multiple profiles can share the same decodes and encodes.

Versioning

This library uses SemVer for versioning. For the versions available, see the tags on this repository.

License

This library is licensed under the MIT license. See the LICENSE file for details.

contenthashpy's People

Contributors

filips123 avatar yabirgb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

contenthashpy's Issues

All dependencies are archived and deprecated. Let's upgrade

The py-cid dependency is unmaintained https://github.com/ipld/py-cid and archived.

This means that anyone trying to use this repo in a big project will end up hitting constraints due to the version restrictions. For example we at rotki just tried here: rotki/rotki#6259

And we hit this:

The conflict is caused by:
    scalecodec 1.2.2 depends on base58>=2.0.1
    substrate-interface 1.6.2 depends on base58<3 and >=1.0.3
    py-cid 0.3.0 depends on base58<2.0 and >=1.0.2

Looking here ipld/ipld#251 it seems that the new package to use is: https://github.com/pinnaculum/py-multiformats-cid ?

Would it be possible to update and bump the version?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.