分类目录归档:技术文章

理解Uniswap V3

Uniswap V3

序言

我们知道Uniswap V3相比于V2有一个最大的变化就是:集中流动性(Concentrated Liquidity),它可以让LP选择在某段价格区间内提供流动性,从而大幅度提高资金使用效率,官方声称在0.1%的价格区间上最大能达到4000倍,不可谓不疯狂。为什么可以提高资金效率,原理也很简单:我们知道V2里面LP其实是在\([0, \infty]\) 上提供流动性,然而实际swap的价格波动大概率在一个很有限的范围内,因此实际用到的资金其实很少。集中新流动性这个想法听上去很好,但它是如何实现的呢?想要深入理解V3是如何实现的,强烈推荐先看下官方的白皮书:UniswapV3 WhitePaper,工程实现其实是非常复杂的,理解起来也不容易,这正是本文的目的所在。(另外,关于V3以及V2/V1的功能性介绍强烈推荐这篇文章:Uniswap v3 Explained – All You Need to Know

流动性

在V3里,当我们说添加流动性的时候,这个流动性到底指的是什么?

解释这点之前,我们先思考一个问题:既然LP可以选择在[……]

继续阅读

Uniswap V3 Impermanent Loss

公式推导

假设当前价格是\(P_c\),我们选择在区间\([a,b]\)提供流动性\(L\),那么所需要的真实资产\(x\)和\(y\)分别是:
$$
\begin{align*}
& x = L (\frac{1}{\sqrt P_c} – \frac{1}{\sqrt P_b}) \\
& y = L (\sqrt P_c – \sqrt P_a)
\end{align*}
$$

我们定义:

  • 不做LP而选择hold资产,那么hold资产的价值为:

$$
\begin{align*}
& V_{\text{hold}} = y + x * P
\end{align*}
$$

带入\(L\)和\(P_c\)可得:

$$
\begin{align*}
& V_{\text{hold}} = L (\sqrt P_c – \sqrt P_a) + L (\frac{1}{\sqrt P_c} -[……]

继续阅读

Neo4j使用APOC导出cypher语句

我们知道,neo4j community版本不支持把数据库导出成cypher语句进行增量更新,也就是所谓的Hot Backup,只能整库dump/load停机冷备份,这样不便于不同数据库之间融合。一个解决办法是,根据图谱模型,自己写一个脚本生成cypher语句,这样比较麻烦;另一个是使用第三方工具APOC导出成cypher语句。具体步骤如下:

安装APOC

  • 下载

    前往https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.4.0.3 下载 apoc-3.4.0.3-all.jar

  • 安装

    apoc-3.4.0.3-all.jar放到neo4j安装路径的plugins目录下,即 $NEO4J_HOME/plugins/。如果没有可执行权限的话(一般是有的),还需要如下命令:

  • 修改配置

    neo4j.conf文件中添加以下配置:

  • 重启neo4j

    [crayon-65[……]

    继续阅读

Neo4j如何表示带权重的关系

问题描述

我们知道图数据库可以用来表示节点之间的关系,大多数情况下,这个功能就足够使用了。但有时候我们希望知道这些关系的权重是怎样的,也就是说我们需要一个带权重的图(weighted graph)。比如,我们以上海周边城市图谱为例。先用如下cypher语句创建节点和关系:
CREATE (Shanghai:City {name:'上海'})
CREATE (Suzhou:City {name:'苏州'})
CREATE (Wuxi:City {name:'无锡'})
CREATE (Nanjing:City {name:'南京'})
CREATE (Ningbo:City {name:'宁波'})
CREATE (Shanghai)-[:Neighbor]->(Suzhou)
CREATE (Shanghai)-[:Neighbor]->(Wuxi)
CREATE (Shanghai)-[:Neighbor]->(Nanjing)
CREATE (Shanghai)-[:Neighbor]->(Ningbo)

可视化如下:
Imgur

解决方案

方法其实很简单:只要在关系[……]

继续阅读

关系抽取综述

什么是关系抽取?

信息抽取旨在从大规模非结构或半结构的自然语言文本中抽取结构化信息。关系抽取是其中的重要子任务之一,主要目的是从文本中识别实体并抽取实体之间的语义关系。比如:

International Business Machines Corporation (IBM or the company) was incorporated in the State of New York on June 16, 1911.

我们可以从上面这段文本中抽取出如下三元组(triples)关系:

  • Founding-year (IBM, 1911)
  • Founding-location (IBM, New York)

为什么要进行关系抽取?

  • 创建新的结构化知识库(knowledge base)并且增强现有知识库
  • 构建垂直领域知识图谱:医疗,化工,农业,教育等
  • 支持上层应用:问答,搜索,推理等。比如,对于这样一个提问:

    The granddaughter of which actor starred in the movie “E.T.”?

    可以用如下的关系推理表[……]

    继续阅读