Package | Coverage |
---|---|
@synthetixio/core-utils | |
@synthetixio/core-contracts | |
@synthetixio/core-modules | |
@synthetixio/main |
Please refer to the Official Documentation for high level concepts of the Synthetix v3 protocol, as well as auto generated docs from natspec.
This is a monorepo with the following folder structure and packages:
.
├── markets // Standalone projects that extend the core Synthetix protocol with markets.
│ ├── legacy-market // Market that connects Synthetix's v2 and v3 versions.
│ └── perps-market // Market extension for perps.
│ └── spot-market // Market extension for spot synths.
│
├── protocol // Core Synthetix protocol projects.
│ ├── governance // Governance contracts for on chain voting.
│ ├── oracle-manager // Composable oracle and price provider for the core protocol.
│ └── synthetix // Core protocol (to be extended by markets).
│
└── utils // Utilities, plugins, tooling.
├── common-config // Common npm and hardhat configuration for multiple packages in the monorepo.
├── core-contracts // Standard contract implementations like ERC20, adapted for custom router storage.
├── core-modules // Modules intended to be reused between multiple router based projects.
├── core-utils // Simple Javascript/Typescript utilities that are used in other packages (e.g. test utils, etc).
├── deps // Dependency handling (e.g. mismatched, circular etc.)
├── docgen // Auto-generate docs from natspec etc.
├── hardhat-storage // Hardhat plugin used to detect storage collisions between proxy implementations.
└── sample-project // Sample project based on router proxy and cannon.
All projects in this monorepo that involve contracts use a proxy architecture developed by Synthetix referred to as the "Router Proxy". It is basically a way to merge several contracts, which we call "modules", into a single implementation contract which is the router itself. This router is used as the implementation of the main proxy of the system.
See the Router README for more details.
If you intend to develop in this repository, please read the following items.
- Foundry
- NPM version 8
- Node version 16
In the contracts, use import "hardhat/console.sol";
, then run DEBUG=cannon:cli:rpc yarn test
.
Deployment of the protocol is managed in the synthetix-deployments repository.
To prepare for system upgrades, this repository is used to release new versions of the protocol and markets.
- Ensure you have the latest version of Cannon installed:
@usecannon/cli
andhardhat-cannon
are upgraded to the latest through the repository (useyarn upgrade-interactive
command). - After installing for the first time, run
yarn cannon:setup
to configure IPFS and a reliable RPC endpoint to communicate with the Cannon package registry. - Unless
npm whoami
returns an npm account with publishing permissions for the@synthetixio
organization, confirm an@synthetixio
npm publishing key is set as$NPM_TOKEN
in the.env
file. - Confirm you are on the
main
branch and there are no git changesgit diff --exit-code .
- Publish the release with
yarn publish:dev
for the pre-release (no git tag, version looks like1.2.3-<GIT_SHA>.0
)> andyarn publish:release
for the proper semver release.- If you aren't using Frame, prepend
CANNON_REGISTRY_PROVIDER_URL=<MAINNET_RPC> CANNON_PRIVATE_KEY=<PRIVATE_KEY>
to the commands above. - In case Cannon publish fails you can run
yarn publish-contracts
in the root to retry publishing all Cannon packages. Or runyarn publish-contracts
in each failed package separately.
- If you aren't using Frame, prepend
- In all the package.json files, revert dependencies' version changes back to
"workspaces:*"
(leaving the change togitHead
, if applicable), commit, and push.