Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .cargo-husky/hooks/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
set -e

echo 'Running all pre-commit checks:'
cargo fmt
cargo fmt -- --check
cargo clippy --all-features -- -D warnings
cargo test --release
cargo test --release --no-default-features --features embassy-rt,core,wallet,models,helpers,websocket,json-rpc
cargo clippy --fix --allow-staged
cargo test --release --no-default-features --features embassy-rt,core,wallet,models,helpers,websocket,json-rpc
cargo doc --no-deps
cargo audit
10 changes: 6 additions & 4 deletions .github/workflows/audit_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/audit-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Install cargo-audit
run: cargo install cargo-audit
- name: Run security audit
run: cargo audit
16 changes: 9 additions & 7 deletions .github/workflows/quality_test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
on:
on:
push:
branches:
- dev
Expand All @@ -9,12 +9,14 @@ on:
name: Quality

jobs:
clippy_check:
quality_check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- run: rustup component add clippy
- uses: actions-rs/clippy-check@v1
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
token: ${{ secrets.GITHUB_TOKEN }}
args: --all-features
components: clippy, rustfmt
- name: Check formatting
run: cargo fmt -- --check
- name: Clippy lint
run: cargo clippy --all-features -- -D warnings
83 changes: 24 additions & 59 deletions .github/workflows/unit_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,62 +14,27 @@ jobs:
name: xrpl-rust
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- uses: actions-rs/cargo@v1
name: Build with default features
with:
command: build
args: --release
- uses: actions-rs/cargo@v1
name: Build with no default features
with:
command: build
args: --release --no-default-features
- uses: actions-rs/cargo@v1
name: Build for no_std
with:
command: build
args: --release --no-default-features --features embassy-rt,core,wallet,models,helpers,websocket,json-rpc
- uses: actions-rs/cargo@v1
name: Build only core
with:
command: build
args: --release --no-default-features --features core
- uses: actions-rs/cargo@v1
name: Build only wallet
with:
command: build
args: --release --no-default-features --features wallet
- uses: actions-rs/cargo@v1
name: Build only models
with:
command: build
args: --release --no-default-features --features models
- uses: actions-rs/cargo@v1
name: Build only helpers
with:
command: build
args: --release --no-default-features --features websocket,json-rpc,helpers,tokio-rt
- uses: actions-rs/cargo@v1
name: Build only websocket
with:
command: build
args: --release --no-default-features --features websocket
- uses: actions-rs/cargo@v1
name: Build only core
with:
command: build
args: --release --no-default-features --features json-rpc
- uses: actions-rs/cargo@v1
name: Test with default features
with:
command: test
args: --release
- uses: actions-rs/cargo@v1
name: Test for no_std
with:
command: test
args: --release --no-default-features --features embassy-rt,core,utils,wallet,models,helpers,websocket,json-rpc
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Build with default features
run: cargo build --release
- name: Build with no default features
run: cargo build --release --no-default-features
- name: Build for no_std
run: cargo build --release --no-default-features --features embassy-rt,core,wallet,models,helpers,websocket,json-rpc
- name: Build only core
run: cargo build --release --no-default-features --features core
- name: Build only wallet
run: cargo build --release --no-default-features --features wallet
- name: Build only models
run: cargo build --release --no-default-features --features models
- name: Build only helpers
run: cargo build --release --no-default-features --features websocket,json-rpc,helpers,tokio-rt
- name: Build only websocket
run: cargo build --release --no-default-features --features websocket
- name: Build only json-rpc
run: cargo build --release --no-default-features --features json-rpc
- name: Test with default features
run: cargo test --release
- name: Test for no_std
run: cargo test --release --no-default-features --features embassy-rt,core,utils,wallet,models,helpers,websocket,json-rpc
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ chrono = { version = "0.4.19", default-features = false, features = [
] }
hex = { version = "0.4.3", default-features = false, features = ["alloc"] }
rand = { version = "0.8.5", default-features = false, features = ["getrandom"] }
serde = { version = "1.0.130", default-features = false, features = ["derive"] }
serde = { version = "1.0.130", default-features = false, features = ["derive", "alloc"] }
serde_json = { version = "1.0.68", default-features = false, features = [
"alloc",
] }
Expand Down
1 change: 1 addition & 0 deletions rustfmt.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
edition = "2021"
13 changes: 11 additions & 2 deletions src/asynch/clients/exceptions.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#[cfg(not(feature = "std"))]
use alloc::boxed::Box;
use thiserror_no_std::Error;

