A monorepo for marginfi-related TypeScript projects managed with Turbo.
mrgn-ts
is an open source monorepo for TypeScript projects. It includes various app UI frontends, such as one for the product mrgnlend
, as well as SDKs for marginfi v2
, the marginfi v2 liquidator
client, and the liquidity incentive program (LIP)
client.
- Managed with Turbo
- Includes various app UI frontends and SDKs
- Open source under the Apache 2.0 license
-
Fork and clone the repository.
-
Install dependencies:
yarn
We welcome contributions to mrgn-ts
! Please review our contributing guidelines for more information.
mrgn-ts
is open source software licensed under the Apache 2.0 license.
For historical reasons, the IDL file in this repository should be updated using
the marginfi-v2 CLI tool to ensure the IDL stays in its canonical format.
This is largely due to changes in the byte packing code used by Anchor,
and the fact that Rust removed the #repr(packed)
option in later releases.
The process is to build the IDL file in the marginfi-v2 repository, patch it,
then copy it into this repository and format it (via prettier).
To update the IDL:
-
Checkout the marginfi-v2-cli repository and build it. Ensure you are on an x86-64 machine to get the build to succeed. Ensure the solana CLI tool is installed, alongside anchor and rust and yarn.
-
Run marginfi-v2/scripts/build-workspace to generate the original IDL (anchor build)
-
Use the marginfi-v2-cli and run the
patch-idl
command against the generated marginfi.json IDL in the marginfi-v2 repository.
Ensure you are on main branch in marginfi-v2.
For example, run this command from the root of the marginfi-v2 repository,
cargo run \
--package marginfi-v2-cli \
--features dev \
-- patch-idl target
where target
is the target directory for rust binaries. There should be an idl
folder with the idl inside of target
.
This produces a modified marginfi.json file alongside the original file. The _original file can be removed but is useful for checking diffs.
- Copy the marginfi.json file and the marginfi-types.ts into this repository.
- Lint the new IDL file using the prettier linter (.prettierrc) -- in VSCode you can simply use Format Document and it applies the lint automatically.
Review the IDL changes to make sure the new features/types in marginfiv2 are reflected in the new IDL. For example new instructions or types, should be reflected in the new IDL.
Commit the IDL changes and merge in the same mrgn-ts PR that adds features that rely on the new IDL. These should be committed together to ensure the new feature works.