All Projects → feeless → Feeless

feeless / Feeless

Licence: other
⋰·⋰ Feeless is a Nano cryptocurrency node, wallet, tools, and Rust crate.

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Feeless

Bismuth
[Migrated] The first Python blockchain protocol and platform
Stars: ✭ 186 (+165.71%)
Mutual labels:  bitcoin, cryptocurrency, decentralized
Unstoppable Wallet Android
A secure and decentralized Bitcoin and other cryptocurrency wallet for Android phones. Supports Bitcoin, Ethereum, EOS, Binance Chain, Bitcoin Cash, DASH, ...
Stars: ✭ 165 (+135.71%)
Mutual labels:  bitcoin, cryptocurrency, decentralized
Unstoppable Wallet Ios
A secure and decentralized Bitcoin and other cryptocurrency wallet for iPhone. Supports Bitcoin, Ethereum, EOS, Binance Chain, Bitcoin Cash, DASH, ...
Stars: ✭ 180 (+157.14%)
Mutual labels:  bitcoin, cryptocurrency, decentralized
Adamant Im
ADAMANT Decentralized Messenger. Progressive Web Application (PWA)
Stars: ✭ 202 (+188.57%)
Mutual labels:  bitcoin, cryptocurrency, decentralized
Lbrycrd
The blockchain that provides the digital content namespace for the LBRY protocol
Stars: ✭ 2,756 (+3837.14%)
Mutual labels:  bitcoin, cryptocurrency, decentralized
Awesome Blockchain
Curated list of blockchain services and exchanges 🔥🏦🔥🏦🔥🏦🔥
Stars: ✭ 604 (+762.86%)
Mutual labels:  bitcoin, cryptocurrency, money
Ethlist
The Comprehensive Ethereum Reading List
Stars: ✭ 3,576 (+5008.57%)
Mutual labels:  bitcoin, cryptocurrency, decentralized
Lbry Sdk
The LBRY SDK for building decentralized, censorship resistant, monetized, digital content apps.
Stars: ✭ 7,169 (+10141.43%)
Mutual labels:  bitcoin, cryptocurrency, decentralized
Openapi
DragonEx OpenAPI
Stars: ✭ 54 (-22.86%)
Mutual labels:  bitcoin, cryptocurrency
Cryptolights
Live visualisation of blockchain transactions for popular cryptocurrencies
Stars: ✭ 54 (-22.86%)
Mutual labels:  bitcoin, cryptocurrency
Keys
🔑 Cryptocurrency private keys
Stars: ✭ 71 (+1.43%)
Mutual labels:  bitcoin, cryptocurrency
Cryptocurrency Dashboard
Crypto Currency Dashboard Using Twitter 🐦 And Coinmarketcap 🚀 API
Stars: ✭ 54 (-22.86%)
Mutual labels:  bitcoin, cryptocurrency
Straks
A new decentralised, open source, community driven digital currency, focusing on e-commerce utility
Stars: ✭ 53 (-24.29%)
Mutual labels:  bitcoin, cryptocurrency
Crypto Coin Alerts
An application that let you set alerts for the prices of several cryptocurrencies
Stars: ✭ 72 (+2.86%)
Mutual labels:  bitcoin, cryptocurrency
Bitcoinaddress
Bitcoin Wallet Address Generator
Stars: ✭ 52 (-25.71%)
Mutual labels:  bitcoin, cryptocurrency
Bitcoin.org
Bitcoin.org Website
Stars: ✭ 1,090 (+1457.14%)
Mutual labels:  bitcoin, cryptocurrency
Arbitrader
A market neutral cryptocurrency trading bot.
Stars: ✭ 66 (-5.71%)
Mutual labels:  bitcoin, cryptocurrency
Jesse
An advanced crypto trading bot written in Python
Stars: ✭ 1,038 (+1382.86%)
Mutual labels:  bitcoin, cryptocurrency
Qtum
Qtum Core Wallet
Stars: ✭ 1,080 (+1442.86%)
Mutual labels:  bitcoin, cryptocurrency
Bitcoin Elixir
Bitcoin tools and full node implementation in Elixir.
Stars: ✭ 70 (+0%)
Mutual labels:  bitcoin, cryptocurrency

