0.1.8-test • Published 2 years ago

@lyrafinance/core v0.1.8-test

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

DEPRECATED - use @lyrafinance/protocol

Lyra - Smart Contracts

CI codecov

Documentation

Avalon documentation coming soon! Pre-Avalon Docs

Installation

$ yarn add @lyrafinance/protocol

Importing Lyra contracts

import {VaultAdapter} from '@lyrafinance/protocol/contracts/periphery/VaultAdapter.sol';

contract DeltaStrategy is VaultAdapter {
  // your structured product contract
}

Refer to the Lyra vaults example project on using the VaultsAdapter to connect your vault to Lyra.

Deploy a Lyra market in hardhat test

import { TestSystem } from '@lyrafinance/protocol'

describe('Integration Test', () => {
  before(async () => {
    let testSystem = await TestSystem.deploy(signer);
    await TestSystem.seed(signer, testSystem);
  });

  it('your integration test', async () => {
    ...
  });
});

Integrate with Lyra in hardhat test

  it('will pay out long calls', async () => {
      boardIds = await testSystem.optionMarket.getLiveBoards();
      strikeIds = await testSystem.optionMarket.getBoardStrikes(boardIds[0]);

      // Buy long call
      await testSystem.optionMarket.openPosition( {
        strikeId: strikeIds[0],
        positionId: 0,
        amount: toBN('1'),
        setCollateralTo: 0,
        iterations: 1,
        minTotalCost: 0,
        maxTotalCost: MAX_UINT,
        optionType: TestSystem.OptionType.LONG_CALL
      });

      // Wait till board expires
      await fastForward(MONTH_SEC);

      // Mock sETH price
      await TestSystem.mockPrice(testSystem, toBN("1500"), 'sETH');

      // Settle option and confirm payout
      await testSystem.optionMarket.settleExpiredBoard(boardIds[0]);
      const preBalance = await testSystem.snx.quoteAsset.balanceOf(signer.address);
      await testSystem.shortCollateral.settleOptions([strikeIds[0]]);
      const postBalance = await testSystem.snx.quoteAsset.balanceOf(signer.address);
      expect(postBalance.sub(preBalance)).to.eq(toBN('500'));
    });

Refer to the Lyra vaults example project on hardhat testing against a mock Lyra market.

Calling Lyra on kovan-ovm/mainnet-ovm

import { getMarketDeploys, getGlobalDeploys } from '@lyrafinance/protocol';

// get lyra address/abi/bytecode/more
let lyraMarket = getMarketDeploys('kovan-ovm', 'sETH');
let lyraGlobal = getGlobalDeploys('kovan-ovm');

const testFaucet = new Contract(lyraGlobal.TestFaucet.address, lyraGlobal.TestFaucet.abi, deployer);
const sUSD = new Contract(lyraGlobal.QuoteAsset.address, lyraGlobal.QuoteAsset.abi, deployer);
const optionMarket = new Contract(lyraMarket.OptionMarket.address, lyraMarket.OptionMarket.abi, deployer);

// call lyra (`execute` is any implementation of a contract call)
await execute(testFaucet, 'drip', [] as any, provider);
await execute(sUSD, 'approve', [optionMarket.address, MAX_UINT], provider);
await execute(optionMarket, 'openPosition', [tradeParams], provider);

Refer to the Lyra vaults example project for calling kovan/main-net Lyra markets.

Deploy Lyra locally

// deployLyraExample.ts
import { TestSystem } from '@lyrafinance/protocol';

async function main() {
  // 1. create local deployer and network
  const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');
  const privateKey = 'local eth address with ETH';

  // 2. optional settings to prevent errors
  provider.getGasPrice = async () => { return ethers.BigNumber.from('0'); };
  provider.estimateGas = async () => { return ethers.BigNumber.from(15000000); }
  const deployer = new ethers.Wallet(privateKey, provider);

  // 3. deploy and seed Lyra market
  let linkTracer = false;
  let exportAddresses = true;
  let localTestSystem = await TestSystem.deploy(deployer, linkTracer, exportAddresses);
  await TestSystem.seed(deployer, localTestSystem, overrides={});

  // 4. call local contracts
  await localTestSystem.optionMarket.openPosition({
    strikeId: 1;
    positionId: 0;
    optionType: TestSystem.OptionType.LONG_CALL;
    amount: toBN("1");
    setCollateralTo: toBN("0");
    iterations: 3;
    minTotalCost: toBN("0");
    maxTotalCost?: toBN("250");
  };)
$ yarn hardhat node 
$ yarn hardhat run deployLyraExample.ts // in a separate window

Can also use getGlobal/MarketDeploys on local network by setting exportAddresses=true

Refer to the Lyra vaults example project for creating a local Lyra market.

Advanced

For overriding specific parameters when using TestSystem.deploy() or TestSystem.seed()

const overrides: DeployOverrides = { 
  optionMarketParams: {
    ...lyraCore.defaultParams.optionMarketPerams, feePortionReserved: toBN('0.05')
  }
}

For easy debugging, set linkTracer = true to use hardhat-tracer to display all emitted events for every hardhat contract call (does not work in local/kovan/main-net yet)

let linkTracer=true;
let localTestSystem = await deployTestSystem(deployer, linkTracer);

Run your test scripts with the yarn test --logs to enable the plug-in.

Useful calls / common errors WIP

For local/hardhat:

  • testSystem.optionGreekCache(baordId) to prevent stale board reverts
  • testSystem.optionMarket.settleBoard(boardId) before settling individual positions
  • testSystem.mockPrice() to set mock prices
  • lyraEvm.fastForward(jumpTime)to jump to expiry/fast-forward
  • use DeployOverride and SeedOverride during testSystem.deploy/seed for setting custom market params such as standardSize, minDelta and etc.
0.1.6-test

2 years ago

0.1.2-alpha

2 years ago

0.1.7-test

2 years ago

0.1.5-test

2 years ago

0.1.8-test

2 years ago

0.1.4-test

2 years ago

0.1.3-test

2 years ago

0.1.1-alpha

2 years ago

0.1.0-alpha

2 years ago

0.0.44

2 years ago

0.0.43

2 years ago

0.0.42

2 years ago

0.0.41

2 years ago

0.0.40

2 years ago

0.0.39

2 years ago

0.0.38

2 years ago

0.0.37

2 years ago

0.0.36

2 years ago

0.0.35

2 years ago

0.0.34

2 years ago

0.0.33

2 years ago

0.0.32

2 years ago

0.0.31

2 years ago

0.0.30

2 years ago

0.0.29

2 years ago

0.0.28

2 years ago

0.0.27

2 years ago

0.0.26

2 years ago

0.0.25

2 years ago

0.0.24

2 years ago

0.0.23

2 years ago

0.0.21

2 years ago

0.0.20

2 years ago

0.0.19

2 years ago

0.0.18

2 years ago

0.0.17

2 years ago

0.0.16

2 years ago

0.0.15

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago