Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@energi/energiswap-contracts

Package Overview
Dependencies
Maintainers
3
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@energi/energiswap-contracts

Smart contracts for Energiswap

  • 1.0.0
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
4
Maintainers
3
Weekly downloads
 
Created
Source

Energiswap smart-contracts

Energiswap is a decentralized protocol for automated token exchange.

Prerequisites for deploying Energiswap smart-contracts locally

Make sure you are running Ganache CLI with the following command:

ganache-cli -a 12 -e 1000000 -l 10000000 -p 7545 -m "tackle crazy sibling hobby hurry cat donate abstract sword city 
enough crime"

Deploying Energiswap smart-contracts locally

  1. Git clone repo with git clone git@git.energi.software:energi/defi/uniswap/energiswap-contracts.git
  2. Run yarn install to install the necessary dependencies for the project.
  3. Run truffle compile to compile the contracts inside the contracts folder.
  4. Run truffle migrate to deploy the contracts to the local ganache blockchain.

Testing

Test contracts are defined under the test directory. To run the tests run: truffle test

Architecture

See the architecture diagram in ./energiswap-contracts-architecture-diagram.png

Upgrades using Energi governance

The following Energiswap contracts are fully upgradeable using Energi governance:

EnergiswapRouter.sol EnergiswapFactory.sol EnergiswapPairsManager.sol

In order to upgrade EnergiswapPairsERC20.sol, one should deploy a new implementation for this contract, then deploy a new implementation for EnergiswapPairsManager.sol pointing to the new EnergiswapPairsERC20.sol implementation, and finally upgrade EnergiswapPairsManager.sol to the new implementation using Energi governance.

EnergiswapPairsManager.sol and EnergiswapPairsERC20.sol hold the logic for Energiswap pairs. Upgrading those contracts upgrades the logic for all Energiswap pairs.

Deploying Energiswap to Energi blockchain

WNRG.sol contract is a dependency to Energiswap smart contracts, it must be deployed for Energiswap to work.

Multicall.sol contract is a dependency to EnergiswapFactory and energiswap interface, it must be deployed for Energiswap to work.

Energi governance contracts must be deployed prior to deploying Energiswap Contracts.

Deploy EnergiswapFactory
factory = await EnergiswapFactory.new(feeToSetter, sporkProxy, '0x0000000000000000000000000000000000000000');

feeToSetter is the address of account which has permission to set the feeTo account which will receive trading fees.

sporkProxy is the address of the SporkProxy.sol smart contract which is part of Energi governance infrastructure.

Setting the last parameter to 0x0000000000000000000000000000000000000000 will result in EnergiswapFactoryGovernedProxy contract being deployed automatically. Alternatively, the address of an already deployed proxy contract can be passed.

The address of the deployed EnergiswapFactoryGovernedProxy will be used later in the deployment process. It is available via the proxy() function of EnergiswapFactory.

Deploy EnergiswapPairsERC20

pairsERC20 = await EnergiswapPairsERC20.new();

Deploy EnergiswapPairsManager
pairsManager = await EnergiswapPairsManager.new(factoryProxyAddress, pairsERC20.address, sporkProxy, '0x0000000000000000000000000000000000000000');

factoryProxyAddress is the address of the deployed EnergiswapFactoryGovernedProxy contract.

pairsERC20.address is the address of the deployed EnergiswapPairsERC20 contract.

sporkProxy is the address of the SporkProxy.sol smart contract which is part of Energi governance infrastructure.

Setting the last parameter to 0x0000000000000000000000000000000000000000 will result in EnergiswapPairsManagerGovernedProxy contract being deployed automatically. Alternatively, the address of an already deployed proxy contract can be passed.

The address of the deployed EnergiswapPairsManagerGovernedProxy will be used later in the deployment process. It is available via the proxy() function of EnergiswapPairsManager.

Initialize EnergiswapPairsERC20
await pairsERC20.initialize(pairsManager.address);

pairsManager.address is the address of the deployed EnergiswapPairsManager contract.

Deploy EnergiswapRouter
router = await EnergiswapRouter.new(factoryProxyAddress, wnrg.address, sporkProxy, '0x0000000000000000000000000000000000000000');

factoryProxyAddress is the address of the deployed EnergiswapFactoryGovernedProxy contract.

wnrg.address is the address of the deployed WNRG contract.

sporkProxy is the address of the SporkProxy.sol smart contract which is part of Energi governance infrastructure.

Setting the last parameter to 0x0000000000000000000000000000000000000000 will result in EnergiswapRouterGovernedProxy contract being deployed automatically. Alternatively, the address of an already deployed proxy contract can be passed.

The address of the deployed EnergiswapRouterGovernedProxy will be used later in the deployment process. It is available via the proxy() function of EnergiswapRouter.

Initialize EnergiswapFactory
await factory.initialize(multicall.address, routerProxyAddress, pairsManagerProxyAddress, pairsERC20.address);

multicall.address is the address of the deployed Multicall contract.

routerProxyAddress is the address of the deployed EnergiswapRouterGovernedProxy contract.

pairsManagerProxyAddress is the address of the deployed EnergiswapPairsManagerGovernedProxy contract.

pairsERC20.address is the address of the deployed EnergiswapPairsERC20 contract.

Energiswap Upgrades via Energi Governance

Start with deploying the desired upgrade implementation:

Deploying EnergiswapFactoryUpgrade
factoryUpgrade = await EnergiswapFactoryUpgrade.new(factoryStorageAddress, factoryProxyAddress);

factoryStorageAddress is the address of the existing EnergiswapFactoryStorage contract

factoryProxyAddress is the address of the existing EnergiswapFactoryGovernedProxy contract

Deploying EnergiswapPairsManagerUpgrade and EnergiswapPairsERC20Upgrade
pairsManagerUpgrade = await EnergiswapPairsManagerUpgrade.new(
      pairsManagerProxyAddress,
      pairsManagerStorageAddress,
      pairsERC20Upgrade.address
    );

pairsManagerProxyAddress is the address of the existing EnergiswapPairsManagerGovernedProxy contract

pairsManagerStorageAddress is the address of the existing energiswapPairsManagerStorage contract

pairsERC20Upgrade.address is the address of the deployed EnergiswapPairsERC20 contract. This could be either the former EnergiswapPairsERC20 contract, or a new EnergiswapPairsERC20Upgrade contract.

pairsERC20Upgrade.initialize(pairsManagerUpgrade.address);
Deploying EnergiswapRouterUpgrade
routerUpgrade = await EnergiswapRouterUpgrade.new(routerStorageAddress, routerProxyAddress);

routerStorageAddress is the address of the existing EnergiswapRouterStorage contract

routerProxyAddress is the address of the existing EnergiswapRouterGovernedProxy contract

Proposing a deployed upgrade

Once this is done, call the proposeUpgrade() function on the GovernedProxy contract of the contract being upgraded, with the address of the deployed upgrade implementation.

Masternodes voting and actual upgrade

Masternode owners can now vote to accept or reject the proposed upgrade. If quorum majority is reached, the upgrade proposal is accepted and anyone can now call the upgrade() function on the GovernedProxy contract of the contract being upgraded, with the address of the deployed upgrade proposal.

FAQs

Package last updated on 01 Feb 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc