Skip to content

Commit

Permalink
Release v0.34.0
Browse files Browse the repository at this point in the history
  • Loading branch information
shaynekellyii committed Feb 21, 2024
1 parent 0d450c1 commit 94ccb5b
Show file tree
Hide file tree
Showing 124 changed files with 7,997 additions and 6,020 deletions.
4,817 changes: 3,072 additions & 1,745 deletions examples/bank-emulator/Cargo.nix

Large diffs are not rendered by default.

21 changes: 12 additions & 9 deletions examples/bank-emulator/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,38 +9,41 @@ default-members = ["."]

[dependencies]
actix-web = "4.1"
actix-multipart = "0.4.0"
actix-multipart = "0.6.1"
async-trait = "0.1"
base64 = "0.13"
biscuit = "0.5"
chrono = { version = "0.4", features = ["serde"] }
chrono = { version = "0.4.31", features = ["serde"] }
oneline-eyre = "0.1"
config = { version = "0.11", default-features = false, features = ["toml"] }
enumflags2 = "0.7"
eyre = "0.6"
flume = "0.10"
flume = "0.11"
futures-util = "0.3"
hex = { version = "0.4", features = ["serde"] }
hyper = "0.14"
hyper = "0.14.28"
prost = "0.8"
prost-types = "0.8"
rand = "0.8.5"
reqwest = { version = "0.11", default-features = false, features = ["json", "rustls-tls", "multipart"] }
rust_decimal = "1.14"
sqlx = { version = "0.5", features = ["runtime-tokio-rustls", "postgres", "offline", "chrono", "uuid", "json"] }
sqlx = { version = "0.6.3", features = ["runtime-tokio-rustls", "postgres", "offline", "chrono", "uuid", "json"] }
serde = { version = "1", features = ["derive", "rc"] }
serde_json = "1"
serde_with = "1"
smol_str = "0.1"
tracing-actix-web = "0.6"
tracing = "0.1"
tracing-subscriber = { version = "0.2", default-features = false, features = ["env-filter", "smallvec", "ansi", "parking_lot"] }
tracing-error = "0.1"
tracing-subscriber = { version = "0.3", default-features = false, features = ["env-filter", "smallvec", "ansi", "parking_lot"] }
tracing-error = "0.2"
tokio = { version = "1.25", features = ["full"] }
tonic = "0.5"
uuid = { version = "0.8", features = ["serde"] }

m10-bank-emulator-protos = { path = "../../shared/rust/bank-emulator-protos", features = ["client"] }
m10-rds-pool = { path = "../rds-pool" }
m10-sdk = "0.33.0"
m10-sdk = "0.34.0"
pala-types = { path = "../../shared/rust/pala-types" }

