GithubHelp home page GithubHelp logo

zapzap's Introduction

ZapZap

WIP: Zap Any LP/tokens

todo

  • More pools and tokens/LPs
  • ETH UNI
  • Frontend interface

Zap in JavaScript(TypeScript)

// ============================== ZAP ==================================

// zapInToken
//   token1 -> token2  // need approve
//   token1 -> lp      // need approve

// zapIn
//   bnb -> token1  // payable
//   bnb -> lp      // payable

// zapOut
//   token1 -> bnb           // need approve
//   lp -> token1 + token2   // need approve

// deposit
//   bnb -> wbnb

// withdraw
//   wbnb -> bnb

// ============================== ZAP FUNCTIONS==================================

// zapInToken
//   token1 -> token2  // need approve
//   token1 -> lp      // need approve
export const zapInToken = async (
  accountAddress: string,
  fromAddress: string,
  fromAmount: BigNumber,
  toAddress: string
): Promise<string> => {
  const contract = getCachedContract(_env.ZapBSCAddress, ZapBSCABI);
  const data = contract.methods
    .zapInToken(fromAddress, fromAmount.toFixed(), toAddress)
    .encodeABI();
  const transactionId = await sendCommonTransaction(
    _env.ZapBSCAddress,
    accountAddress,
    data
  );
  return transactionId;
};

// zapIn
//   bnb -> token1  // payable
//   bnb -> lp      // payable
export const zapIn = async (
  accountAddress: string,
  bnbAmount: BigNumber,
  toAddress: string
): Promise<string> => {
  const contract = getCachedContract(_env.ZapBSCAddress, ZapBSCABI);
  const data = contract.methods.zapIn(toAddress).encodeABI();
  const transactionId = await sendCommonTransaction(
    _env.ZapBSCAddress,
    accountAddress,
    data,
    "0x" + bnbAmount.toString(16)
  );
  return transactionId;
};

// zapOut
//   lp -> token1 + token2   // need approve
//   token1 -> bnb           // need approve
export const zapOut = async (
  accountAddress: string,
  fromAddress: string,
  fromAmount: BigNumber
): Promise<string> => {
  const contract = getCachedContract(_env.ZapBSCAddress, ZapBSCABI);
  const data = contract.methods
    .zapOut(fromAddress, fromAmount.toFixed())
    .encodeABI();
  const transactionId = await sendCommonTransaction(
    _env.ZapBSCAddress,
    accountAddress,
    data
  );
  return transactionId;
};

export const depositBNBToWBNB = async (
  accountAddress: string,
  bnbAmount: BigNumber
): Promise<string> => {
  const contract = getCachedContract(_env.WBNBAddress, WBNBABI, "WBNB");
  const data = contract.methods.deposit().encodeABI();
  const transactionId = await sendCommonTransaction(
    _env.WBNBAddress,
    accountAddress,
    data,
    "0x" + bnbAmount.toString(16)
  );
  return transactionId;
};

export const withdrawWBNBToBNB = async (
  accountAddress: string,
  bnbAmount: BigNumber
): Promise<string> => {
  const contract = getCachedContract(_env.WBNBAddress, WBNBABI, "WBNB");
  const data = contract.methods.withdraw(bnbAmount.toFixed()).encodeABI();
  const transactionId = await sendCommonTransaction(
    _env.WBNBAddress,
    accountAddress,
    data
  );
  return transactionId;
};

export const zap = async (
  accountAddress: string,
  fromZapTokenName: string,
  toZapTokenName: string, // lp can be empty
  amount: BigNumber
): Promise<string> => {
  const fromZapToken = _env.zapTokens.find(z => z.name === fromZapTokenName);
  const toZapToken = _env.zapTokens.find(z => z.name === toZapTokenName);
  let txId = "";
  if (fromZapToken !== undefined) {
    if (fromZapToken.type === "lp") {
      // lp -> token1 + token2
      txId = await zapOut(accountAddress, fromZapToken.address, amount);
    } else if (toZapToken !== undefined) {
      if (fromZapToken.type === "bnb") {
        if (toZapTokenName === "WBNB") {
          // bnb -> wbnb
          txId = await depositBNBToWBNB(accountAddress, amount);
        } else {
          // bnb -> token1
          // bnb -> lp
          txId = await zapIn(accountAddress, amount, toZapToken.address);
        }
      }
      if (fromZapToken.type === "token") {
        if (toZapToken.type === "bnb") {
          if (fromZapTokenName === "WBNB") {
            // wbnb -> bnb
            txId = await withdrawWBNBToBNB(accountAddress, amount);
          } else {
            // token -> bnb
            txId = await zapOut(accountAddress, fromZapToken.address, amount);
          }
        } else {
          //   token1 -> token2
          //   token1 -> lp
          txId = await zapInToken(
            accountAddress,
            fromZapToken.address,
            amount,
            toZapToken.address
          );
        }
      }
    }
  }
  return txId;
};

zapzap's People

Contributors

wlchn avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.