从头开始讲述 Uniswap 的故事……
原文标题:《A short history of Uniswap》
撰文:Hayden Adams,Uniswap 创始人
译者:Evelyn
注:原文写于 2019 年 2 月 11 日
2018 年 11 月 2 日,Uniswap 公开发布并部署到以太坊主网。在一个激动人心、令人紧张的时刻,我向我的大约 200 多名粉丝发布了公告推文。
对于许多人来说,这是他们第一次听说这个项目。但对我来说,这是我多年以来的工作成果,并且这一路走来,我不经获得了许多的帮助,也收获了许多朋友。
Uniswap 不仅改变了我的生活,而且今天也是它的生日。为了庆祝这一天,我想在 Uniswap 生日博客系列的 V0 中从头开始讲述它的故事。
请大家继续关注 V1 和 V2,届时我将与大家共同探讨 Uniswap 上线以太坊主网的第一年经历,以及分享我们对 Uniswap 未来的计划。
2017 年 7 月 6 日,我从大学毕业后的第一份工作中(在西门子担任机械工程师)被解雇。那段时间我感十分到沮丧,也没有任何方向,于是我将我的情况告知了我的朋友 Karl Floersch,他当时正在以太坊基金会从事 Casper FFG 的工作。我们谈话的内容是这样的:
Hayden:我刚刚被解雇了 :(
Karl:恭喜你,这是发生在你身上最好的事情!!!机械工程已经是一个垂死的领域了。但以太坊是未来,并且你还处在该行业的早期阶段。现在,编写智能合约将是你的新命运!
Hayden:难道我不需要知道该如何编码吗?
Karl:不是的,编码很容易的。而且,反正现在还没有多少人了解如何写智能合约。不管是以太坊,股权证明,还是无信任计算,等等,都还是新兴领域。
Hayden:好吧......
Karl 抓住了我的低谷期,说服了我接受以太坊,并使之进入我的生活。我决定给它一个机会,并在接下来的两个月里学习了以太坊、Solidity 和 JavaScript 的基础知识。
为了扩大我的技能范围,我决定是时候在一个 "真正的 "项目上工作了。在 Karl 的建议下,我决定实现一个自动做市商,正如 Vitalik 在这个 reddit 帖子和这个博文中描述的那样。
从十月到十一月,我建立了一个概念证明,包括一个智能合约和我的第一个网站。该合约有一个单一的流动性提供者,并允许进行简单的交换。而这就是它的全部魅力:
Disclosure:该演示版与原始版本保持不变,只是我添加了一行代码'window.ethereum.enable()',以使其与 2019 年 MetaMask 一起工作。
建立 POC 是我在可编程货币的兔子洞里迈出的第一步。这是我一生中从事的最有趣的事情。而且,我甚至都不觉得这是工作。
慢慢的,我也发现了自动做市商的用户体验问题。当时,EtherDelta 是唯一一个具有吸引力的去中心化交易所,但它的用户体验感混乱且不直观。但是使用了我的演示后,不知为何感觉好了点。
在 Devcon 3 的演讲中,Karl 用我的 Uniswap 演示作为例子,说明了加密经济和以太坊上开源金融应用的力量。
视频链接:https://www.youtube.com/watch?v=-alrVUv6E24
到现在,我已经失业五个月了,但幸好在今年早些时候购买了一些加密货币,靠着它们,还能继续维持我的生活。如果按照我当时唯一的衡量标准来看的话,Uniswap 是成功的(我知道如何编写智能合约)。现在也许是时候继续前进,找一份工作了(如果有任何针对 Solidity-native 开发者的工作的话)。
然而,在 Karl 的 Devcon 演讲中的一位与会者(Pascal Van Hecke)联系到了我。他一直在密切关注着以太坊上自动做市商的进展,并表示有兴趣支持我的努力成果。他甚至给了我一笔钱,资助我接下来一个月的研究。然后我们就开始每周通话讨论进展。
Pascal 给我们带来了新的想法。然而,更重要的是,我们的通话给我的工作带来了一种结构感和责任感。Uniswap 有两个未解决的主要问题,对此,我是用的工程思维来解决:
至此,我已经完全被以太坊的无限潜力所吸引。以下这些也是我所关心的重要属性:
然而,在以太坊中有些东西却感觉不对劲。以太坊上的主要项目体现了它的一些特性,但很少有人会完全接受它们。中央故障点,可审查的应用程序,以及过于复杂的架构。DAPPs 的设计完全围绕着为那些显然不需要代币的用例提供代币的想法。
12 月,在 NYC Mesh 的创始人发表了一篇反加密的文章后,我和 Karl 一起参加了 NYC Mesh 聚会。现在以太坊出名了,Karl 被 Coindesk 的记者认出,并向他询问了关于 Meshnets 和加密货币之间的交叉点的事情。但 Karl 不想接受采访,所以他把记者引向了我。我喋喋不休地讲述了我几乎不理解的第二层解决方案,而这段采访也在一篇文章中被引用了:
B 计划?以太坊创新者正在重新为网络中立性而战 — CoinDesk
在纽约市一家灯光昏暗的酒吧举行的科技聚会(到目前为止,没有什么奇怪的地方)。但这次聚会的特殊之处在于,整个东村的其他地点都被连接到了该酒吧的 Wi-Fi 节点上,允许该地区的任何人不仅可以利用所有的信号,还可以访问只有网络上的其他人才能访问的网站。
Callil Capuozzo,一个从小学到高中的朋友,我已经有 6 年没有见到他了,他看到了这篇文章后联系了我。从那时起,他就在微软和谷歌担任设计师,最近在为 FOAM 做网站时,又深入研究了以太坊。
到 2018 年 1 月下旬,所有主要的智能合约问题都得到了解决。交易所合约可以通过使用内部流动性代币来跟踪每个 LP 的生成费用份额和基础抵押品,从而支持多个流动性供应商。一个工厂合约允许任何人添加对代币的支持。所有的代币都与 ETH 配对,允许它在一次交易中被用作任何东西的交换的中介。
在 Uniswap 智能合约完成更新后,我再次与 Callil 进行了联系并详细讨论了这个项目。他提出要帮助我做前端(因为现在的前端现在已经落后于合约了)。围绕着他的其他项目,在我那令人难以置信的糟糕的 React 代码库上,Callil 为 Uniswap 重新设计并建立了一个光滑的新界面。
几个星期以来,我的 React 代码已经十分糟糕了。幸运的是,我最近和一个大学时的朋友 Uciel Vilchis 重新联系上了。Uciel 刚从一个编码训练营出来(他是在我们共同的朋友 Karl Floersch 的建议下加入的)。
为了丰富自己的简历和经验,Uciel 同意重构 Uniswap 的前端代码库。
到 2018 年 3 月,我们三个人已经建立了一个功能齐全的 Uniswap 的演示。是的,当然,我把它挖了出来,并托管了它。它就在这里:
Disclosure:该演示与原始版本保持不变,除了我加入的一行代码「*window.ethereum.enable()*」,使其与 2019 年 MetaMask 一起工作。
到 2018 年 4 月,我已经失业了 10 个月。我赖以生存的加密货币已经下跌了 75% 以上,极大地缩减了我的个人跑道。尽管如此,我还是在最后一分钟买了一张去韩国首尔的机票。这是我 24 年来的第一次离开北美洲。部分是个人旅行,因为它的时间与 2018 年的 Deconomy 相吻合。
我试图在没有票的情况下进入会场,但被坚决拒绝。然而,Karl 才刚刚和以太坊基金会的其他成员一起到达。Karl 把我拉到一边,把我介绍给 Vitalik,他在过去已经和他讨论过了 Uniswap。我们的谈话是这样的:
Karl:这是我的朋友 Hayden,就是他制作了 Uniswap!
Vitalik:你好,很高兴认识你!它是开源的吗?
我:当然!
Vitalik:URL 是什么?
我:https://github.com/haydenadams/uniswap
Vitalik 在他的手机上阅读我的整个智能合约
Vitalik:你考虑过用 Vyper 来写吗?另外,你应该申请以太坊基金会的资助。
Vitalik 的想法没有让我失望。从首尔回来后,我立即花了两个星期来使用 Vyper 重新编写合约。当时没有像 Solidity 那样的指南或开发者工具,但我能够使用原始的 Casper FFG 合约作为参考。当时,这是我能找到的唯一的 Vyper 合约,除了核心 Vyper repo 中的简单例子。
到此为止,Karl 是我在加密世界中唯一的好朋友,但这很快就被改变了。就在离开之前,Karl 邀请我参加一个小型社交聚会。在那里,我认识了 Philip Daian、Dan Robinson 和 Andy Milenius,并和他们成为了朋友。除了是优秀的人之外,他们都将成为 Uniswap 成功的关键,并影响其未来的方向。
两周后,在 5 月,我飞往多伦多参加 Edcon 2018。这是我第一次参加以太坊会议,并通过了安全审查。我花了 3 天时间参加讲座,认识朋友,并演示了 Uniswap。我在加密世界的四个朋友都在那里,他们把我介绍给了其他很多人。我的加密世界社交网络也在不断扩大。
在我在 Edcon 结识的朋友中,Jinglan Wang 是十分值得一提的,因为她从那时起就是一个出色的顾问。
我第一次见到了 David Knott,一个前 Vyper 的开发者。我告诉他,我在 Vyper 中重新编写了 Uniswap。第二天早上 8 点,我被他的电话吵醒了。他告诉我,他将在两小时后发表关于 Vyper 的演讲,包括现场演示。Uniswap 是唯一一个用 Vyper 编写的 DAPP,他问我是否有兴趣代替他做这个演讲。
我解释说,我在两周前才刚刚学会 Vyper,并且从来没有在公开场合发言过,而且我也不知道自己通常在做什么。David 向我保证,这没有问题,在 Vyper 上学习两周,就足以公开发表权威性的讲话了。于是我做了第一次演讲:
视频链接:https://youtu.be/61PWFQpR1YQ
我和 Dan 坐同一班飞机回纽约。在整个行程中我们都在对 Uniswap 进行 gas 优化。当飞机降落的时候,Uniswap 的效率被提高了 30%。它现在是以太坊上 gas 效率最高的交易所,与之前相差很大。
2018 年的 Edcon 大会非常令人振奋。在我的 Uniswap 演示后,人们的反应不仅仅只是轻微的兴趣,更是理所当然的对它感到兴奋。他们似乎理解并分享了我想让它成为一个例子的价值观。我意识到以太坊的社区远远超出了 ICO 的范围。有一些人真正关心它的愿景,即一个无需许可、去中心化的金融系统。
我从 Edcon 回家的飞机直接降落在 NYC 区块链周上。在接下来的一周里,我参加了无数的活动和派对。一条推特出现在我的信源中。
他就住在离我步行 15 分钟的地方,我决定去看看。
Richard Burton 是一家以太坊钱包初创公司 Balance 的创始人。我给他看了我的演示后,他当即就想了解它是如何工作的。随后我们就进行了长时间的交谈。
在这之前,我认为我在 Uniswap 的角色主要是技术人员。当有人问起它是如何工作的时候,我常常先告诉他们背后的数学公式。但许多人都对此感到困惑。
Richard 帮助我理解这种现象,让我知道人们不理解 Uniswap 是我的问题,而不是他们的问题。开发人员只是大环境中的一小部分。如果我想让人们使用我的项目,我需要以他们的方式,或是以他们能理解的方式来谈论它。因此,社会问题将是 Uniswap 最大的挑战。
正是在这个时候,我决定了,Uniswap 就是我想要完成的事情,于是我规划了推出主网所需要的东西:
我之前提到的朋友 Phil 是一位区块链安全专家。在他的建议下(也在他的介绍下),我收到了 Runtime Verification 公司关于 Uniswap 的正式模型的报价,高水平的代码审查,以及智能合约的部分正式化验证。考虑到所有这些,我申请了以太坊基金会的资助,金额为 50,000 美元 + RV 的报价费用。
2018 年夏天拉开序幕,我痴迷于重构 Uniswap 的智能合约,编写白皮书,并在业余时间参加加密活动。然后在接下来的两个月里,我进行了面试,并等待基金会的回音。
我每天都在 Balance 办公室工作,Richard 和 Balance 的其他团队成员,Christian Baroni、Jin Ching 和 Mike Demerais 都对我很友好。在知道我的资金不足后,Richard 甚至慷慨地给了我一笔个人资助来支持我的努力。
我开始参加每周一次的聚会,称为「白板星期三(Whiteboard Wednesday)」,地点在 Balance 办公室。每周三的两个小时里,所有从事加密项目的人都被邀请来分享他们每周的进展。
我几乎每周都参加,不停地向不同的人群解释和再解释 Uniswap。我学会了如何在不同的场合谈论 Uniswap,并且很快就能向几乎所有人解释它。我甚至开始涉足加密推特。
同我和 Pascal 的通话类似,白板星期三给我的生活带来了一定程度的责任感。我不想连续两周没有进展地出现在大家面前。
随着夏天的到来,我花了越来越多的时间在 NYC MakerDAO 办公室,我之前提到的朋友 Andy 就是这里的 CTO。Maker 是一个去中心化的稳定币项目,读这篇文章的人都已经知道了,但为什么我还是要讲述它。我和 Maker 的一些人成了朋友,包括 Ashleigh Schapp(另一个对 Uniswap 来说很重要的朋友)。
在 Balance 和 Maker 的办公室里工作,这里不仅遇到了许多有趣的人,还为我提供了源源不断的项目和学习的机会。夏天很快就过去了。我的智能合约也已经优化到了我自己能做的程度。最后,在七月底,我收到了一封电子邮件。Uniswap 将获得以太坊基金会的资助!
以太坊基金会资助更新 —— 第三波
以太坊基金会资助更新;我们一直在努力工作,从而能够了解许多令人惊叹的人和项目,并非常兴奋地宣布以太坊基金会捐赠计划第三波的获奖者,我们以一篇博文拉开了 2018 年的序幕,以激发可扩展性研究的第一...
赠款到手后,我立即与 Runtime Verification 公司签订合同,对合约进行正式化和审计。并在与 RV 的 Daejun Park、Yi Zhang 和 Xiaohong Cheng 进行的一系列通话中,我详细介绍了 Uniswap 的机制和最重要的属性。
他们首先创建了一个正式的 Uniswap 模型。接下来,他们创建了一个代码规范,重新进行了数学运算,以尽量减少四舍五入的误差,并始终有利于流动性提供者而不是交易者。这项工作的结果可以在这里找到。
我修改了合约以适应该规范。接下来,RV 进行了一次高水平的代码审查,他们建议进行一些安全检查,并修复与一致性有关的问题,以及其他小的改动。这些改进的清单可以在这里找到。
最后,Uniswap 合约代码被冻结,RV 开始正式验证合约的实施是否符合规范的理想属性。这是整个过程中最漫长的一步。
在审计工作进行的同时,我聘请了 Callil 作为承包商,开始设计 Uniswap 交易界面的生产版本。演示界面运行良好,但对于成品来说感觉太混乱了。
RECIPEINT 🤦
Uniswap 还没有发布,但这已经不完全是个秘密。9 月,我被邀请在香港的区块链会议 ETHIS 的一个小组中发言。虽然从技术上讲,这不是我第一次在会议上发言,但这是我第一次被邀请这样做!
在香港,我赶上了 Vitalik,他看了看我最终完成的 Uniswap 的代码。他发现了一个连 Runtime Verification 都没有发现的错误。我把「recipient」错写成了「recipeint」,大约 20 次。
我还不小心撞见了以太坊基金会关于 ETH 2.0 的采访,并第一次成为了一个 meme 的主题。
这里有一个空白模板,如果其他人想尝试的话。
在香港之后,我在上海区块链周待了 3 天时间,用的是直通签证,然后才返回纽约。
在纽约的时候,我就决定要在布拉格的 Devcon 4 上发布 Uniswap,如果这在众人看来是可能的话。因为当时只还有 5 周的时间,这是我一生中最忙碌的 5 周。
随着正式验证的进行,最大的悬而未决的任务是在一个可以生产的代码库上实现 Callil 最新的前端设计。我向一家能在一个月内完成这项工作的承包公司发出了邀请,并被介绍给了 Kyokan 的 CEO Dan Tsui。谢谢 Rick Dudley 的介绍!
代码库几乎要完全从头开始重写。我雇用了一家承包公司,因为我认为在这么短的时间内按照我所希望的标准建立一个功能完整的 Uniswap 前端是需要一整个团队来进行的。相反,我得到了更好的东西,Jacky Chan,Kyokan 的工程副总裁。
由于 Jacky 对 Uniswap 几乎一无所知,于是我写了一份很长很详细的前端规范来帮助他加快进程,而 Callil 则为界面的每一部分都提供了非常详细的设计。在一个月的时间里,Jacky 几乎完全靠自己完成了 Uniswap 的启动界面。对于一些较小的部分,Kyokan 的 Kenny Tram 也有帮忙。
在 Devcon 之前的一周,我完成了文件和白皮书的编写。另外,RVs 正式验证工作的结果也出来了。没有发现任何问题!然而,运行时验证团队表达了一个担忧。Uniswap 没有被充分研究过重入攻击(re-entrancy attacks),这就是 DAO 黑客背后的问题。于是我向 Phil Daian 征求了些意见。
但是他现在非常忙,为了在 Devcon 4 上展示他的最新研究而做准备,但他还是答应在发布前查看智能合约的重入攻击。由于最后一分钟的性质,这当然是一个内部审计,不会有任何文字记录,结果也不会公开。
在这一切进行的同时,我与 Callil 进行了签约,为 Uniswap 设计一件衬衫,在会议上发放。我希望这个发布会成为一个值得纪念的时刻,人们可以参与其中,所以衬衫必须是高质量的(一件人们真正想穿的衬衫)。
在 Devcon 召开的前一周,Callil 与他的兄弟 Leander 合作完成了这个令人难以置信的设计:
为了按时完成,这些衬衫必须通过一种叫做丝印的工艺进行手工制作。制作丝网需要将近一周的时间,制作衬衫需要大约 8 个小时。
我在会议前一天飞到布拉格,开始确保所有的部件都已到位。我向 Phil 汇报了情况,他已经审查了大部分的代码,但还想再看一遍。
Callil 买了一张在会议第一天降落的机票,以留出尽可能多的时间用于生产。这段时间他都是通宵达旦地制造衬衫(和 Leander 一起)。
衬衫一完成,他就把它们装箱,直接去了机场,飞往布拉格。他从机场乘出租车直接到会议中心,和我一起把它们分发出去。
Devcon 开始了!我徘徊在在会议中心,向各位分发衬衫,并同所有听我讲话的人谈论 Uniswap,暗示发布会即将举行。
下午,Callil 和我第一次见到 Jacky 本人。在一些社交活动之后,我们开始工作,修复明显的错误,增加用户体验感。
第二天,我花了一半的时间在会议上闲逛和观看讲座。下午,我又一次与 Jacky 和 Callil 聚在一起。我们意识到,Uniswap 作为一个项目应该有一个独立于交易界面的登陆页面。于是那天起,我们从头开始建立了 uniswap.io。
最后,在 Devcon 的第三天,我收到了 Phil 的回复。据他所知,除非代币转移功能被专门设计成允许重新进入 Uniswap,否则不可能对 Uniswap 的交换合约进行重入攻击。
这感觉是一个可以接受的结果,如果一个代币被设计用来攻击 Uniswap,那么这个特定的代币的流动性就可能被盗。所有常规的 ERC20 代币都是安全的,不会被重入。
2018 年 11 月 2 日,Devcon 4 的最后一天,智能合约被部署到以太坊主网上。接下来,uniswap.io 和 app.uniswap.org/# 都被部署成功。最后,我联系了那些对于在启动时愿意提供流动性的人。
一个供应商向合约中存入了大约 30,000 美元,分成了 3 个代币。这使得约 100 美元的交换成为可能。因为没有其他事情可做了。
我花了大约一个小时,独自坐在一个豆袋上,写了又写,改了又改要发布的推文。幸运的是,我的朋友 Ashleigh 正好路过,帮我审阅了一下推文。
我点击了按钮,紧张但对未来的发展感到兴奋。随之而来的是巨大的支持、想法和合作,超出了我最疯狂的预期。
但这是 V1 的故事,是本系列的下一篇博文 :)
🦄
是 Vitalik 起的。我最初打算叫它 Unipeg —— 独角兽(unicorn)和飞马(pegasus)的混合体。
当 Karl 第一次告诉 Vitalik 这个项目时,他说:
「Unipeg?听起来更像是 Uniswap」
Gnosis 的 Alan Lu 是第一个在以太坊上构想出 x*y=k 做市商的人。
在以太坊建立一个去中心化的交易所
Gnosis 的 Martin Koppleman 向 Vitalik 讲述了这个想法。
Vitalik 看到了它的潜力,并开始公开发布相关信息。在他的网站上:
关于路径独立
假设有人走到你面前,开始向你感叹,他认为他已经找到了如何创造一个无限的自由能源的来源。他的计划是这样的。首先,你让一艘宇宙飞船上升到低地球轨道。
除了最近我们看到的其他一些去中心化交易所的范式,我想我将提供第三个选择。这个方案借用了 Nick Johnson 的一些想法,尽管做了很多简化,也非常类似于 gnosis 和 Augur 中的预测市场的运作方式。
我看到 MKR 市场、etherdelta 和其他市场现在的主要挑战是高价差,通常是 10% 甚至更高。其中很大一部分原因是做市商非常昂贵,因为创建一个订单和删除一个订单都需要 gas 费,即使订单从未「最终完成」。基于状态渠道的解决方案在理论上可以解决这个问题,但远远没有得到实施。我提出的解决方案是在去中心化的交易所背景下,使用预测市场中使用的 "链上自动做市商 "的风格。
这个机制看起来是这样的。市场包含一个内部状态,PRICE,它是当前的市场价格。它也会有两个参数,FEE 和 DEPTH。如果用户想购买 ORDER_AMOUNT 币,他们将把价格提高到 PRICE + ORDER_AMOUNT / DEPTH,并支付 ORDER_AMOUNT *(PRICE + ORDER_AMOUNT / DEPTH / 2)*(1 + FEE)。从本质上讲,这构成了在旧价格和新价格之间的每个价格点上购买一个无限数量的硬币。
请注意,这不是无风险的设置:它需要初始的硬币和 ETH 存款,如果价格跳动得太快,可能会被人利用。降低风险的一种方法是将订单放入 X 区块的队列中,当订单在队列中时,其他用户可以 "抢购 "该订单,提供比原始报价者更有利的价格;然而,这本身有其复杂性,可以留待以后的版本。
用户有能力对市场进行 "投资"。投资和撤资是成比例的:例如,如果市场目前包含 2000 个 ETH 和 400 个代币,那么投资者需要提供 2000 * p ETH 和 400 * p 代币,这将使 DEPTH 增加 1 + p 的系数,并使投资者获得 1 / (1 + p)"市场份额"。当投资者想要撤资时,他们有权拿出当时市场上任何 ETH 和代币的 1 / (1 + p) 份额出来(也许有几个小时的延迟,以防止撤资本身在崩溃期间受到前面的追捧)。理论上说,在大多数情况下,收取的费用将大于对做市商进行抢先交易攻击(front-running attacks)的任何损失,做市商的特定数学结构确保损失风险虽然存在,但严格受限,在任何情况下,投资者都是承担风险的一方。
上述方案的一个问题是,市场必须有一个 "最高价格",在这个价格之后,它就没有代币可卖了。一个解决方案是,在某些时候(例如,当 PRICE 超过最高价格的一半时),市场不是增加 DEPTH,而是简单地保持深度不变,持有代币,以增加市场可以出售的最高价格。市场甚至可以选择自动减少深度。一个更有力的解决方案是使深度本身与 1 / PRICE 成正比,并相应地改变公式,但如果价格太低,这将导致相反的问题;因此,在任何情况下都需要某种动态平衡。
从效率的角度来看,这个方案的优势在于它提供了非常低的点差,但同时只需要在实际交易中进行区块链交易,而不是下单或取消订单。该设计也比较容易理解和实施。
Edit:对于那些将来看这个主题的人来说,我想我要补充一个 Martin Koppelmann 建议的简化方案。该机制将是一个智能合约,它持有 T1 类型的 A 代币和 T2 类型的 B 代币,并保持 A*B=k 的不变性,对于某个常数 k(在人们可以投资的版本中,k 可以改变,但只在投资 / 提款交易中,而不是交易)。任何人都可以通过在 xy=k 曲线上选择一个新的点来购买或出售,并提供缺少的 A 代币,作为交换获得额外的 B 代币(或相反)。边际价格 "只是曲线 xy=k 的隐性导数,或 y/x。
以及 Phil Daian 所写的这篇文章的评论中:
Bancor 是有缺陷的
Bancor 上周刚刚进行了他们的首次代币发行(ICO),并在几个小时内筹集了创纪录的 1.44 亿美元。他们现在保持着人类历史上最大的众筹记录。我们不想过多地讨论这对当前 ICO 热潮的说明。
我创建了 Uniswap,这是今天以太坊上存在的 x*y=k 做市商的具体实现。
感谢 Jinglan Wang。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。