#[cfg(feature = "helpers")]
Expand All @@ -23,7 +25,7 @@ pub enum XRPLClientException {
XRPLFaucetError(#[from] XRPLFaucetException),
#[cfg(feature = "websocket")]
#[error("XRPL WebSocket error: {0}")]
XRPLWebSocketError(#[from] XRPLWebSocketException),
XRPLWebSocketError(Box<XRPLWebSocketException>),
#[cfg(feature = "json-rpc")]
#[error("XRPL JSON-RPC error: {0}")]
XRPLJsonRpcError(#[from] XRPLJsonRpcException),
Expand All @@ -47,10 +49,17 @@ impl From<reqwless::Error> for XRPLClientException {
}
}

#[cfg(feature = "websocket")]
impl From<XRPLWebSocketException> for XRPLClientException {
fn from(error: XRPLWebSocketException) -> Self {
XRPLClientException::XRPLWebSocketError(Box::new(error))
}
}

#[cfg(all(feature = "std", feature = "websocket"))]
impl From<tokio_tungstenite::tungstenite::Error> for XRPLClientException {
fn from(error: tokio_tungstenite::tungstenite::Error) -> Self {
XRPLClientException::XRPLWebSocketError(XRPLWebSocketException::from(error))
XRPLClientException::XRPLWebSocketError(Box::new(XRPLWebSocketException::from(error)))
}
}

Expand Down
27 changes: 10 additions & 17 deletions src/asynch/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,33 @@ pub mod transaction;
#[cfg(feature = "helpers")]
pub mod wallet;

#[allow(unused_imports)]
#[allow(clippy::needless_return)]
#[allow(unused_variables)]
async fn wait_seconds(seconds: u64) {
use core::time::Duration;

async fn wait_seconds(_seconds: u64) {
#[cfg(feature = "tokio-rt")]
{
tokio::time::sleep(tokio::time::Duration::from_secs(seconds)).await;
return;
tokio::time::sleep(tokio::time::Duration::from_secs(_seconds)).await;
}
#[cfg(feature = "embassy-rt")]
{
embassy_time::Timer::after_secs(1).await;
return;
}
#[cfg(feature = "actix-rt")]
{
actix_rt::time::sleep(Duration::from_secs(seconds)).await;
return;
use core::time::Duration;
actix_rt::time::sleep(Duration::from_secs(_seconds)).await;
}
#[cfg(feature = "async-std-rt")]
{
async_std::task::sleep(Duration::from_secs(seconds)).await;
return;
use core::time::Duration;
async_std::task::sleep(Duration::from_secs(_seconds)).await;
}
#[cfg(feature = "futures-rt")]
{
futures_timer::Delay::new(Duration::from_secs(seconds)).await;
return;
use core::time::Duration;
futures_timer::Delay::new(Duration::from_secs(_seconds)).await;
}
#[cfg(feature = "smol-rt")]
{
smol::Timer::after(Duration::from_secs(seconds)).await;
return;
use core::time::Duration;
smol::Timer::after(Duration::from_secs(_seconds)).await;
}
}
11 changes: 4 additions & 7 deletions src/asynch/transaction/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ where
let serialized_bytes = hex::decode(serialized_for_signing)?;
let signature = keypairs_sign(&serialized_bytes, &wallet.private_key)?;
let signer = Signer::new(
wallet.classic_address.clone().into(),
signature.into(),
wallet.public_key.clone().into(),
wallet.classic_address.clone(),
signature,
wallet.public_key.clone(),
);
transaction.get_mut_common_fields().signers = Some(vec![signer]);

Expand Down Expand Up @@ -435,10 +435,7 @@ where
};

if is_valid_xaddress(&account_address) {
let (address, tag, _) = match xaddress_to_classic_address(&account_address) {
Ok(t) => t,
Err(error) => return Err(error.into()),
};
let (address, tag, _) = xaddress_to_classic_address(&account_address)?;
validate_transaction_has_field(prepared_transaction, account_field_name)?;
set_transaction_field_value(prepared_transaction, account_field_name, address)?;

Expand Down
14 changes: 7 additions & 7 deletions src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -480,15 +480,15 @@ pub fn execute_command(command: &Commands) -> Result<(), CliError> {
WalletCommands::Validate { address } => {
use crate::core::addresscodec::{is_valid_classic_address, is_valid_xaddress};

let is_valid_classic = is_valid_classic_address(&address);
let is_valid_x = is_valid_xaddress(&address);
let is_valid_classic = is_valid_classic_address(address);
let is_valid_x = is_valid_xaddress(address);

if is_valid_classic {
alloc::println!("Valid classic address: {}", address);
Ok(())
} else if is_valid_x {
use crate::core::addresscodec::xaddress_to_classic_address;
let (classic_address, tag, is_test) = xaddress_to_classic_address(&address)?;
let (classic_address, tag, is_test) = xaddress_to_classic_address(address)?;
alloc::println!("Valid X-address: {}", address);
alloc::println!(" Classic address: {}", classic_address);
alloc::println!(" Destination tag: {:?}", tag);
Expand Down Expand Up @@ -786,10 +786,10 @@ pub fn execute_command(command: &Commands) -> Result<(), CliError> {
use crate::wallet::Wallet;

// Create wallet from seed
let wallet = Wallet::new(&seed, 0)?;
let wallet = Wallet::new(seed, 0)?;

// Parse the JSON
let json_value: Value = serde_json::from_str(&json)?;
let json_value: Value = serde_json::from_str(json)?;

use crate::asynch::transaction::sign;

Expand Down Expand Up @@ -857,8 +857,8 @@ pub fn execute_command(command: &Commands) -> Result<(), CliError> {
} => {
use alloc::borrow::Cow;

use crate::models::IssuedCurrencyAmount;
use crate::models::transactions::trust_set::TrustSet;
use crate::models::IssuedCurrencyAmount;
use crate::wallet::Wallet;

// Create wallet from seed
Expand Down Expand Up @@ -991,7 +991,7 @@ pub fn execute_command(command: &Commands) -> Result<(), CliError> {
Commands::Server(server_cmd) => match server_cmd {
#[cfg(feature = "std")]
ServerCommands::Fee { url } => {
use crate::ledger::{FeeType, get_fee};
use crate::ledger::{get_fee, FeeType};

// Create a runtime and client
let rt = get_or_create_runtime()?;
Expand Down
2 changes: 1 addition & 1 deletion src/core/binarycodec/types/vector256.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ impl Serialize for Vector256 {
where
S: Serializer,
{
if self.0.len() % _HASH_LENGTH_BYTES != 0 {
if !self.0.len().is_multiple_of(_HASH_LENGTH_BYTES) {
Err(S::Error::custom(XRPLVectorException::InvalidVector256Bytes))
} else {
let mut sequence = serializer.serialize_seq(None)?;
Expand Down
Loading