From 1b21cc1e3dfcda4079cdaaa58fc6724a58f88fe1 Mon Sep 17 00:00:00 2001 From: C <22611640+cyberaurora@users.noreply.github.com> Date: Mon, 18 Oct 2021 21:56:40 +0800 Subject: [PATCH] init --- greenbook/fusotao-greenbook-draft.pdf | Bin 0 -> 93328 bytes greenbook/fusotao-greenbook.tex | 208 ++++++++++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100644 greenbook/fusotao-greenbook-draft.pdf create mode 100644 greenbook/fusotao-greenbook.tex diff --git a/greenbook/fusotao-greenbook-draft.pdf b/greenbook/fusotao-greenbook-draft.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dcd6c52357f8caaab6591fb65408771298a764dc GIT binary patch literal 93328 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 literal 0 HcmV?d00001 diff --git a/greenbook/fusotao-greenbook.tex b/greenbook/fusotao-greenbook.tex new file mode 100644 index 0000000..a9bdcb8 --- /dev/null +++ b/greenbook/fusotao-greenbook.tex @@ -0,0 +1,208 @@ +% Created 2021-10-18 Mon 21:42 +\documentclass[a4paper,12pt]{article} +\usepackage{graphicx} +\usepackage{grffile} +\usepackage{longtable} +\usepackage{wrapfig} +\usepackage{rotating} +\usepackage[normalem]{ulem} +\usepackage{amsmath} +\usepackage{textcomp} +\usepackage{amssymb} +\usepackage{capt-of} +\usepackage{hyperref} +\usepackage[margin=1.25in]{geometry} +\usepackage{fourier} +\usepackage{amsmath} +\usepackage[scaled]{helvet} +\linespread{1.10} +\setlength{\parindent}{0pt} % +\author{Fusotao Dev Team} +\date{\today} +\title{Fusotao Greenbook(Draft) \\ {\small v0.1.2}} +\hypersetup{ + pdfauthor={Fusotao Dev Team}, + pdftitle={Fusotao Greenbook}, + pdfkeywords={}, + pdfsubject={}, + pdfcreator={Emacs 27.2 (Org mode 9.5)}, + pdflang={English}} +\begin{document} + +\maketitle +\clearpage + + +\section{Introducation} +\label{sec:org0c6ec30} +Fusotao is a set of network protocols which are consisted of either a rule of data consistency or some certain constraints of data modification including not only a transfering constraint but also a matching verification rule. The matching verification sub-protocol, a.k.a Proof of Matching, is the main difference from other blockchains. + +\section{Matching System} +\label{sec:org1040c84} +Before start introducing Fusotao Protocol, let's take a look at matching system and consider why a matcher's outputs should be verified. + +Matching system is a trading platform enables user to pricing orders. The core component of a matching system is a data structure named orderbook which stores all orders according to the price and time, a placed order must follow the sequence to trade if price meets while the owner of an order would be ignored. Usually, to trade on a matching system, users may hande over their account ownership so the matcher can mutate the accounts. In another words, trading on a matcher relies on human trust. + +\newtheorem{theorem}{Rule} +Any data modifications shall obey the rules below: +\begin{theorem} +Mutable data shall not be shared, and shared data shall be immutable. +\end{theorem} +\begin{theorem} +There shall be only one associated mutator once data shared. +\end{theorem} + +Compared to the transfering transaction, the matcher as a mutator must modify the orderbook's state for each order rather than just update the states of sender and receiver. So, a matching system is a strict serial system which can be represented by the following procedure: +\begin{equation*} + E_{i} + Orderbook_{i-1} \Rightarrow Orderbook_{i} + R_{i} +\end{equation*} + +Consider an order placed. Let \(x\) be a price, \(y\) be an amount, \((x_{i}, y_{i})\) be the \(i_{th}\) maker by the order of price and time. +\begin{equation*} + mb_{i}=-y_{i} +\end{equation*} +\begin{equation*} + tb=\sum\limits_{i} y_{i} +\end{equation*} +\begin{equation*} + mq_{i}=-x_{i} \times y_{i} +\end{equation*} +\begin{equation*} + tq=\sum\limits_{i} x_{i} \times y_{i} +\end{equation*} +where +\begin{itemize} + \item $matches(x, x_{i})$ is $true$ +\end{itemize} + +Blockchain is another typical serial system whose key rule is determining the order of accepted incoming events, e.g. the Bitcoin network uses PoW algorithm and the Longest Chain rule to ensure the unique sequence of transactions. It seems nature to build a matching system on blockchain just like a plain transfer function. But unfortunately, due to the limitation of block capacity and high latency, it is not straightfoward to do it. + +An order must occupy 73 bytes at least: +\begin{equation*} +ID + Owner + Price + Unfilled + Direction = 73 bytes +\end{equation*} +where: +\begin{itemize} + \item $Price$ and $Unfilled$ are 128-bits fixed number + \item $ID$ indicates the order + \item $Owner$ is the pubkey of user + \item $Direction$ is 1-bit direction +\end{itemize} + +Imagine there are tens of thousands of orders in a single orderbook, it is not acceptable to store all orders in the blockchain state machine. But only keeping some essential data to validate the matching results is possible. In the next section, we will introduce how to validate the matching results without holding the whole orderbook. + +\section{Global States} +\label{sec:orga993e4b} +Sparse Merkle Tree is a full binary hash tree with fixed-depth which can be used for checking whether a node belongs to the tree. A node of Sparse Merkle Tree can be represented by the following function: +\begin{equation*} + \psi_{x} = \lambda(\psi_{xL}, \psi_{xR}), \text{ } height \ne 0 +\end{equation*} +\begin{equation*} + \psi_{x} = v, \text{ } height = 0 +\end{equation*} +where +\begin{itemize} + \item $x$ is the key of a node calculated by $\lambda(value) >> height$, e.g. $0x00...a82e$ +\end{itemize} +The capacity of a Sparse Merkle Tree depends on the hash function of the tree, e.g. a Sparse Merkle Tree using Sha256 has \(2^{256}\) leaf nodes with height=256(root excluded). +Given a data \(v\), we can simply verify whether it belongs to a certain tree by calculating \(height-1\) times hash function: + +\noindent\rule{\textwidth}{0.5pt} +\begin{verbatim} +let h = hash(v) +from 0 to 255: + do h = hash(h, sibling_of_h) +return h == root +\end{verbatim} + +\noindent\rule{\textwidth}{0.5pt} +It is quite simple for validators, but not good for provers. Storing all \(2^{257}\) (intermediate nodes included) nodes is unpractical for any storage system. Consider the distribution of a real Sparse Merkle Tree, most of the leaf nodes are empty, so are the itermediate nodes, that's why we call it sparse. In an empty plain Sparse Merkle Tree, a node at height \(h\) has a certain value: +\begin{equation*} + \psi_{h} = \lambda^{h}(\phi, \phi) +\end{equation*} +To avoid precalculate hash for each height, we can redefine the hash function like below: +\begin{equation*} + \lambda(\phi, \phi) = \phi +\end{equation*} +\begin{equation*} + \lambda(\alpha, \phi) = \lambda(\phi, \alpha) +\end{equation*} + +For data updates, once a leaf node inserted, the nodes along the path would be updated until root. Since we have the first optimization, we can infer that there will be a mount of redundant nodes along the path which can be omitted. e.g. Inserting a single node with key=0xff..ff, value=\(v\) into an empty Sparse Merkle Tree, the parent node key=0x7f..ff would be value=\(v\) either, so are the rest of the nodes along the path. + +Back to the matching procedure, since we've done an optimized Sparse Merkle Tree so can encode the orderbook into it and only store the root hash on chain and leave the whole tree to matchers. Once a matcher executes the \(i_{th}\) event off chain and submits the makers at \(i-1_{th}\), we can simply validate the results like above. + +Fusotao defines 2 types of key as leaf keys of Sparse Merkle Tree: +\begin{equation*} + orderbook(symbol) = \lambda(1, symbol) +\end{equation*} +\begin{equation*} + account(currency) = \lambda(0, currency) +\end{equation*} +where +\begin{itemize} + \item $currency$ is a 32-bits unsigned number represented currency + \item $symbol$ is consisted of $base$ currency and $quote$ currency +\end{itemize} + +There are no keys for encoding orders, instead, the sum of the orderbook's size is enough for validators except the condition that matcher doesn't pick the best makers. In the near future, we may add best price to each orderbook node to get rid of this. + +A matcher has a specific global state at the \(i_{th}\) event which can be verified by the leaf values: +\begin{equation*} + orderbook_{i} = ask_{i} << 128 + bid_{i} +\end{equation*} +\begin{equation*} + account_{i} = available_{i} << 128 + freezed_{i} +\end{equation*} +where +\begin{itemize} + \item all numerics are 128-bits represented unsigned fixed number with $scale$=18 +\end{itemize} + +\section{Proof of Matching} +\label{sec:orgd522d7b} +Given a user-signed event \(E_{i}\) and some merkle paths \(P_{(i-1, j)}\) at \(i-1\), a validator can verify it using matching procedure with well-known root hash \(S_{i-1}\) stored on chain: +\begin{eqnarray*} +\sum\limits_{j=0}^{n} belongs(P_{(i-1, j)}, S_{i-1}) = n\\ +P_{(i-1, j)} + E_{i} \Rightarrow S_{i} + P_{(i, j)} \\ +\sum\limits_{j=0}^{n} belongs(P_{(i, j)}, S_{i}) = n +\end{eqnarray*} + +A matcher must maintain a Sparse Merkle Tree and update it every time after event applied. Let \((x, y)\) be an ask-limit order's price and amount of symbol \((b/q)\) as \(i_{th}\) event, \((x_{j}, y_{j})\) be the \(j_{th}\) maker exists at \(i-1\), then the proof generated by matcher would be(fee not included): +\begin{equation*} + account(b)_{(i, j)}=account(b)_{(i-1,j)} + y_{j} << 128 +\end{equation*} +\begin{equation*} + account(q)_{(i, j)}=account(q)_{(i-1,j)} - x_{j} \times y_{j} +\end{equation*} +\begin{equation*} + account(b)_{i}=account(b)_{i-1} - \sum\limits_{j} y_{j} << 128 + y - \sum\limits_{j} y_{j} +\end{equation*} +\begin{equation*} + account(q)_{i}=account(q)_{i-1} + \sum\limits_{j} x_{j} \times y_{j} << 128 +\end{equation*} +\begin{equation*} + orderbook(b,q)_{i}=orderbook(b,q)_{i-1} + (y - \sum\limits_{j} y_{j}) << 128 + orderbook(b,q)_{i-1} - \sum\limits_{j} y_{j} +\end{equation*} + +Once verified, the accounts can be mutated on chain and update root hash to \(S_{i}\). +\section{Substrate Implementation \& Cross-Chain} +\label{sec:org991c934} +As an abstract protocol, PoM can either be built on existing blockchains as a series of contracts or run as an independent network. Consider the gas fee and latency, we decide to implement Fusotao protocol by substrate as a permissionless network which permit submitting proofs with zero-cost and low-latency. In this scenario, Fusotao network acts a decentralized infrastructure rather than a specific DEX. Thus, users may not handle over their accounts ownership to a matcher but just authorize the mutation rights. + +Substrate is a complete blockchain framework with a set of built-in tools including LevelDB storage, libp2p communication, etc. Especially, the cryptography of Substrate is fully retained in Fusotao runtime which makes it much reliable. In another word, the Sr25519(Schnorrkel/Ristretto x25519) keys for user singature and Ed25519 keys for node signature used in other Substrate-based networks can be recognized in Fusotao network with changing the first type byte of ss58check address to wildcard \(42\). The acceptable Fusotao ss58check address format is shown below: + +\begin{equation*} +address = base58(type+pubkey+checksum) +\end{equation*} + +The Fusotao runtime provides a set of core APIs abount PoM: +\begin{itemize} + \item $claim:$ Claim as a matcher and prover by staking 1\% TAOs of current issurance. + \item $prove:$ Submit the original user-signed order and associated proof. + \item $grant:$ Authorize a matcher some tokens without transfering ownership. + \item $revoke:$ Revoke authorization from a matcher. +\end{itemize} + +As an isolated network, it is necessay to bring existing assets to Fusotao. Inspired by NEAR Rainbow Bridge, Fusotao provides a trustless component bridging to NEAR mainnet called Avatar Messenger. Avatar Messenger is consisted of an off-chain relayer, a built-in pallet in Fusotao runtime as a light client of NEAR and a ownerless contract deployed on NEAR network as a light client of Fusotao. Fortunately, NEAR and Substrate both support Ed25519 signed block, bridging to NEAR is much easier than bridging to Ethereum. Because a finalized block will always be within the canonical chain, which means both clients needn't worry about chain fork and the relayer doesn't have to submit all blocks. +\end{document}