uniswap怎么没有兑换发送的按钮,uniswap怎么购买

  

  Uniswap是基于以太坊的去中心化数字加密货币交易协议。它为代币持有者提供了一个简洁的界面,以一个ERC20代币换取另一个代币,交易所需的燃气成本非常低。区块链开发者可以使用自己的ERC20令牌访问Uniswap,以增强其流动性。在本教程中,我们将学习如何将ERC20令牌连接到Uniswap协议,并在本教程的最后提供完整的实现源代码。   

  

  用熟悉的语言学习以太坊DApp开发:Java | PHP | Python |。NET/c# | Golang | node . js | Flutter/dart   

  

  1.Uniswap体系结构概述。首先需要了解Uniswap协议的架构,主要包括两类组件——工厂契约和令牌交换契约:   

  

     

  

  工厂合约/Factory Contract用于管理令牌交换合同。它负责创建新的令牌交换合同,并维护从令牌地址到令牌交换合同实例的映射表。每个ERC20令牌都有自己的代币交换合约/Exchange Contract,负责两个令牌的交换。   

  

  从开发人员的角度来看,将ERC20令牌接入Uniswap协议的过程如下:   

  

  将ERC20令牌协议部署到以太网,使用Uniswap的工厂合约为之前部署的ERC20令牌创建一个交换合约,使用交换合约将您的ERC20令牌与其他令牌进行交换。每份令牌交换合同只能用于与以太坊交换相应的ERC20令牌。要完成两个不同的ERC20令牌的交换,Uniswap中间用以太坊作为桥梁,比如先把令牌A换成以太坊,再把令牌B换成以太坊。   

  

     

  

  值得指出的是,Uniswap协议目前只支持以太坊,ERC20令牌的交换只能在同一个以太坊网络上实现。   

  

  出于演示目的,在本教程中,我们使用Rinkeby测试网络来学习访问过程,这也适用于主网络。教程中的演示代码是使用以下软件栈完成的:Truffle v5.0.3,Node.js v8.11.1,Web3.js-1.0。   

  

  2.ERC20令牌合同的开发和部署。首先,让我们编写一个简单的用于测试的ERC20令牌契约:   

  

     

  

  保存后,使用truffle compile命令编译上面的契约:   

  

  $ truffle compile然后修改truffle-config.js以连接到Rinkeby网络:   

  

  rinkeby : { provider : function(){ return new HDWalletProvider(process . env . NME moric,' https://rinkeby.infura.io/') },network_id: '4 ',WebSockets : true,gas 3360 600000,gas price 3360 1000000 },最后使用truffle deploy命令将合同部署到Rinkeby测试网络:   

  

  $ truffle部署-网络rinkeby.2_token.js=================替换' Token' -事务has :0x d 17 a 0 DC 69 f 54 f 78 aa 9a 1 58682 C5 BD 24 c 281 de 959 E3 a 7545 ECB 7d 3 c 60 cdadeab blocks 3360 0 seconds : 12合同地址33600x cc 4d 8 ecfa 6 a5 C1 a 84853 EC 5c 5 c 0 c 08 cc 54 CB 177 a6 a帐户3336 00x 0e 364   

acts ------------------------------------- > Total cost: 0.01214459 ETH可以看到我们的ERC20代币部署到了Rinkeby测试网的以下地址,当然 你的结果应该和这个不一样:

  

0xCC4d8eCFa6a5c1a84853EC5c0c08Cc54Cb177a6A3、在Uniswap中创建代币交换合约Uniswap的工厂合约已经由官方部署到Rinkeby测试网的如下地址:

  

0xf5d915570bc477f9b8d6c0e980aa81757a3aac36工厂合约/Factory Contract 的ABI和源代码可以在Etherscan上查看:

  

  

为了创建我们的ERC20代币对应的Uniswap代币交换合约,需要调用 Uniswap部署的工厂合约的createExchange()方法。例如,在下面 的代码中我们使用Infura来发送一个对该方法调用的签名交易:

  

  

用node.js运行上述代码即可:

  

$ node 1.create.exchange.js运行结果类似如下内容:

  

  

注意,如果运行时提示错误如下错误信息:

  

Node error:{"code":-32601, "message": "The method eth_sendTransaction does not exist/is not available"},表示Infura不支持eth_sendTransaction方法,也就是说你只能向 Infura提交签名交易,而无法要求Infura帮你签名。

  

现在我们的ERC20代币的交换合约已经在Uniswap内部创建完成了。 现在我们可以使用如下命令来查询这个合约的部署地址:

  

script/2.get.exchange.address.js输出结果如下:

  

  

同样使用node.js运行:

  

$ node script/2.get.exchange.address.jsthe exchange address for ERC20 token is: 0x416F1Ac032D1eEE743b18296aB958743B1E61E81这表明我们已经为自己的ERC20代币合约成功创建了Uniswap交换协议。

  

4、为Uniswap代币交换协议添加流动性现在我们可以访问代币交换协议了。下面是我们要用到的重要的合约地址:

  

我们的ERC20代币合约地址: 0xCC4d8eCFa6a5c1a84853EC5c0c08Cc54Cb177a6AUniswap交换合约地址:0x416F1Ac032D1eEE743b18296aB958743B1E61E81Uniswap代币交换合约需要预存一些代币以便提供初始的流动性。为此,我们首先需要 授权代币交换合约可以操作我们钱包中的ERC20代币,然后再调用代币交换合约的 addLiquidity()方法同时存入ERC20代币和以太币:

  

token.approve(exchange_address, TOKEN_RESERVE)exchange.addLiquidity(0, TOKEN_RESERVE, DEADLINE, transact={‘value’: ETH_RESERVE})首先,我们运行命令$node cript/3.approve.exchange.js来授权代币交换合约存取 我们的钱包地址上的ERC20代币:

  

  

接下来,我们运行命令$node script/4.add.liquidity.js向代币交换合约 存入15个ERC20代币和0.1个以太币以便提供初始的流动性:

  

  

可以用etherscan来检查验证合约的账户余额:

  

  

5、用Uniswap实现去中心化交易现在我们可以用Uniswap来实现以太币/ERC20代币或者两种ERC20代币之间的交换了。

  

在第一个测试中,我们将以太币发送给Uniswap代币交换合约,这会 自动转换为ERC20代币,你可以执行命令$node script/5.eth2erc20.swap.js 进行测试,代码如下:

  

  

在Etherscan上可以看到已经存入Uniswap代币交换合约0.05个以太币,并且 转化为5个ERC20代币发送回买家的钱包:

  

  

在第二个测试中,我们尝试交换两种不同的ERC20代币,例如将LINK代币 转化为我们部署的ERC20代币:

  

  

在上面的代码中,我们存入10个LINK代币并得到0.0015个自己部署的代币:

  

  

6、结论在这个教程中,我们学习了如何创建一个ERC20代币并将其接入Uniswap去中心化 交换协议以便增减这个代币的流动性。你可以在这里下载完整的实验代码: https://github.com/oceanprotocol/Nautilus/tree/master/3-uniswap 。

  

原文链接:http://blog.hubwiz.com/2020/06/28/uniswap-developer-guide/

相关文章