Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add account authority transfer wrapper #525

Merged
merged 11 commits into from
Feb 7, 2024
49 changes: 49 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,52 @@ We welcome contributions to `mrgn-ts`! Please review our [contributing guideline
## License

`mrgn-ts` is open source software licensed under the Apache 2.0 license.

## Updating the IDL

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:

1. Checkout the [marginfi-v2-cli](https://github.com/mrgnlabs/marginfi-v2/tree/main)
repository and build it. Ensure you are on an x86-64 machine to get the build
to succeed. Ensure the [solana](https://docs.solanalabs.com/cli/install) CLI tool is installed,
alongside anchor and rust and yarn.

2. Run marginfi-v2/scripts/build-workspace to generate the original IDL (anchor build)

3. Use the [marginfi-v2-cli](https://github.com/mrgnlabs/marginfi-v2/tree/main/clients/rust/marginfi-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.

4. Copy the marginfi.json file and the marginfi-types.ts into this repository.
5. 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.
1 change: 1 addition & 0 deletions packages/marginfi-client-v2/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ export const ADDRESS_LOOKUP_TABLE_FOR_GROUP: { [key: string]: [PublicKey] } = {

export const DISABLED_FLAG: number = 1 << 0;
export const FLASHLOAN_ENABLED_FLAG: number = 1 << 2;
export const TRANSFER_ACCOUNT_AUTHORITY_FLAG: number = 1 << 3;
Loading
Loading