Giter VIP home page Giter VIP logo

min-know's People

Contributors

perama-v avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

min-know's Issues

Integrate IPFS

Problem

The data structures that min-know creates are distributable over IPFS by design (they are TODD-compliant). Currently the files are not shared over IPFS after a user obtains them.

Solution

Add the ability for a user to share over IPFS after obtaining the Chapters relevant to them.

Perhaps using: https://github.com/ferristseng/rust-ipfs-api to pin files to an existing local IPFS node.

Prevent type mismatches

Description

The library is generic and when initialising a database, the spec must be provided:

let db: Todd<AAISpec> = Todd::init(data_kind, DirNature::Sample)?;

However, you are allowed to pass in a mismatched data_kind:

// Should be this:
// let data_kind = DataKind::AddressAppearanceIndex(Network::default());

// But this is permitted:
let data_kind = DataKind::NameTags 

let db: Todd<AAISpec> = Todd::init(data_kind, DirNature::Sample)?;

Solution

Ideally, have the init() function derive the spec type from the data_kind enum to allow
omission of explicit typing.

let db = Todd::init(data_kind, DirNature::Sample)?;

Define source data format

Description

For a publisher to build/maintain the signatures database, min-know must ingest data from a raw source. The source must
have some format.

Some more background is previously explored here: https://perama-v.github.io/ethereum/protocol/poking/part_8

Resolution

Decide on a format by reviewing available raw data sources. For raw sources that do not already exist in this format, a
transformation may be applied prior to ingestion by min-know.

Existing databases

As previously explored: https://perama-v.github.io/ethereum/protocol/poking/part_8

Name Entries Interface Repo Database available en-masse API available (if no DB) Bytes per sig
Etherface 2.2 million https://www.etherface.io/statistics https://github.com/volsa/etherface ❌ ? 20
4byte 0.5-1 million 4byte.directory (~1M) https://github.com/ethereum-lists/4bytes (~500K) 4
Samczsun's Sigs ? https://sig.eth.samczsun.com/ ❌ ? 4
Topic0 7_800 - https://github.com/wmitsuda/topic0 N/A 20

Formats

The main consideration is file format and how collisions (two strings creating same 4byte signature) are represented.

Name Format Comment
Etherface (API) JSON -
4byte Flat files with single string Collisions (n=40/534574) separated with ";"
Samczsun's Sigs (API) JSON -
Topic0 Flat files with single string Collisions separated with ";"

Hence, flat files appears to be the best raw input format. The API-based databases could be transformed into this format if that
becomes relevant.

Parameter names

Some sources (topic0) separate out data in to with- and without-parameter name buckets. How should this be handled when ingesting raw data into min-know.

Solidity strips out the parameter names prior to signature computation. Thus a user cannot be sure if a given set of names
is correct. If they have the source code, they can (e.g., sourcify), but then they will not need the signature database (they can compute them from the ABI they have).

Leaning toward not distinguishing between them in the database, but undecided.

Open questions

  • Are there more sources available?
  • Of the sources listed that have an API but no database, can the format for this internal data be discovered to make min-know useful for them?
  • Are any of the sources interested in transforming their data with min-know in order to publish with the in a distributable form (e.g., according to the signatures spec here: https://github.com/perama-v/TODD/blob/main/example_specs/signatures.md)

Make the tool general purpose

Problem

The prototype is an implementation of the address appearance index specs. The specs are a specific instantiation of the more general time ordered distributable database framework. Some parts of the prototype would be common to other instantiations and could be shared.

Solution

Generalise the core functions of the prototype so that it could be used for converting and managing other databases.
Make the core functions operate on more abstract terms, following RecordKey/RecordValue terminology as per:
perama-v/TODD#2

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.