Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ where
balance
}
StateTransition::IdentityCreditWithdrawal(_) => {
// TODO: make it as a top-up, but in reverse
return Err(ProtocolError::InvalidStateTransitionTypeError(
InvalidStateTransitionTypeError::new(
StateTransitionType::IdentityCreditWithdrawal as u8,
Expand Down Expand Up @@ -177,19 +178,19 @@ where
st: &impl StateTransitionIdentitySigned,
) -> Result<u64, ProtocolError> {
let identity_id = st.get_owner_id();

let balance = self
let maybe_balance = self
.state_repository
.fetch_identity_balance(identity_id, Some(st.get_execution_context()))
.await?
.ok_or_else(|| {
NonConsensusError::StateRepositoryFetchError(format!(
"state repository fetch identity balance error: {}",
*identity_id
))
})?;

Ok(balance)
.await
.map_err(ProtocolError::from)?;

if let Some(balance) = maybe_balance {
Ok(balance)
} else {
Err(ProtocolError::IdentityNotPresentError(
IdentityNotPresentError::new(*identity_id),
))
}
}
}

Expand Down Expand Up @@ -263,7 +264,7 @@ mod test {
identity.balance = 1;
state_repository_mock
.expect_fetch_identity_balance()
.returning(move |_, _| Ok(Some(identity.balance)));
.returning(move |_, _| Ok(Some(identity.get_balance())));

let data_contract = get_data_contract_fixture(None);
let data_contract_create_transition = DataContractCreateTransition {
Expand Down Expand Up @@ -291,7 +292,7 @@ mod test {
identity.balance = 52;
state_repository_mock
.expect_fetch_identity_balance()
.returning(move |_, _| Ok(Some(identity.balance)));
.returning(move |_, _| Ok(Some(identity.get_balance())));

let data_contract = get_data_contract_fixture(None);
let data_contract_create_transition = DataContractCreateTransition {
Expand All @@ -317,7 +318,7 @@ mod test {
identity.balance = 1;
state_repository_mock
.expect_fetch_identity_balance()
.returning(move |_, _| Ok(Some(identity.balance)));
.returning(move |_, _| Ok(Some(identity.get_balance())));

let data_contract = get_data_contract_fixture(None);
let documents =
Expand Down Expand Up @@ -348,7 +349,7 @@ mod test {
identity.balance = 90;
state_repository_mock
.expect_fetch_identity_balance()
.returning(move |_, _| Ok(Some(identity.balance)));
.returning(move |_, _| Ok(Some(identity.get_balance())));

let data_contract = get_data_contract_fixture(None);
let documents =
Expand Down Expand Up @@ -377,7 +378,7 @@ mod test {
identity.balance = 1;
state_repository_mock
.expect_fetch_identity_balance()
.returning(move |_, _| Ok(Some(identity.balance)));
.returning(move |_, _| Ok(Some(identity.get_balance())));

let data_contract = get_data_contract_fixture(None);
let documents =
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,26 @@
module.exports = require('@dashevo/dpp/lib/test/fixtures/getIdentityTopUpTransitionFixture');
const PrivateKey = require('@dashevo/dashcore-lib/lib/privatekey');

const getInstantAssetLockProofFixture = require('./getInstantAssetLockProofFixture');
const generateRandomIdentifier = require('../utils/generateRandomIdentifierAsync');

const { default: loadWasmDpp } = require('../../..');
let { IdentityTopUpTransition } = require('../../..');

/**
* @param {PrivateKey} oneTimePrivateKey
*
* @return {IdentityCreateTransition}
*/
module.exports = async function getIdentityCreateTransitionFixture(
oneTimePrivateKey = new PrivateKey(),
) {
({ IdentityTopUpTransition } = await loadWasmDpp());
const rawStateTransition = {
protocolVersion: 1,
type: 3,
assetLockProof: (await getInstantAssetLockProofFixture(oneTimePrivateKey)).toObject(),
identityId: await generateRandomIdentifier(),
};

return new IdentityTopUpTransition(rawStateTransition);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = require('@dashevo/dpp/lib/test/fixtures/getIdentityTopUpTransitionFixture');
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ impl BalanceIsNotEnoughErrorWasm {
}

#[wasm_bindgen(js_name=getBalance)]
pub fn get_balance(&self) -> Credits {
self.inner.balance()
pub fn get_balance(&self) -> f64 {
self.inner.balance() as f64
}

#[wasm_bindgen(js_name=getFee)]
pub fn get_fee(&self) -> Credits {
self.inner.fee()
pub fn get_fee(&self) -> f64 {
self.inner.fee() as f64
}

#[wasm_bindgen(js_name=getCode)]
Expand Down
7 changes: 7 additions & 0 deletions packages/wasm-dpp/src/identity/credits_converter.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
use dpp::identity::RATIO;
use wasm_bindgen::prelude::wasm_bindgen;

#[wasm_bindgen(js_name=getCreditsConversionRatio)]
pub fn credit_conversion_ratio() -> f64 {
RATIO as f64
}
1 change: 1 addition & 0 deletions packages/wasm-dpp/src/identity/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ use crate::buffer::Buffer;
use crate::errors::from_dpp_err;
pub use state_transition::*;

pub mod credits_converter;
pub mod errors;
pub mod state_transition;

Expand Down
2 changes: 2 additions & 0 deletions packages/wasm-dpp/src/state_transition/fee/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use dpp::state_transition::fee::operations::Operation;
use wasm_bindgen::prelude::*;

pub use operations::*;

use crate::utils::Inner;
mod calculate_operation_fees;
mod calculate_state_transition_fee;
Expand Down
1 change: 1 addition & 0 deletions packages/wasm-dpp/src/state_transition/validation/mod.rs
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
pub mod state_transition_fee_validator;
pub mod validate_state_transition_identity_signature;
pub mod validate_state_transition_key_signature;
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
use dpp::state_transition::validation::validate_state_transition_fee::StateTransitionFeeValidator;
use std::sync::Arc;
use wasm_bindgen::prelude::wasm_bindgen;
use wasm_bindgen::JsValue;

use crate::state_transition::conversion::create_state_transition_from_wasm_instance;
use crate::utils::WithJsError;
use crate::validation::ValidationResultWasm;

#[wasm_bindgen(js_name=StateTransitionFeeValidator)]
pub struct StateTransitionFeeValidatorWasm(
StateTransitionFeeValidator<ExternalStateRepositoryLikeWrapper>,
);

#[wasm_bindgen(js_class=StateTransitionFeeValidator)]
impl StateTransitionFeeValidatorWasm {
#[wasm_bindgen(constructor)]
pub fn new(state_repository: ExternalStateRepositoryLike) -> Self {
Self(StateTransitionFeeValidator::new(Arc::new(
ExternalStateRepositoryLikeWrapper::new(state_repository),
)))
}

#[wasm_bindgen]
pub async fn validate(
&self,
state_transition: &JsValue,
) -> Result<ValidationResultWasm, JsValue> {
let st = create_state_transition_from_wasm_instance(state_transition)?;
Ok(self
.0
.validate(&st)
.await
.map(|v| v.map(|_| JsValue::undefined()))
.with_js_error()?
.into())
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
const getIdentityTopUpTransitionFixture = require('../../../../../../../lib/test/fixtures/getIdentityTopUpTransitionFixture');
const getIdentityTopUpTransitionFixture = require('../../../../../../../lib/test/fixtures/getIdentityTopUpTransitionFixtureJs');

const {
expectJsonSchemaError,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ describe('StateTransitionFacade', () => {
});

it('should return invalid result if not enough balance to pay fee for State Transition', async () => {
identity.setBalance(0);
stateRepositoryMock.fetchIdentityBalance.resolves(0);
const result = await dpp.stateTransition.validate(dataContractCreateTransition);

Expand Down
Loading