[dependencies.uuid]
version = "1.7.0"
features = ["v4","serde"]
4 changes: 2 additions & 2 deletions examples/bank-emulator/flake.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
description = "m10-bank-emulator";
inputs = {
rust-overlay.url = "github:oxalica/rust-overlay?rev=dea24da3d3be23ab53ee80314474afd5fcb03c1c";
rust-overlay.url = "github:oxalica/rust-overlay?rev=61dfa5a8129f7edbe9150253c68f673f87b16fb1";
flake-utils.url = "github:numtide/flake-utils";
cargo2nix.url = "github:cargo2nix/cargo2nix?rev=c149357cc3d17f2849c73eb7a09d07a307cdcfe8";
nixpkgs.follows = "cargo2nix/nixpkgs";
Expand All @@ -20,7 +20,7 @@
m10-protos = import ../../nix/protos.nix { inherit pkgs; };
rust-overrides = import ../../nix/rust-overrides.nix { inherit m10-protos; };
rustPkgs = pkgs.rustBuilder.makePackageSet {
rustChannel = "1.71.1";
rustChannel = "1.75.0";
packageFun = import ./Cargo.nix;
packageOverrides = rust-overrides;
};
Expand Down
4 changes: 2 additions & 2 deletions examples/bank-emulator/integration-tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ serde = { version = "1", features = ["derive"] }
serde_json = "1"
tonic = "0.5"
tokio = { version = "1.7.0", features = ["full"] }
uuid = { version = "0.8", features = ["serde"] }
uuid = { version = "1.7.0", features = ["v4", "serde"] }
m10-bank-emulator = { path = ".." }
m10-sdk = "0.33.0"
m10-sdk = "0.34.0"
60 changes: 25 additions & 35 deletions examples/bank-emulator/integration-tests/src/accounts.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use m10_bank_emulator::models::*;
use m10_sdk::{sdk, LedgerClient, Signer};
use m10_sdk::Signer;
use m10_sdk::{StepBuilder, TransferBuilder};
use serde_json::json;
use serde_json::Value;

Expand Down Expand Up @@ -299,26 +300,15 @@ async fn accounts_wire_routes() {
.await;
println!("bank asset: {:?}", bank_asset);

let req = LedgerClient::transaction_request(
sdk::CreateTransfer {
transfer_steps: vec![sdk::TransferStep {
amount: 2200,
from_account_id: asset.ledger_account_id,
to_account_id: bank_asset.ledger_account_id,
metadata: vec![],
}],
},
vec![],
);
let mut ledger = crate::ledger_client();
let ledger = crate::ledger_client(key_pair);

let txn_id = ledger
.create_transaction(key_pair.sign_request(req).await.unwrap())
.await
.unwrap()
.tx_error()
.unwrap()
.tx_id;
let transfer = TransferBuilder::new().step(StepBuilder::new(
asset.ledger_account_id.as_slice().try_into().unwrap(),
bank_asset.ledger_account_id.as_slice().try_into().unwrap(),
2200,
));

let txn_id = m10_sdk::transfer(&ledger, transfer).await.unwrap();

let balance_before = balance_after;
let transfer = client
Expand Down Expand Up @@ -464,14 +454,14 @@ async fn accounts_wire_routes() {
.find(|a| a.asset_type == AssetType::IndirectCbdc)
.expect("cbdc asset");

let request = key_pair
.sign_request(sdk::GetAccountRequest {
id: regulated_asset.ledger_account_id.to_vec(),
})
.await
.expect("request signed");
let regulated_account_before = ledger
.get_indexed_account(request.clone())
.get_account(
regulated_asset
.ledger_account_id
.as_slice()
.try_into()
.unwrap(),
)
.await
.expect("regulated ledger account");

Expand Down Expand Up @@ -515,17 +505,17 @@ async fn accounts_wire_routes() {
tokio::time::sleep(std::time::Duration::from_millis(5000)).await;

let regulated_account_after = ledger
.get_indexed_account(request)
.get_account(
regulated_asset
.ledger_account_id
.as_slice()
.try_into()
.unwrap(),
)
.await
.expect("regulated ledger account");
let request = key_pair
.sign_request(sdk::GetAccountRequest {
id: cbdc_asset.ledger_account_id.to_vec(),
})
.await
.expect("request signed");
let cbdc_account = ledger
.get_indexed_account(request)
.get_account(cbdc_asset.ledger_account_id.as_slice().try_into().unwrap())
.await
.expect("cbdc ledger account");

Expand Down
15 changes: 9 additions & 6 deletions examples/bank-emulator/integration-tests/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,15 @@ fn ledger_addr() -> String {
}

#[cfg(test)]
fn ledger_client() -> m10_sdk::LedgerClient {
m10_sdk::LedgerClient::new(
tonic::transport::Channel::from_shared(ledger_addr())
.unwrap()
.connect_lazy()
.unwrap(),
fn ledger_client(
key_pair: m10_sdk::Ed25519,
) -> Box<dyn m10_sdk::M10CoreClient<Signer = m10_sdk::Ed25519> + Send + Sync> {
Box::new(
m10_sdk::GrpcClient::new(
tonic::transport::Channel::from_shared(ledger_addr()).unwrap(),
Some(std::sync::Arc::new(key_pair)),
)
.unwrap(),
)
}

Expand Down
26 changes: 8 additions & 18 deletions examples/bank-emulator/src/cbdc.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use futures_util::StreamExt;
use m10_sdk::{
sdk::{self, transaction_data::Data, FinalizedTransaction},
Metadata, Signer, TransactionExt,
Metadata, TransactionExt,
};
use pala_types::TxId;
use sqlx::Acquire;
Expand Down Expand Up @@ -103,17 +103,12 @@ impl CbdcAdjustmentHandler {
.get(currency_code)
.and_then(|c| c.cbdc_config.as_ref())
{
let mut client = self.context.ledger.clone();

// Get balance of target account
let request = self
let indexed_account = self
.context
.signer
.sign_request(sdk::GetAccountRequest {
id: target.to_vec(),
})
.ledger
.get_account(target.as_slice().try_into()?)
.await?;
let indexed_account = client.get_indexed_account(request).await?;
debug!(
"account {} balance {}",
hex::encode(target),
Expand Down Expand Up @@ -244,23 +239,18 @@ impl CbdcReserveHandler {
} = issuing_transfer;
if let Some(currency) = self.context.config.currencies.get(currency_code) {
if let Some(cbdc_config) = &currency.cbdc_config {
let mut client = self.context.ledger.clone();

// Get balance of target account
let request = self
let indexed_account = self
.context
.signer
.sign_request(sdk::GetAccountRequest {
id: target.to_vec(),
})
.ledger
.get_account(target.as_slice().try_into()?)
.await?;
let indexed_account = client.get_indexed_account(request).await?;
debug!(
"account {} balance {}",
hex::encode(target),
indexed_account.balance
);
let issued = indexed_account.issuance.map(|i| i.issued_balance);
let issued = indexed_account.issuance.map(|i| i.balance);
if let Some(issued_balance) = issued {
// Difference between holding and issuance balance.
// Note: If account was never funded this difference can be negative.
Expand Down
26 changes: 11 additions & 15 deletions examples/bank-emulator/src/config.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#![allow(dead_code)]
pub use config::{ConfigError, File};
pub use config::ConfigError;
use m10_bank_emulator_protos::emulator::rtgs::{
bank_registration_request::BankAccountType, open_account_request::HolderType,
requisition_funds_request::RequisitionType, rtgs_service_client::RtgsServiceClient,
AccountRequest, AccountType, BankRegistrationRequest, OpenAccountRequest,
RequisitionFundsRequest,
};
use m10_sdk::{sdk::GetBankRequest, Signer};
use m10_sdk::{BankAccountType as SdkBankAccountType, Signer};
use rust_decimal::Decimal;
use serde::Deserialize;
use sqlx::Acquire;
Expand Down Expand Up @@ -112,27 +112,23 @@ impl CurrencyConfig {
let registration_request = BankRegistrationRequest {
institute: context.config.bank_name.clone(),
swift_code: context.config.swift_code.clone(),
public_key: context.signer.public_key().to_vec(),
public_key: context.ledger.signer()?.public_key().to_vec(),
currency_code: self.code.to_uppercase(),
display_name: context.config.bank_name.clone(),
short_display: context.config.short_name.clone(),
accounts,
};
let bank_data = rtgs.register_bank(registration_request).await?.into_inner();
currency.bank_id = Some(bank_data.bank_meta_data.to_vec());
let request = context
.signer
.sign_request(GetBankRequest {
id: bank_data.bank_meta_data,
})
.await?;
let bank_meta_data = context.ledger.clone().get_bank(request).await?;
let bank_meta_data = context.ledger.get_bank(bank_data.bank_meta_data).await?;
for a in bank_meta_data.accounts {
let account_type = BankAccountType::from_i32(a.account_type)
.ok_or_else(|| Error::validation("accounts", "unknown account type"))?;
match account_type {
BankAccountType::Cbdc => currency.cbdc_account = Some(a.account_id),
BankAccountType::Drm => currency.regulated_account = Some(a.account_id),
match a.account_type {
SdkBankAccountType::CentralBankDigitalCurrency => {
currency.cbdc_account = Some(a.id.to_vec())
}
SdkBankAccountType::DigitalRegulatedMoney => {
currency.regulated_account = Some(a.id.to_vec())
}
};
}
currency.update(&mut txn).await?;
Expand Down
18 changes: 10 additions & 8 deletions examples/bank-emulator/src/context.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#![allow(dead_code)]
use std::sync::Arc;

use m10_rds_pool::{bb8, RdsManager};
use m10_sdk::{
client::Channel, directory::directory_service_client::DirectoryServiceClient, LedgerClient,
};
use m10_sdk::M10CoreClient;
use m10_sdk::{directory::directory_service_client::DirectoryServiceClient, GrpcClient};
use sqlx::Acquire;

use crate::emulator::BankEmulator;
Expand All @@ -15,9 +16,8 @@ use crate::{

#[derive(Clone)]
pub(crate) struct Context {
pub(crate) ledger: LedgerClient,
pub(crate) signer: ProxySigner,
pub(crate) directory: DirectoryServiceClient<Channel>,
pub(crate) ledger: Arc<Box<dyn M10CoreClient<Signer = ProxySigner> + Send + Sync>>,
pub(crate) directory: DirectoryServiceClient<tonic::transport::Channel>,
pub(crate) bank: BankEmulator,
pub(crate) db_pool: bb8::Pool<RdsManager>,
pub(crate) config: Config,
Expand All @@ -34,8 +34,10 @@ impl Context {
db_pool.clone()
};
Ok(Self {
ledger: LedgerClient::new(config.ledger_addr.connect_lazy()?),
signer: ProxySigner::new(&config),
ledger: Arc::new(Box::new(GrpcClient::new(
config.ledger_addr.clone(),
Some(std::sync::Arc::new(ProxySigner::new(&config))),
)?)),
directory: DirectoryServiceClient::new(config.directory_addr.connect_lazy()?),
bank: BankEmulator::new_from_config(emulator_config, bank_db_pool).await?,
db_pool,
Expand Down
Loading

0 comments on commit 94ccb5b

Please sign in to comment.