diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml new file mode 100644 index 0000000..455826d --- /dev/null +++ b/.github/workflows/check-build.yml @@ -0,0 +1,25 @@ +name: Check Build + +on: + push: + branches: [ main ] + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: Install protoc + uses: arduino/setup-protoc@v3 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Install dependencies + run: sudo apt-get update && sudo apt-get install libudev-dev + - name: Build + run: cargo build --verbose + - name: Run tests + run: cargo test --verbose + - name: Check lint + run: cargo clippy --all-targets --all-features -- -D warnings diff --git a/.github/workflows/pyth-sdk-solana.yml b/.github/workflows/pyth-sdk-solana.yml index 554eed6..24425a5 100644 --- a/.github/workflows/pyth-sdk-solana.yml +++ b/.github/workflows/pyth-sdk-solana.yml @@ -10,19 +10,6 @@ env: CARGO_TERM_COLOR: always jobs: - build: - runs-on: ubuntu-latest - defaults: - run: - working-directory: ./pyth-sdk-solana - steps: - - uses: actions/checkout@v2 - - name: Install dependencies - run: sudo apt-get update && sudo apt-get install libudev-dev protobuf-compiler - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose test-contract: runs-on: ubuntu-latest defaults: diff --git a/.github/workflows/pyth-sdk.yml b/.github/workflows/pyth-sdk.yml deleted file mode 100644 index 2dbbca0..0000000 --- a/.github/workflows/pyth-sdk.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Pyth SDK - -on: - push: - branches: [ main ] - paths: [ pyth-sdk/** ] - pull_request: - branches: [ main ] - paths: [ pyth-sdk/** ] - -env: - CARGO_TERM_COLOR: always - -jobs: - build: - runs-on: ubuntu-latest - defaults: - run: - working-directory: ./pyth-sdk - steps: - - uses: actions/checkout@v2 - - name: Install dependencies - run: sudo apt-get update && sudo apt-get install libudev-dev - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose - schema-check: - name: Check schema changes are committed - runs-on: ubuntu-latest - defaults: - run: - working-directory: ./pyth-sdk - steps: - - name: Checkout sources - uses: actions/checkout@v2 - - - name: Generate Schema - run: cargo run --example schema - - - name: Schema Changes - # fails if any changes not committed - run: git diff --exit-code schema diff --git a/Cargo.lock b/Cargo.lock index 61dcf07..74e0812 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -366,7 +366,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -499,11 +499,11 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "borsh" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee" dependencies = [ - "borsh-derive 0.10.3", + "borsh-derive 0.10.4", "hashbrown 0.13.2", ] @@ -519,9 +519,9 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89" dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", @@ -540,7 +540,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", "syn_derive", ] @@ -629,7 +629,7 @@ checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -978,7 +978,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -989,7 +989,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -1107,7 +1107,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -1130,7 +1130,7 @@ checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -1236,7 +1236,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -1249,7 +1249,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -1302,7 +1302,7 @@ name = "example-sol-contract" version = "0.2.0" dependencies = [ "arrayref", - "borsh 0.10.3", + "borsh 0.10.4", "pyth-sdk-solana", "solana-program", ] @@ -1433,7 +1433,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -2292,7 +2292,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -2364,7 +2364,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -2532,7 +2532,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -2741,8 +2741,8 @@ dependencies = [ name = "pyth-sdk" version = "0.8.0" dependencies = [ - "borsh 0.10.3", - "borsh-derive 0.10.3", + "borsh 0.10.4", + "borsh-derive 0.10.4", "getrandom 0.2.15", "hex", "quickcheck", @@ -2756,8 +2756,8 @@ dependencies = [ name = "pyth-sdk-solana" version = "0.10.5" dependencies = [ - "borsh 0.10.3", - "borsh-derive 0.10.3", + "borsh 0.10.4", + "borsh-derive 0.10.4", "bytemuck", "num-derive 0.3.3", "num-traits", @@ -2786,7 +2786,7 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -3253,7 +3253,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -3279,7 +3279,7 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -3332,9 +3332,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.208" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] @@ -3350,13 +3350,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.208" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -3367,7 +3367,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -3413,7 +3413,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -4012,7 +4012,7 @@ dependencies = [ "bincode", "bitflags 2.6.0", "blake3", - "borsh 0.10.3", + "borsh 0.10.4", "borsh 1.5.1", "bs58", "bv", @@ -4388,7 +4388,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -4815,7 +4815,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -4827,7 +4827,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.75", + "syn 2.0.87", "thiserror", ] @@ -4876,7 +4876,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -5059,9 +5059,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.75" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -5077,7 +5077,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -5206,8 +5206,8 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" name = "test-contract" version = "0.3.0" dependencies = [ - "borsh 0.10.3", - "borsh-derive 0.10.3", + "borsh 0.10.4", + "borsh-derive 0.10.4", "bytemuck", "pyth-sdk-solana", "solana-client", @@ -5248,7 +5248,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -5352,7 +5352,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -5487,7 +5487,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -5734,7 +5734,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -5768,7 +5768,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6070,7 +6070,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] @@ -6090,7 +6090,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.87", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 78e0cf1..e7f9233 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,46 @@ pyth-sdk = { path = "./pyth-sdk", version = "0.8.0" } pyth-sdk-solana = { path = "./pyth-sdk-solana", version = "0.10.4" } solana-program = ">= 1.10" -borsh = "0.10.3" -borsh-derive = "0.10.3" -serde = "1.0.136" +borsh = "0.10.4" +borsh-derive = "0.10.4" +serde = "1.0.219" + +[workspace.lints.rust] +unsafe_code = "deny" + +[workspace.lints.clippy] +wildcard_dependencies = "deny" + +collapsible_if = "allow" +collapsible_else_if = "allow" + +allow_attributes_without_reason = "warn" + +# Panics +expect_used = "warn" +fallible_impl_from = "warn" +indexing_slicing = "warn" +panic = "warn" +panic_in_result_fn = "warn" +string_slice = "warn" +todo = "warn" +unchecked_duration_subtraction = "warn" +unreachable = "warn" +unwrap_in_result = "warn" +unwrap_used = "warn" + +# Correctness +cast_lossless = "warn" +cast_possible_truncation = "warn" +cast_possible_wrap = "warn" +cast_sign_loss = "warn" +collection_is_never_read = "warn" +match_wild_err_arm = "warn" +path_buf_push_overwrite = "warn" +read_zero_byte_vec = "warn" +same_name_method = "warn" +suspicious_operation_groupings = "warn" +suspicious_xor_used_as_pow = "warn" +unused_self = "warn" +used_underscore_binding = "warn" +while_float = "warn" diff --git a/examples/sol-contract/src/processor.rs b/examples/sol-contract/src/processor.rs index 067b658..bc3c45e 100644 --- a/examples/sol-contract/src/processor.rs +++ b/examples/sol-contract/src/processor.rs @@ -2,6 +2,8 @@ //! Only the program admin can issue the Init instruction. //! And anyone can check the loan with the Loan2Value instruction. +use std::cmp::Ordering; + use solana_program::account_info::{ next_account_info, AccountInfo, @@ -127,22 +129,25 @@ pub fn process_instruction( // If the loan and collateral prices use different exponent, // normalize the value. - if result1.expo > result2.expo { - let normalize = 10_i64 - .checked_pow((result1.expo - result2.expo) as u32) - .ok_or(ProgramError::Custom(4))?; - collateral_min_value = collateral_min_value - .checked_mul(normalize) - .ok_or(ProgramError::Custom(4))?; - } else if result1.expo < result2.expo { - let normalize = 10_i64 - .checked_pow((result2.expo - result1.expo) as u32) - .ok_or(ProgramError::Custom(4))?; - loan_max_value = loan_max_value - .checked_mul(normalize) - .ok_or(ProgramError::Custom(4))?; + match result1.expo.cmp(&result2.expo) { + Ordering::Greater => { + let normalize = 10_i64 + .checked_pow((result1.expo - result2.expo) as u32) + .ok_or(ProgramError::Custom(4))?; + collateral_min_value = collateral_min_value + .checked_mul(normalize) + .ok_or(ProgramError::Custom(4))?; + } + Ordering::Less => { + let normalize = 10_i64 + .checked_pow((result2.expo - result1.expo) as u32) + .ok_or(ProgramError::Custom(4))?; + loan_max_value = loan_max_value + .checked_mul(normalize) + .ok_or(ProgramError::Custom(4))?; + } + Ordering::Equal => {} } - // Check whether the value of the collateral is higher. if collateral_min_value > loan_max_value { msg!("The value of the collateral is higher."); diff --git a/pyth-sdk/src/price.rs b/pyth-sdk/src/price.rs index ba304b6..7c614e2 100644 --- a/pyth-sdk/src/price.rs +++ b/pyth-sdk/src/price.rs @@ -1908,7 +1908,7 @@ mod test { pc(-1000, 0, -9), 500, -9, - pc(-500, 92_23_372_000_000_000_000, -9), + pc(-500, 9_223_372_000_000_000_000, -9), ); // test with MAX_PD_V_U64 in conf--no loss in precision unlike above succeeds( @@ -2053,9 +2053,9 @@ mod test { pub fn construct_quickcheck_affine_combination_price(price: i64) -> Price { Price { - price: price, - conf: 0, - expo: -9, + price, + conf: 0, + expo: -9, publish_time: 0, } } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 624eb0e..355a8cd 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,4 @@ [toolchain] channel = "1.76.0" +profile = "minimal" +components = ["rustfmt", "clippy"]