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.
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.
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.
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.
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.
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
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
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.
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
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
millix is available to download for windows, mac, and linux at millix.org/client.