diff --git a/.gitignore b/.gitignore index f5e984e..83ef5b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,8 @@ /target -.ds_store \ No newline at end of file +.ds_store +/target +**/*.rs.bk +Cargo.lock +bin/ +pkg/ +wasm-pack.log diff --git a/Cargo.lock b/Cargo.lock index cad2081..cf77718 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,329 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "cc" +version = "1.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d013ecb737093c0e86b151a7b837993cf9ec6c502946cfb44bedc392421e0b" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + [[package]] name = "magic-curves" version = "1.0.0" + +[[package]] +name = "magic-curves-wasm" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "magic-curves", + "wasm-bindgen", + "wasm-bindgen-test", +] + +[[package]] +name = "minicov" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +dependencies = [ + "cc", + "walkdir", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "syn" +version = "2.0.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +dependencies = [ + "console_error_panic_hook", + "js-sys", + "minicov", + "scoped-tls", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "web-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" diff --git a/crates/magic-curves-wasm/.gitignore b/crates/magic-curves-wasm/.gitignore new file mode 100644 index 0000000..4e30131 --- /dev/null +++ b/crates/magic-curves-wasm/.gitignore @@ -0,0 +1,6 @@ +/target +**/*.rs.bk +Cargo.lock +bin/ +pkg/ +wasm-pack.log diff --git a/crates/magic-curves-wasm/Cargo.toml b/crates/magic-curves-wasm/Cargo.toml new file mode 100644 index 0000000..cc859d9 --- /dev/null +++ b/crates/magic-curves-wasm/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "magic-curves-wasm" +version = "0.1.0" +authors = ["Kevin Rodriguez <_@kevinrodriguez.io>"] +edition = "2018" +description = "WebAssembly bindings for the magic-curves library." +license = "MIT" +repository = "https://github.com/kevinrodriguez-io/magic-curves" +homepage = "https://github.com/kevinrodriguez-io/magic-curves" +documentation = "https://docs.rs/magic-curves-wasm" +readme = "../../README.md" +keywords = ["blockchain", "financial", "solana", "defi", "finance"] +categories = ["finance", "cryptography", "wasm"] + +[lib] +crate-type = ["cdylib", "rlib"] + +[features] +default = ["console_error_panic_hook"] + +[dependencies] +magic-curves = { path = "../magic-curves" } +wasm-bindgen = "0.2.84" +# The `console_error_panic_hook` crate provides better debugging of panics by +# logging them with `console.error`. This is great for development, but requires +# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for +# code size when deploying. +console_error_panic_hook = { version = "0.1.7", optional = true } + +[dev-dependencies] +wasm-bindgen-test = "0.3.34" + +[profile.release] +# Tell `rustc` to optimize for small code size. +opt-level = "s" +lto = true diff --git a/crates/magic-curves-wasm/README.md b/crates/magic-curves-wasm/README.md new file mode 100644 index 0000000..613206d --- /dev/null +++ b/crates/magic-curves-wasm/README.md @@ -0,0 +1,85 @@ +
+ +

wasm-pack-template

+ +A template for kick starting a Rust and WebAssembly project using wasm-pack. + +

+ Build Status +

+ +

+ Tutorial + | + Chat +

