-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(wasm-dpp): add extra methods for state transitions #2401
base: v1.8-dev
Are you sure you want to change the base?
Changes from 18 commits
6196555
b69bcc6
6744f4e
699c633
dc5aedb
797e75b
cacc5e7
23c0672
7a04862
e3c3942
d7d184f
5901158
ec0c4d5
0aaf02a
dbbac77
711463a
bab0359
701d1b5
d77e1aa
e21ae53
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -17,6 +17,8 @@ | |||||||||||||||||||||||||||||||||||||||||||||
use serde::Serialize; | ||||||||||||||||||||||||||||||||||||||||||||||
use serde_json::Value as JsonValue; | ||||||||||||||||||||||||||||||||||||||||||||||
use wasm_bindgen::prelude::*; | ||||||||||||||||||||||||||||||||||||||||||||||
use dpp::platform_value::converter::serde_json::BTreeValueJsonConverter; | ||||||||||||||||||||||||||||||||||||||||||||||
use dpp::state_transition::documents_batch_transition::document_replace_transition::v0::v0_methods::DocumentReplaceTransitionV0Methods; | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
use crate::{ | ||||||||||||||||||||||||||||||||||||||||||||||
buffer::Buffer, | ||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -30,7 +32,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||
#[derive(Debug, Clone)] | ||||||||||||||||||||||||||||||||||||||||||||||
pub struct DocumentTransitionWasm(DocumentTransition); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
#[wasm_bindgen(js_class=DocumentTransition)] | ||||||||||||||||||||||||||||||||||||||||||||||
Check failure on line 35 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingmismatched types
|
||||||||||||||||||||||||||||||||||||||||||||||
impl DocumentTransitionWasm { | ||||||||||||||||||||||||||||||||||||||||||||||
#[wasm_bindgen(js_name=getId)] | ||||||||||||||||||||||||||||||||||||||||||||||
pub fn get_id(&self) -> IdentifierWrapper { | ||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -42,6 +44,24 @@ | |||||||||||||||||||||||||||||||||||||||||||||
self.0.document_type_name().to_owned() | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
#[wasm_bindgen(js_name=getData)] | ||||||||||||||||||||||||||||||||||||||||||||||
pub fn get_data(&self) -> JsValue { | ||||||||||||||||||||||||||||||||||||||||||||||
match &self.0 { | ||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Create(document_create_transition) => { | ||||||||||||||||||||||||||||||||||||||||||||||
let json_value = document_create_transition.data().to_json_value().unwrap(); | ||||||||||||||||||||||||||||||||||||||||||||||
json_value.serialize(&serde_wasm_bindgen::Serializer::json_compatible()).unwrap() | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Replace(document_replace_transition) => { | ||||||||||||||||||||||||||||||||||||||||||||||
let json_value = document_replace_transition.data().to_json_value().unwrap(); | ||||||||||||||||||||||||||||||||||||||||||||||
json_value.serialize(&serde_wasm_bindgen::Serializer::json_compatible()).unwrap() | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Delete(document_delete_transition) => JsValue::null(), | ||||||||||||||||||||||||||||||||||||||||||||||
Check warning on line 58 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingunused variable: `document_delete_transition`
|
||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Transfer(document_transfer_transition) => JsValue::null(), | ||||||||||||||||||||||||||||||||||||||||||||||
Check warning on line 59 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingunused variable: `document_transfer_transition`
|
||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::UpdatePrice(document_update_price_transition) => JsValue::null(), | ||||||||||||||||||||||||||||||||||||||||||||||
Check warning on line 60 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingunused variable: `document_update_price_transition`
|
||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Purchase(document_purchase_transition) => JsValue::null() | ||||||||||||||||||||||||||||||||||||||||||||||
Check warning on line 61 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingunused variable: `document_purchase_transition`
|
||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
#[wasm_bindgen(js_name=getAction)] | ||||||||||||||||||||||||||||||||||||||||||||||
pub fn get_action(&self) -> u8 { | ||||||||||||||||||||||||||||||||||||||||||||||
self.0.action_type() as u8 | ||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -67,6 +87,17 @@ | |||||||||||||||||||||||||||||||||||||||||||||
JsValue::NULL | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
#[wasm_bindgen(js_name=getEntropy)] | ||||||||||||||||||||||||||||||||||||||||||||||
pub fn get_revision(&self) -> Vec<u8> { | ||||||||||||||||||||||||||||||||||||||||||||||
Check failure on line 91 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingduplicate definitions with name `get_revision`
|
||||||||||||||||||||||||||||||||||||||||||||||
match self.0.clone() { | ||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Create(document_transition) => Vec::from(document_transition.entropy()), | ||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Replace(document_transition) => Vec::from(document_transition.entropy()), | ||||||||||||||||||||||||||||||||||||||||||||||
Check failure on line 94 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingno method named `entropy` found for enum `dpp::state_transition::documents_batch_transition::DocumentReplaceTransition` in the current scope
|
||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Delete(document_transition) => Vec::from(document_transition.entropy()), | ||||||||||||||||||||||||||||||||||||||||||||||
Check failure on line 95 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingno method named `entropy` found for enum `dpp::state_transition::documents_batch_transition::DocumentDeleteTransition` in the current scope
|
||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Transfer(document_transition) => Vec::from(document_transition.entropy()), | ||||||||||||||||||||||||||||||||||||||||||||||
Check failure on line 96 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingno method named `entropy` found for enum `dpp::state_transition::documents_batch_transition::document_transition::DocumentTransferTransition` in the current scope
|
||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::UpdatePrice(document_transition) => Vec::from(document_transition.entropy()), | ||||||||||||||||||||||||||||||||||||||||||||||
Check failure on line 97 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingno method named `entropy` found for enum `dpp::state_transition::documents_batch_transition::document_transition::DocumentUpdatePriceTransition` in the current scope
|
||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Purchase(document_transition) => Vec::from(document_transition.entropy()), | ||||||||||||||||||||||||||||||||||||||||||||||
Check failure on line 98 in packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs GitHub Actions / Rust packages (wasm-dpp) / Lintingno method named `entropy` found for enum `dpp::state_transition::documents_batch_transition::document_transition::DocumentPurchaseTransition` in the current scope
|
||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix method name and optimize performance There are two issues in this implementation:
Apply this fix: - pub fn get_revision(&self) -> Vec<u8> {
- match self.0.clone() {
+ pub fn get_entropy(&self) -> Vec<u8> {
+ match &self.0 {
DocumentTransition::Create(document_transition) => Vec::from(document_transition.entropy()),
DocumentTransition::Replace(document_transition) => Vec::from(document_transition.entropy()),
DocumentTransition::Delete(document_transition) => Vec::from(document_transition.entropy()),
DocumentTransition::Transfer(document_transition) => Vec::from(document_transition.entropy()),
DocumentTransition::UpdatePrice(document_transition) => Vec::from(document_transition.entropy()),
DocumentTransition::Purchase(document_transition) => Vec::from(document_transition.entropy()),
}
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
#[wasm_bindgen(js_name=setRevision)] | ||||||||||||||||||||||||||||||||||||||||||||||
pub fn set_revision(&mut self, revision: u32) { | ||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -82,6 +113,32 @@ | |||||||||||||||||||||||||||||||||||||||||||||
_ => false, | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
#[wasm_bindgen(js_name=getPrefundedVotingBalance)] | ||||||||||||||||||||||||||||||||||||||||||||||
pub fn get_prefunded_voting_balance(&self) -> Result<JsValue, JsValue> { | ||||||||||||||||||||||||||||||||||||||||||||||
match &self.0 { | ||||||||||||||||||||||||||||||||||||||||||||||
DocumentTransition::Create(create_transition) => { | ||||||||||||||||||||||||||||||||||||||||||||||
let prefunded_voting_balance = create_transition.prefunded_voting_balance().clone(); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
if prefunded_voting_balance.is_none() { | ||||||||||||||||||||||||||||||||||||||||||||||
return Ok(JsValue::null()) | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
let (index_name, credits) = prefunded_voting_balance.unwrap(); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
let js_object = js_sys::Object::new(); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
js_sys::Reflect::set( | ||||||||||||||||||||||||||||||||||||||||||||||
&js_object, | ||||||||||||||||||||||||||||||||||||||||||||||
&JsValue::from_str(&index_name), | ||||||||||||||||||||||||||||||||||||||||||||||
&JsValue::from(credits), | ||||||||||||||||||||||||||||||||||||||||||||||
)?; | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
Ok(JsValue::from(js_object)) | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
_ => Ok(JsValue::null()), | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
impl From<DocumentTransition> for DocumentTransitionWasm { | ||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add error handling for JSON conversion.
While the implementation is generally good, the unwrap calls on JSON conversion could lead to runtime panics.
Consider handling potential conversion errors:
📝 Committable suggestion