All Projects → loehnertz → Tanglestash

loehnertz / Tanglestash

Licence: MIT license
IOTA meets BitTorrent: An algorithm to persist any file onto the tangle of IOTA

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Tanglestash

IOTAtangle
IOTA Tangle Visualiser 🦔 http://tangle.glumb.de/?DARK_MODE=true
Stars: ✭ 55 (+19.57%)
Mutual labels:  iota, tangle
poc-ipfs
Demonstration of combining IOTA with IPFS for data storage.
Stars: ✭ 32 (-30.43%)
Mutual labels:  iota, tangle
IOTA-MAM.lib.js-PoC
Working Proof of Concept of IOTA's MAM technology using Live Nodes to push and receive messages inside tangle
Stars: ✭ 19 (-58.7%)
Mutual labels:  iota, tangle
SensorNode
SensorNode-client application for IOTA.
Stars: ✭ 35 (-23.91%)
Mutual labels:  iota, tangle
leaderboard-example
IOTA Proof of Concept Application example. With tutorial.
Stars: ✭ 64 (+39.13%)
Mutual labels:  iota, tangle
tangle-utils-website
A web site full of utilities for all things tangle, transaction and IOTA.
Stars: ✭ 19 (-58.7%)
Mutual labels:  iota, tangle
dcurl
Hardware-accelerated Multi-threaded IOTA PoW, drop-in replacement for ccurl
Stars: ✭ 39 (-15.22%)
Mutual labels:  iota, tangle
iota.lib.rb
Ruby Library for IOTA with core and wrapper api implementation.
Stars: ✭ 17 (-63.04%)
Mutual labels:  iota, tangle
iota-python
A Pure-Python implementation of IOTA node
Stars: ✭ 30 (-34.78%)
Mutual labels:  iota, tangle
meta-iota
OpenEmbedded layer for the IOTA Distributed Ledger
Stars: ✭ 41 (-10.87%)
Mutual labels:  iota, tangle
ipld-explorer-cli
🔎 Explore the IPLD directed acyclic graph with your keyboard
Stars: ✭ 22 (-52.17%)
Mutual labels:  dag
cubefs
CubeFS is a cloud native distributed storage platform.
Stars: ✭ 3,062 (+6556.52%)
Mutual labels:  distributed-storage
simple-torrent-android
A torrent client library for Android that utilizes frostwire-jlibtorrent. It supports sequential and simultaneous downloads.
Stars: ✭ 85 (+84.78%)
Mutual labels:  torrent
Customizable-Crypto-Currency-Dashboard-with-Chart
📺 A Dashboard with the price movements of the selected Cryptocurrencies 💹
Stars: ✭ 79 (+71.74%)
Mutual labels:  iota
scattersphere
Job Coordination API for Tasks
Stars: ✭ 30 (-34.78%)
Mutual labels:  dag
scrapeer
Essential PHP library that scrapes HTTP(S) and UDP trackers for torrent information.
Stars: ✭ 81 (+76.09%)
Mutual labels:  torrent
iota-mnemonic
Generate, restore IOTA seed from Bitcoin BIP39 mnemonic
Stars: ✭ 16 (-65.22%)
Mutual labels:  iota
torrent-webseed-creator
Webseeded torrent creator using GitHub Actions
Stars: ✭ 54 (+17.39%)
Mutual labels:  torrent
IMDb-Scout-Mod
Auto search for movie/series on torrent, usenet, ddl, subtitles, streaming, predb and other sites. Adds links to IMDb pages from hundreds various sites. Adds movies/series to Radarr/Sonarr. Adds external ratings from Metacritic, Rotten Tomatoes, Letterboxd, Douban, Allocine. Media Server indicators for Plex, Jellyfin, Emby. Dark theme/style for …
Stars: ✭ 177 (+284.78%)
Mutual labels:  torrent
bencode
PHP Bencode (BitTorrent) Encoder/Decoder
Stars: ✭ 19 (-58.7%)
Mutual labels:  torrent