+ +Built with 🦀🕸 by The Rust and WebAssembly Working Group + +
+ +## About + +[**📚 Read this template tutorial! 📚**][template-docs] + +This template is designed for compiling Rust libraries into WebAssembly and +publishing the resulting package to NPM. + +Be sure to check out [other `wasm-pack` tutorials online][tutorials] for other +templates and usages of `wasm-pack`. + +[tutorials]: https://rustwasm.github.io/docs/wasm-pack/tutorials/index.html +[template-docs]: https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/index.html + +## 🚴 Usage + +### 🐑 Use `cargo generate` to Clone this Template + +[Learn more about `cargo generate` here.](https://github.com/ashleygwilliams/cargo-generate) + +``` +cargo generate --git https://github.com/rustwasm/wasm-pack-template.git --name my-project +cd my-project +``` + +### 🛠️ Build with `wasm-pack build` + +``` +wasm-pack build +``` + +### 🔬 Test in Headless Browsers with `wasm-pack test` + +``` +wasm-pack test --headless --firefox +``` + +### 🎁 Publish to NPM with `wasm-pack publish` + +``` +wasm-pack publish +``` + +## 🔋 Batteries Included + +- [`wasm-bindgen`](https://github.com/rustwasm/wasm-bindgen) for communicating + between WebAssembly and JavaScript. +- [`console_error_panic_hook`](https://github.com/rustwasm/console_error_panic_hook) + for logging panic messages to the developer console. +- `LICENSE-APACHE` and `LICENSE-MIT`: most Rust projects are licensed this way, so these are included for you + +## License + +Licensed under either of + +- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) +- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) + +at your option. + +### Contribution + +Unless you explicitly state otherwise, any contribution intentionally +submitted for inclusion in the work by you, as defined in the Apache-2.0 +license, shall be dual licensed as above, without any additional terms or +conditions. diff --git a/crates/magic-curves-wasm/src/lib.rs b/crates/magic-curves-wasm/src/lib.rs new file mode 100644 index 0000000..36c28e5 --- /dev/null +++ b/crates/magic-curves-wasm/src/lib.rs @@ -0,0 +1,260 @@ +mod utils; + +use magic_curves::{ + BondingCurve, ExponentialBondingCurve, LinearBondingCurve, LogarithmicBondingCurve, + OperationSide, QuadraticBondingCurve, SigmoidBondingCurve, +}; +use wasm_bindgen::prelude::*; + +/// Represents the side of a bonding curve operation. +#[wasm_bindgen] +pub enum Side { + Add, + Remove, +} + +impl Side { + /// Converts the Side enum to the corresponding OperationSide. + pub fn to_operation_side(&self) -> OperationSide { + match self { + Side::Add => OperationSide::Add, + Side::Remove => OperationSide::Remove, + } + } +} + +/// Calculates the price for a linear bonding curve at the current supply. +/// +/// # Arguments +/// +/// * `linear` - The linear coefficient of the curve. +/// * `base` - The base price of the curve. +/// * `current_supply` - The current token supply. +/// +/// # Returns +/// +/// The calculated price as a u64. +#[wasm_bindgen] +pub fn price_at_current_supply_linear(linear: u64, base: u64, current_supply: u64) -> u64 { + LinearBondingCurve::new(linear, base).calculate_price(current_supply) +} + +/// Calculates the total price for multiple tokens in a linear bonding curve. +/// +/// # Arguments +/// +/// * `linear` - The linear coefficient of the curve. +/// * `base` - The base price of the curve. +/// * `current_supply` - The current token supply. +/// * `amount` - The number of tokens to calculate the price for. +/// * `side` - The side of the operation (Add or Remove). +/// +/// # Returns +/// +/// The calculated total price as a u64. +#[wasm_bindgen] +pub fn price_many_at_current_supply_linear( + linear: u64, + base: u64, + current_supply: u64, + amount: u64, + side: Side, +) -> u64 { + LinearBondingCurve::new(linear, base).calculate_price_many( + current_supply, + amount, + side.to_operation_side(), + ) +} + +/// Calculates the price for a quadratic bonding curve at the current supply. +/// +/// # Arguments +/// +/// * `quadratic` - The quadratic coefficient of the curve. +/// * `linear` - The linear coefficient of the curve. +/// * `base` - The base price of the curve. +/// * `current_supply` - The current token supply. +/// +/// # Returns +/// +/// The calculated price as a u64. +#[wasm_bindgen] +pub fn price_at_current_supply_quadratic( + quadratic: u64, + linear: u64, + base: u64, + current_supply: u64, +) -> u64 { + QuadraticBondingCurve::new(quadratic, linear, base).calculate_price(current_supply) +} + +/// Calculates the total price for multiple tokens in a quadratic bonding curve. +/// +/// # Arguments +/// +/// * `quadratic` - The quadratic coefficient of the curve. +/// * `linear` - The linear coefficient of the curve. +/// * `base` - The base price of the curve. +/// * `current_supply` - The current token supply. +/// * `amount` - The number of tokens to calculate the price for. +/// * `side` - The side of the operation (Add or Remove). +/// +/// # Returns +/// +/// The calculated total price as a u64. +#[wasm_bindgen] +pub fn price_many_at_current_supply_quadratic( + quadratic: u64, + linear: u64, + base: u64, + current_supply: u64, + amount: u64, + side: Side, +) -> u64 { + QuadraticBondingCurve::new(quadratic, linear, base).calculate_price_many( + current_supply, + amount, + side.to_operation_side(), + ) +} + +/// Calculates the price for an exponential bonding curve at the current supply. +/// +/// # Arguments +/// +/// * `base` - The base price of the curve. +/// * `growth` - The growth rate of the curve. +/// * `current_supply` - The current token supply. +/// +/// # Returns +/// +/// The calculated price as an f64. +#[wasm_bindgen] +pub fn price_at_current_supply_exponential(base: f64, growth: f64, current_supply: u64) -> f64 { + ExponentialBondingCurve::new(base, growth).calculate_price(current_supply) +} + +/// Calculates the total price for multiple tokens in an exponential bonding curve. +/// +/// # Arguments +/// +/// * `base` - The base price of the curve. +/// * `growth` - The growth rate of the curve. +/// * `current_supply` - The current token supply. +/// * `amount` - The number of tokens to calculate the price for. +/// * `side` - The side of the operation (Add or Remove). +/// +/// # Returns +/// +/// The calculated total price as an f64. +#[wasm_bindgen] +pub fn price_many_at_current_supply_exponential( + base: f64, + growth: f64, + current_supply: u64, + amount: u64, + side: Side, +) -> f64 { + ExponentialBondingCurve::new(base, growth).calculate_price_many( + current_supply, + amount, + side.to_operation_side(), + ) +} + +/// Calculates the price for a logarithmic bonding curve at the current supply. +/// +/// # Arguments +/// +/// * `base` - The base price of the curve. +/// * `growth` - The growth rate of the curve. +/// * `current_supply` - The current token supply. +/// +/// # Returns +/// +/// The calculated price as an f64. +#[wasm_bindgen] +pub fn price_at_current_supply_logarithmic(base: f64, growth: f64, current_supply: u64) -> f64 { + LogarithmicBondingCurve::new(base, growth).calculate_price(current_supply) +} + +/// Calculates the total price for multiple tokens in a logarithmic bonding curve. +/// +/// # Arguments +/// +/// * `base` - The base price of the curve. +/// * `growth` - The growth rate of the curve. +/// * `current_supply` - The current token supply. +/// * `amount` - The number of tokens to calculate the price for. +/// * `side` - The side of the operation (Add or Remove). +/// +/// # Returns +/// +/// The calculated total price as an f64. +#[wasm_bindgen] +pub fn price_many_at_current_supply_logarithmic( + base: f64, + growth: f64, + current_supply: u64, + amount: u64, + side: Side, +) -> f64 { + LogarithmicBondingCurve::new(base, growth).calculate_price_many( + current_supply, + amount, + side.to_operation_side(), + ) +} + +/// Calculates the price for a sigmoid bonding curve at the current supply. +/// +/// # Arguments +/// +/// * `base` - The base price of the curve. +/// * `growth` - The growth rate of the curve. +/// * `mid_supply` - The supply at the midpoint of the sigmoid curve. +/// * `current_supply` - The current token supply. +/// +/// # Returns +/// +/// The calculated price as an f64. +#[wasm_bindgen] +pub fn price_at_current_supply_sigmoid( + base: f64, + growth: f64, + mid_supply: u64, + current_supply: u64, +) -> f64 { + SigmoidBondingCurve::new(base, growth, mid_supply).calculate_price(current_supply) +} + +/// Calculates the total price for multiple tokens in a sigmoid bonding curve. +/// +/// # Arguments +/// +/// * `base` - The base price of the curve. +/// * `growth` - The growth rate of the curve. +/// * `mid_supply` - The supply at the midpoint of the sigmoid curve. +/// * `current_supply` - The current token supply. +/// * `amount` - The number of tokens to calculate the price for. +/// * `side` - The side of the operation (Add or Remove). +/// +/// # Returns +/// +/// The calculated total price as an f64. +#[wasm_bindgen] +pub fn price_many_at_current_supply_sigmoid( + base: f64, + growth: f64, + mid_supply: u64, + current_supply: u64, + amount: u64, + side: Side, +) -> f64 { + SigmoidBondingCurve::new(base, growth, mid_supply).calculate_price_many( + current_supply, + amount, + side.to_operation_side(), + ) +} diff --git a/crates/magic-curves-wasm/src/utils.rs b/crates/magic-curves-wasm/src/utils.rs new file mode 100644 index 0000000..c4be847 --- /dev/null +++ b/crates/magic-curves-wasm/src/utils.rs @@ -0,0 +1,11 @@ +#[allow(dead_code)] +pub fn set_panic_hook() { + // When the `console_error_panic_hook` feature is enabled, we can call the + // `set_panic_hook` function at least once during initialization, and then + // we will get better error messages if our code ever panics. + // + // For more details see + // https://github.com/rustwasm/console_error_panic_hook#readme + #[cfg(feature = "console_error_panic_hook")] + console_error_panic_hook::set_once(); +} diff --git a/crates/magic-curves-wasm/tests/web.rs b/crates/magic-curves-wasm/tests/web.rs new file mode 100644 index 0000000..de5c1da --- /dev/null +++ b/crates/magic-curves-wasm/tests/web.rs @@ -0,0 +1,13 @@ +//! Test suite for the Web and headless browsers. + +#![cfg(target_arch = "wasm32")] + +extern crate wasm_bindgen_test; +use wasm_bindgen_test::*; + +wasm_bindgen_test_configure!(run_in_browser); + +#[wasm_bindgen_test] +fn pass() { + assert_eq!(1 + 1, 2); +} diff --git a/crates/magic-curves/Cargo.toml b/crates/magic-curves/Cargo.toml index 711665b..66cbc2d 100644 --- a/crates/magic-curves/Cargo.toml +++ b/crates/magic-curves/Cargo.toml @@ -13,3 +13,7 @@ keywords = ["blockchain", "financial", "solana", "defi", "finance"] categories = ["finance", "cryptography"] [dependencies] + +[profile.release] +opt-level = "s" +lto = true