首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使基本的DEX操作在SushiSwap中可靠?(SushiSwap的内部部件)

如何使基本的DEX操作在SushiSwap中可靠?(SushiSwap的内部部件)
EN

Ethereum用户
提问于 2022-02-22 12:56:48
回答 3查看 1K关注 0票数 1

作为一个想尝试并可能希望调整某些功能的开发人员,我将如何:

  • 创建流动性池
  • 创建一个农场池
  • 交换
  • 从流动性池中添加/转出

...in自身的坚固性。无论是在JS中还是在Python中,都不是用户。

怎么做?是否有全面的例子?

EN

回答 3

Ethereum用户

发布于 2022-08-06 14:25:22

您需要执行以下步骤。您还可以查看极小,以获得更少的使用智能契约的示例。

我们将使用uniswap,但sushiswap具有本质上相同的功能。

1.获取合同的接口

通过添加Sushiswap/Uniswap接口,包括您想要使用的函数,在代码中获取Sushiswap/Uniswap。对于交换,它可能如下所示:

代码语言:javascript
复制
interface IUniswapV2Router {
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
}

2.获取合同地址

假设您等待与Mainnet一起使用Uniswap路由器。

代码语言:javascript
复制
// Uniswap Mainnet ETH Router: "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D" 

注意:知道WETH地址也很好,因为大多数令牌都有一个WETH池。

3.使用输入参数

构建交换函数

根据uniswap abi / docs,您需要输入参数:

代码语言:javascript
复制
uint256 amountIn, // amount of tokenA in
uint256 amountOutMin, // minimum amount of tokenB you're expecting back 
address[] calldata path, // the path of trading you expect. 
// Like what pools are you going to interact with? For example:
// USDC -> WETH -> SOME_OBSCURE_TOKEN
// or
// DAI -> WETH
// This requires an understand of how the pools work
address to, // who will recieve the tokens
uint256 deadline // how long is this trade good for

然后,构建一个类似于这样的示例func:

代码语言:javascript
复制
address private constant UNISWAP_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

function swap(
        address _tokenIn,
        address _tokenOut,
        uint256 _amountIn,
        uint256 _amountOutMin,
        address _to
    ) external {
        IERC20(_tokenIn).transferFrom(msg.sender, address(this), _amountIn);
        IERC20(_tokenIn).approve(UNISWAP_V2_ROUTER, _amountIn);

        address[] memory path;
        if (_tokenIn == WETH || _tokenOut == WETH) {
            path = new address[](2);
            path[0] = _tokenIn;
            path[1] = _tokenOut;
        } else {
            path = new address[](3);
            path[0] = _tokenIn;
            path[1] = WETH;
            path[2] = _tokenOut;
        }

        IUniswapV2Router(UNISWAP_V2_ROUTER).swapExactTokensForTokens(
            _amountIn,
            _amountOutMin,
            path,
            _to,
            block.timestamp
        );
    }

你的合同现在可以进行互换了。

票数 2
EN

Ethereum用户

发布于 2022-02-22 14:30:10

您可以通过将请求作为JSON发送给Smart,同时通过EVM的任何实现连接到Ethereum。

事情可以进一步简化,通过使用开发工具,如“硬帽子”或“奶糖”。

无论如何,下面简要介绍一下它是如何发生的:

  1. 您可以通过使用: web3.js或ethers.js来连接到提供者,而不是编写您自己的JSON请求(这可能令人望而生畏)。
  2. 您可以通过节点即服务提供商进行连接,而不是以用户身份直接连接到节点或钱包。(如炼金术和因弗拉)。

例如,使用HardHat,通过npm安装它:

代码语言:javascript
复制
npm install --save-dev hardhat

按照说明安装依赖项。然后跑:

代码语言:javascript
复制
npx hardhat

选择,然后运行"Create a sample project"

代码语言:javascript
复制
npx hardhat run scripts/sample-script.js --network localhost

在示例代码(脚本/示例-script.js)中,您会发现这两行代码:

代码语言:javascript
复制
  const Greeter = await hre.ethers.getContractFactory("Greeter");
  const greeter = await Greeter.deploy("Hello, Hardhat!");

这基本上就是将智能契约部署到区块链的方式,但由于我们使用--网络本地主机运行它,所以我们将部署到由HardHat开箱即用的本地虚拟区块链。

部署后,您可以通过以下方法执行智能契约的功能:

代码语言:javascript
复制
let txn = await greeter.functionInSmartContract(param1,param2);

这是如果您有,在该源代码中,SushiSwap的合同代码是可用的,并且他们也在使用HardHat。因此,您可以将其部署到本地块链中,并通过脚本进行播放,也可以将其部署到testnet (您将需要来自炼金术或HardHat的API和HardHat中的配置)。

票数 1
EN

Ethereum用户

发布于 2022-08-06 13:36:04

为了执行您的研究,您可能想知道SushiSwap实际上是一个UniswapV2叉。因此,您可以在网上找到适用于Uniswap V2 (而不是V3,它是最新版本)的任何示例,包括编写良好的Uniswap V2文档,您可以找到这里。您正在寻找的所有答案都在“智能合同集成”部分下。

唯一的区别是您需要使用SushiSwap部署地址,而不是在苏希-夏普博士中找到的Uniswap部署地址。

然后,由您使用任何开发环境来部署您的智能契约,并执行您的事务/调用(如Remix IDE、Tru显或另一个答案所推荐的安全帽)。

最后,让您了解一下交换的样子,下面是UniswapV2 2上交换的一个完整的智能契约示例

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/122285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档