license npm npm daviddm

Tanglestash

IOTA meets BitTorrent: An algorithm to persist any file onto the tangle of IOTA

Features

  • Persist any data onto the tangle of IOTA
  • Retrieve data that was persisted with this module beforehand
  • Optionally encrypt your data with a password (via AES)
  • Store a string or even a whole file without any prior conversion

GUI

Check out my other project tanglesta.sh here on GitHub which implements this module into a full-blown desktop app available for Windows, macOS and Linux.

Idea

I really like the idea of the tangle of IOTA and I think that this cryptocurrency has a bright future. I run a full node myself and want the idea to succeed. The more I messed with IOTA, the further this idea formed in my mind to use the 2187 trytes of each transactions signature to store any data on the decentralised tangle.

This module can persist any string or even files directly onto the tangle via creating a torrent-esque chain of transactions that reference other transactions holding the data while also referencing their direct predecessor in the chain. That way, this module can also retrieve any data that was persisted beforehand by just passing the 'entry-hash' into it, which is the first transaction hash of the created chain. The data can be optionally encrypted with a secret via AES so that even if someone gets hold of an 'entry-hash', the data will still be illegible. Data is stored as a Base64 string and files will be automatically encoded if passed into the algorithm as well as decoded if retrieved – no prior conversion of the file needed.
Here is a diagram of the data structure I came with for this project:

Diagram of the data structure

Disclaimer

I know that primarily the persisting to the tangle is painfully slow compared to a traditional HTTP upload.
Keep in mind though that this project is more of a proof-of-concept rather than a finished product.
The reason that it takes so long is mainly the current speed of the PoW, which might get faster in the future with new techniques.

Additionally, it is important to note that this module just works with Node.js version 8 owing to the fact that a dependency is currently not functioning under version 9.

Installation

NPM

npm install --save tanglestash

Yarn

yarn add tanglestash

Usage

First off, create a new instance of the modules class

let tanglestash = new Tanglestash(provider, datatype, seed);

with the following arguments:

  1. provider: String A URI of an IOTA full node
  2. datatype: String Either 'file' or 'string' based on the data that will later be used
  3. seed: String [Optional] An IOTA wallet seed; will be automatically generated if not passed here

readFromTangle

Retrieves data that was persisted onto the tangle in the past.

Input

tanglestash.readFromTangle(entryHash, secret)
  1. entryHash: String Any transaction hash that was output after successfully persisting data beforehand; called 'entry-hash'
  2. secret: String [Optional] The password the data was encrypted with; if any

Return Value

  1. Promise.<*> - A file buffer of the retrieved data or a string based on this.datatype

saveToTangle

Persists data onto the tangle.

Input

tanglestash.saveToTangle(data, secret)
  1. data: String The data as a string or file path based on this.datatype
  2. secret: String [Optional] The password the data should be encrypted with; if any

Return Value

  1. Promise.<string> - The last transaction hash of the created chain; called 'entry-hash'

getNewIotaAddress

Retrieves a new valid IOTA wallet address based on this.seed.

Input

tanglestash.getNewIotaAddress()

Return Value

  1. Promise.<string> - The retrieved wallet address

getAllMarkyEntries

Returns all the marky entries used to time the main processes. If you've never used marky before, learn more about it here.

Input

tanglestash.getAllMarkyEntries()

Return Value

  1. Array.<object> - All the timing entries created by marky

License

This project is licensed under the MIT license.
The included dynamic libraries are compiled from the ccurl repository licensed under MIT license.

Donations

If you like this module and want to support it, you can of course donate some IOTA 😊
QIFKUOEQBCEV9NKFWDBTQYBHLFFORLVKDQSYDSZQQMKTCBLBFDQMJWIOUDH9DLZXVKGNQGKLSAJCQQMEDESLCTHGZD

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].