⋰·⋰ Feeless

Crates.io docs.rs GitHub last commit MIT OR Apache-2.0 Licence

What is Feeless?

Feeless is a Nano cryptocurrency node, wallet, tools, and Rust crate. This is not the official project for Nano, only an implementation written in Rust. The official Nano node implementation lives here.

🚸 This is a work in progress. The API will probably change without notice until v0.2. 🚸

I decided to start this project as a personal adventure of understanding Nano. I give no promises about my future motivation to complete this project 🤐.

Working Features

Feature Progress Notes
Rust crate 80% See the documentation for usage and examples. Please suggest if a feature is missing.
CLI tool 60% Seeds, phrases, public, private, addresses, parse a wireshark network capture1.
Wallet 0% No wallet code yet, but should be quick to implement.
Node 20% Can connect and communicate. No voting, storage, chain validation, etc.

1. feeless pcap [file.pcapng] can dump a capture file and dissect the packets. There are additional arguments you can see with --help. To do this as successfully as possible, capture with Wireshark, set the filter to nano , File -> Export Specified Packets, make sure Displayed is selected.

What is Nano?

Nano is digital money that significantly improves on Bitcoin and other cryptocurrencies.

The main features of Nano are:

  • No transaction fees.

  • Extremely fast to send money—less than 1 second for 100% confirmation.

    Bitcoin takes 10 minutes on average for ~80%1 confirmation. Nano is more asynchronous than Bitcoin—individual transactions are voted on separately from the rest of the network.
  • Highly decentralized.

    Using the Nakamoto coefficient measurement, it is more decentralized than Bitcoin2 3.

  • No inflation.

  • Green—Massively less energy use than Bitcoin.

For more information on what Nano is, see the Nano documentation: https://docs.nano.org/what-is-nano/overview/

Nano is also known as: Nano cryptocurrency, Nano coin, RaiBlocks.

1. The Bitcoin white paper, under section 11 "Calculations" explains there's a ~80% chance for an attacker with 10% mining power to overtake the longest chain. https://bitcoin.org/bitcoin.pdf 2. Measuring Decentralization in Bitcoin and Ethereum using Multiple Metrics and Granularities https://arxiv.org/pdf/2101.10699.pdf 3. List of representative nodes showing a Nakamoto coefficient of 8 at the time of writing (2021-02) https://nanocharts.info/

Installation

Currently the only way to do this is to install Rust, then run cargo install feeless. This will create a file in your rust's bin directory, or to specify a location run cargo install feeless --root [install-dir].

Goals

General

  • Correctness before performance.

Rust crate

  • A complete library that a Rust developer can use to handle wallets, keys, blocks, signing, proof of work, etc.

Tools

  • A command line tool for particular actions, e.g. generating seeds, conversions between keys, addresses, etc.
  • A command line client for the official Nano RPC server.

Nano node

  • A functional Nano node with business logic from the official C++ implementation.
  • Correct rebroadcasting rules
  • Representative voting
  • Bootstrapping
  • It has to perform well enough to help the network. I don't want Nano to slow down if people start using this! 🤦‍♀️

Non-goals

  • Only support protocol v18+ (Maybe only v19+ depending on timing)
  • No UDP support
  • No user interface

Task list

