npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@stargatefinance/stg-evm-v2

v1.0.16

Published

Stargate is a fully composable liquidity transport protocol that lives at the heart of omnichain DeFi. With Stargate, users and dApps can transfer native assets cross-chain while accessing the protocol’s unified liquidity pools. Stargate contracts use Lay

Downloads

521

Readme

Stargate

Stargate is a fully composable liquidity transport protocol that lives at the heart of omnichain DeFi. With Stargate, users and dApps can transfer native assets cross-chain while accessing the protocol’s unified liquidity pools. Stargate contracts use LayerZero as their cross-chain transport protocol.

On each chain supported, Stargate contracts are deployed for each asset. This represents the asset/native swap pair, allowing users to transfer assets across chains. When value is transferred from an account, it gets transferred to the Stargate contract which is then responsible for ingesting/removing that value locally and emitting a message. Value is transferred across chains by message passing, with each message indicating the destination chain, account and currency. The Stargate contract on the remote chain is then responsible for egressing the value/token from the contract into the destination account. Value is transferred from one chain to another through a Path. Paths are a pair of source and destination chains and have credit associated with them. Value can only be transferred through a Path that has enough credit, as credit represents the liquidity of the Path. The value can be send through different modes:

  • Taxi, the fastest but most expensive one, which ensures the value is sent on its own cross-chain message.
  • Bus, the cheapest but potentially slowest one, which means the message is batched with other bus riders.
  • Drive, drives the bus.

Stargate contracts act as their own treasury, they hold the native coin that can be used to buy tokens locally while receiving tokens.

Architecture

Stargates on each chain provide sending and receiving functionality through a series of contracts. The cross-chain protocol is Layer Zero, and the entry-point or landing point for messages is an OApp. In particular, Stargate has multiple layers described as follows:

Layers

  • LayerZero Layer This layer handles receiving cross-chain messages from the off-chain infrastructure. It is implemented by the LayerZero endpoint and it is not part of Stargate, but included here for completeness. Stargate needs to register with the endpoint and setup the adequate wiring.

  • Messaging Layer The Messaging Layer is responsible for sending and receiving LZ messages. It includes codecs to translate between LZ and Stargate messages. This layer also routes the Stargate messages to the appropriate Stargate contracts using the AssetId. To send and receive messages from LZ, this layer derives from the OApp contract. To send Stargate messages over, it implements the IMessaging interface. This layer is implemented in the Messaging contract.

  • Stargate Layer This layer is responsible for the actual Stargate business logic. To receive Stargate messages from the Messaging Layer it implements the IMessagingReceiver interface. All contracts derive from the StargateBase contract and there is three implementations at the time of writing:

  • StargateOFT, which supports sending and receiving ERC20 OFTs.
  • StargatePool, which supports liquidity pools for OFTs.
  • StargatePoolNative, which supports a liquidity pool using the native token. A given asset will be supported by one of these implementations.

This layer does the credit bookkeeping, reward/fee processing and is also the chain-local entrypoint for user interactions. Apart from the Stargate contract it employs a series of adjacent contracts; notably the FeeLib for calculating transfer fees/rewards, the Bus library to support message batching, and roles described below.

Part of the Stargate business logic includes moving tokens to and from user accounts. This is described as inflow (value goes into the Stargate) and outflow (value goes into the users account) across the code. In the case of OFTs, this translates to actually minting and burning OFTs. Fees/rewards are paid on the source chain upon sending tokens.

To illustrate, receiving a token would follow this chain of calls:

┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ │ │ │ │ │ │ │ │ │
│ Off-chain ├────►│ LZ Endpoint ├────►│ Messaging ├────►│ Stargate ├────►│ User Account │
│ │ │ │ │ │ │ │ │ │
└───────────────┘ └───────────────┘ └───────────────┘ └───────────────┘ └───────────────┘

Sending a token is very similar in the reverse order.

Roles

A role is an address (can be either a contract or an EOA) that has special permissions to call functions on a contract. Stargate employs multiple roles:

  • Owner The owner of the contracts
    • setAssetId
    • setPlanner
    • setAddressConfig
    • setOFTPath

The Owner of Stargate contracts is responsible for configuring the Stargate. This includes setting up roles, libraries and configuration like asset IDs.

  • Planner
    • setBusCapacity
    • setBusFare
    • sendCredits
    • setPause
    • setDeficitOffset

The account responsible for keeping liveness through bus scheduling and liquidity balancing. It can directly send credits to a Path to provide liquidity, as well as modify the Bus operating parameters (capacity and fare) to incentivize the utilization of a given path. It can also use setDeficitOffset to change the set-point for pool liquidity. This will incentivize rebalancing once the locked in value is removed. Additionally, it can pause a Stargate, which means the contract stops sending and receiving tokens. The role can be assigned by the Owner of the Stargate contract.

  • Treasurer
    • withdrawTreasuryFee
    • addTreasuryFee

The treasurer controls the value (treasury) inside a Stargate contract. It can both add and withdraw from the treasury, which are administrative tasks. Adding to the treasury allows the Stargate contract to pay rewards beyond the value it has accrued through fees, which is important on the initial days of a pool. Withdrawing from the treasury allows the administrator to take the profits from the fees. Both functions can only be accessed by the Admin role.

  • Admin
    • withdrawTreasuryFee
    • addTreasuryFee

The admin role is allowed to use the Treasurer role to modify the treasury of a Stargate contract. The role can be assigned by the Owner of the Treasurer.

Composition

Stargate supports composing, which refers to the ability of Stargate contracts to deliver messages along with tokens. This enables receiving contracts to react and execute additional logic. In particular, Stargate leverages LayerZero composing feature. When a message is delivered which contains a composing message, LZ sendCompose() is called with the message.

User interaction

Users interact with Stargate contracts directly through the send() function. They can use the Quote* functions to estimate the fees/rewards involved in a transfer.

Nomenclature

  • Path A route through which value can be sent. It involves a source chain and a destination chain (indicated by the LZ endpoint ID).
  • SD Shared Decimals The minimum common decimals among all implementations of a given OFTs.
  • LD Local Decimals The amount of decimals for a an implementation of an OFT (in the local chain)
  • LP Liquidity Pool
  • STG Stargate token symbol
  • LZ LayerZero, an inter-chain communication layer
  • Credit Credit refers to the liquidity that a certain path has. Off-chain infrastructure might decide to incentivize or de-incentivize a given path to balance credit. Whenever tokens are moved from one chain to another, credit drops on the sending side.
  • Fee Stargate might charge some value to perform the swap. This value is known as the Stargate fee and it is accrued as value on the Stargate contract, known as the treasury. There is also a LayerZero fee that needs to be paid. Fees can be estimated by users using the Quote* functions.
  • Reward A value paid by Stargate to incentivize the flow of an asset in one direction, or to reward for value locked staking.
  • Inflow The transference of value into a Stargate contract. In the context of fees/rewards it also means original amount being transferred.
  • Outflow The transference of value out of a Stargate contract. In the context of fees/rewards it also means the actual amount after applying fees/rewards but before applying any caps.
  • Compose