millix

address structure

overview

this document uses the phrase "very large". when considering the definition of "very large", imagine if every grain of sand on every beach on planet earth was its own planet. and each of those other planets contained as many grains of sands as planet earth. that's a smaller amount than "very large" as used in this document.

every node's wallet uses a private key ("your private key") to generate public addresses that millix can be sent to. the private key produces public addresses in the same order every time, which is predictable and repeatable. the first public address generated by the private key is called the prime address. a private key can generate a very large number of public addresses.

problem

without generating all the public addresses in advance, it is impossible to easily recognize whether an address belongs to your private key. without knowing whether an address belongs to your private key, the user interface can't show the balance for each address owned by the private key. additionally the node can't prune transactions without inadvertently pruning transactions that it was a recipient of.

when you combine a very large number of transaction addresses being presented to a node, and it having to compare each transaction address to a very large number of addresses that belong to it's private key, speed suffers.

solution

make every address self identifying with structured elements. be able to recognize where one element begins and ends to each element can be stripped and stored separately in an indexed database field. each public address is structured to contain the following three elements:

  • address_base: the unique compressed public key generated by the private key. an example value is: IZKBKTNXMHN5Z7CXK2Q2UE3LUK57IPDU.

  • address_version: the version of the address structure. this identifies the length (number of characters) of the address, the variety of potential characters used (letters, case, numbers, operator characters etc). address version also acts as a delimiter between the address and the key_identifier. the address version starts with 0 and ends with 0 with a version identifer in the middle. an example value indicating address version "a" is: 0a0.

  • key_identifier: the prime address generated by the wallet private key. the prime address is the first public address created by a private key. an example value is: YUNHVH3Q4RCT5BYJBTAOHNU6JHUF674P.

these elements are combined as [address_base][version][key_identifier]. an example using the values above is: IZKBKTNXMHN5Z7CXK2Q2UE3LUK57IPDU0a0YUNHVH3Q4RCT5BYJBTAOHNU6JHUF674P.

implementation

node A (recipient) provides an address for node B (sender) to send to. the address contains all three elements described above. node B sends an amount to the address. node B recognizes the version of the address and using regex to identify the structure, splits the address into three parts. these three parts are individually represented in the json payload for the transaction. the transaction json payload is broadcast or synced between peer nodes. each node can analyze the json and determine whether the key_identifier value in the json matches their private key's prime address.

when nodes store the transaction in their database tables, the three elements of the address are stored as separate values. this allows a node to quickly search for transactions belonging to it's private key. the node can efficiently reflect balances and prune records using this information.

limitation

the concern with using the prime address as the key_identifier is that multiple addresses can be associated together as belonging to the same private key. this has privacy implications. recognition of this limitation is addressed by the inclusion of the address version, both as a value and as a delimiter.

different techniques to identify the private key without using the prime address can be considered. if new methods are used, the address would self-identify the method with the address version value, and because the address version is also a delimiter, the length of the address and the identifier can be altered to save byte space or include more information. this structure is backwards and forwards compatible.

whitepaper

overview

millix is an open source cryptocurrency project. millix is fully decentralized, designed for simplicity, transacts at very high speed and very large scale.

work began on the project in spring of 2018 by a diverse group of developers and business professionals. their motivation to create a cryptocurrency protocol with the use case potential of millix came from their backgrounds building:

  • social network platforms

  • content management systems

  • e-commerce systems

  • data distribution systems

  • online financial services

  • communication services

  • affiliate marketing

  • manufacturing and logistics operations

  • gaming platforms

  • accounting and legal practices

fundamentally, there was a recognition that

“all activity benefits from trusted
transactions at scale”

which influenced the following set of first principles:

  • currencies should not be created with debt

  • currencies should operate at infinite scale

  • the cost of securing value can't exceed the value it secures

  • a currency's market value should be proportionate to its fundamental value

  • participants that increase fundamental value should be compensated

  • currencies should function without carrying the weight of previous transactions

  • currencies should work the same throughout the spectrum of transaction values

  • modern currencies should be at least as simple to use as primitive currencies

  • simplicity at the edge is only possible with equal simplicity in the foundation

to the extent there is an inverted correlation between utility and a store of value, millix is not intended to compete with the use case or feature set of blockchain projects. the utility that comes from scale and speed has been prioritized, leading to the principles and methodologies described above.

learn more: meet the millix team

case study: the speed and scale of millix

Developers: millix certification for technical and non-technical careers

economy

the total allocation of 9,000,000,000,000,000 mlx (nine quadrillion millix) were created in a genesis event on January 20th , 2020. millix is not being offered directly for sale. instead it will be distributed to participants who support and improve the millix ecosystem.

participants running millix software constantly receive millix for performing protocol related tasks that improve the millix ecosystem, such as storing transaction data and verifying transactions.

the economy is envisioned to allow any participant to incentivize any computing activity by any other participant via fees.

learn more: how can I earn, buy or sell millix?

use case: millix turns unused computer power into income

technology

unlike blockchain cryptocurrencies, millix is built on the logic of Directed Acyclic Graph (DAG) for transaction speed and capacity that increases as more transactions and users are added.

millix is original work and was not built on a copied code base of existing work. millix has no points of centralization. millix has no designed bottlenecks. millix has no hierarchy of participants of capabilities. millix data is natively sharded.

learn more: how does millix data sharding work

learn more: the millix toolbox of trust

learn more: how do transactions work

learn more: how do transactions get verified

learn more: how does the millix network work

developers: full API documentation and tutorials

roadmap

the initial millix road map consisted of the following themes:

  • base organization and functionality

  • connecting millix protocol to machines for large scale transactions

  • large scale transaction speed and storage

  • a community of earning

  • store and own your personal data

developers: contribute to the millix project

learn more: see the current millix road map with dates

get started

millix is available to download for windows, mac, and linux at millix.org/client.