A medium term task list:

  • [x] Seeds
    • [x] Mnemonic (word list) seed generation/parsing (BIP39)
    • [x] Derive keys from mnemonic (BIP33)
    • [x] Hex seeds
  • [x] Keys (ed25519/blake2b)
    • [x] Private keys
    • [x] Public keys
    • [x] Nano addresses
      • [x] Validation
      • [x] Parsing
      • [x] Conversion to/from public keys
  • [x] Nano amount conversions
    • [x] raw
    • [x] nano
    • [x] Mnano/NANO
  • [x] Proof of work (core)
    • [x] Verification against a threshold
    • [x] Generation
    • [x] Dynamic threshold
  • [ ] Blocks
    • [x] Hashing
    • [ ] Work
    • [x] State blocks
    • [ ] <v18 blocks?
  • [ ] Packet dissector
    • [x] Parse pcap file
    • [x] Dump some message types to console
    • [ ] Mark this done when all packets are decoded successfully (see below)
  • [ ] Node
    • [ ] Configuration
      • [x] Initial command line interface
      • [ ] Network
      • [ ] Database
      • [ ] ...
    • [ ] Networks
      • [x] Live (Don't worry, I'm only connecting to my own node at the moment!)
      • [ ] Test
      • [ ] Beta
    • [ ] Bootstrap peer connection (peering.nano.org)
    • [x] Validate given peer network
    • [ ] Validate given peer versions
    • [ ] Multiple peer connectivity (currently only connects to one peer)
      • [ ] Configurable maximum peer limit
    • [x] Header parsing
      • [x] Network
      • [x] Versions
      • [x] Extensions
        • [x] Handshake query/response flags
        • [x] Count
        • [x] Block type
        • [ ] Telemetry size
        • [ ] Extended params present
    • [ ] Logic
      • [ ] Rebroadcasting
      • [ ] Representatives
      • [ ] Publish retries (difficulty changes)
      • [ ] Respond to telemetry request
      • [ ] ...
    • [ ] Messages
      • [ ] Node ID Handshake
        • [x] Serialize (TODO: needs small refactor)
        • [x] Deserialize
        • [x] Send cookie
        • [ ] Cookie/peer store and logic
        • [x] Validate response
        • [x] Validate signature
      • [ ] Confirm Req
        • [ ] Serialize
        • [x] Deserialize
          • [x] Hash pairs
          • [x] Block selector
        • [ ] Handle response
      • [ ] Confirm Ack
        • [ ] Serialize
        • [ ] Deserialize
          • [x] Vote by hash
          • [ ] Block
        • [x] Validate signature
      • [ ] Keepalive
        • [ ] Serialize
        • [x] Deserialize
      • [ ] Publish
        • [ ] Serialize
        • [x] Deserialize
          • [x] State blocks
          • [ ] Other blocks
      • [ ] Bulk pull
      • [ ] Bulk pull account
      • [ ] Bulk pull blocks
      • [ ] Bulk push
      • [x] Telemetry Req
        • [x] Serialize
        • [x] Deserialize
      • [ ] Telemetry Ack
        • [ ] Serialize
        • [x] Deserialize
          • [x] Most fields
          • [ ] Timestamp
          • [ ] Active difficulty
        • [ ] Validate signature
      • [ ] Frontier Req
        • [ ] Serialize
        • [x] Deserialize
    • [ ] Storage
      • [x] Basic KV store to file
      • [x] Basic cookie/peer storage
      • [ ] Peers
      • [ ] Blocks
      • [ ] ...
    • [ ] RPC
  • [ ] Rust
    • [ ] Ask around for a code review
    • [ ] Use either zerocopy or make all core types zero-copy with storing [u8] and methods as accessors. zerocopy did work for most things when I tried but had problems with enums. Might revisit.
    • [ ] Use thiserror instead of anyhow in certain places.
    • [ ] Github actions CI (including cargo clippy)
  • [ ] Future things
    • [ ] Fast bootstrapping related to the user's wallet
    • [ ] Performance
      • [ ] Automated comparison
    • [ ] Proof of work
      • [ ] Server
      • [ ] GPU
    • [ ] WASM

Credits and references

Other implementations

License

Licensed under either of these at your option:

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

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