Skip to content

Commit 0bd29a6

Browse files
authored
feat(dpp): extra methods for state transitions in wasm (#2462)
1 parent 1eae781 commit 0bd29a6

File tree

15 files changed

+372
-51
lines changed

15 files changed

+372
-51
lines changed

packages/rs-dpp/src/state_transition/state_transitions/document/documents_batch_transition/document_transition/action_type.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ impl TryFrom<&str> for DocumentTransitionActionType {
3939
"replace" => Ok(DocumentTransitionActionType::Replace),
4040
"delete" => Ok(DocumentTransitionActionType::Delete),
4141
"transfer" => Ok(DocumentTransitionActionType::Transfer),
42+
"purchase" => Ok(DocumentTransitionActionType::Purchase),
43+
"updatePrice" => Ok(DocumentTransitionActionType::UpdatePrice),
4244
action_type => Err(ProtocolError::Generic(format!(
4345
"unknown action type {action_type}"
4446
))),

packages/rs-dpp/src/state_transition/state_transitions/document/documents_batch_transition/document_transition/mod.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ pub trait DocumentTransitionV0Methods {
4444
fn get_dynamic_property(&self, path: &str) -> Option<&Value>;
4545
/// get the id
4646
fn get_id(&self) -> Identifier;
47-
/// get the document type
47+
/// get the entropy
48+
fn entropy(&self) -> Option<Vec<u8>>;
4849
fn document_type_name(&self) -> &String;
4950
/// get the data contract id
5051
fn data_contract_id(&self) -> Identifier;
@@ -167,6 +168,17 @@ impl DocumentTransitionV0Methods for DocumentTransition {
167168
self.base().document_type_name()
168169
}
169170

171+
fn entropy(&self) -> Option<Vec<u8>> {
172+
match self {
173+
DocumentTransition::Create(t) => Some(Vec::from(t.entropy())),
174+
DocumentTransition::Replace(t) => None,
175+
DocumentTransition::Delete(t) => None,
176+
DocumentTransition::Transfer(t) => None,
177+
DocumentTransition::UpdatePrice(t) => None,
178+
DocumentTransition::Purchase(t) => None,
179+
}
180+
}
181+
170182
fn data_contract_id(&self) -> Identifier {
171183
self.base().data_contract_id()
172184
}

packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,27 @@ impl DataContractCreateTransitionWasm {
8181
pub fn get_type(&self) -> u32 {
8282
self.0.state_transition_type() as u32
8383
}
84+
85+
#[wasm_bindgen(js_name=setUserFeeIncrease)]
86+
pub fn set_user_fee_increase(&mut self, user_fee_increase: u16) {
87+
self.0.set_user_fee_increase(user_fee_increase);
88+
}
89+
90+
#[wasm_bindgen(js_name=getUserFeeIncrease)]
91+
pub fn get_user_fee_increase(&self) -> u16 {
92+
self.0.user_fee_increase() as u16
93+
}
94+
95+
#[wasm_bindgen(js_name=getSignature)]
96+
pub fn get_signature(&self) -> Buffer {
97+
Buffer::from_bytes(self.0.signature().as_slice())
98+
}
99+
100+
#[wasm_bindgen(js_name=getSignaturePublicKeyId)]
101+
pub fn get_signature_public_key_id(&self) -> u32 {
102+
self.0.signature_public_key_id()
103+
}
104+
84105
//
85106
// #[wasm_bindgen(js_name=toJSON)]
86107
// pub fn to_json(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {

packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,36 @@ impl DataContractUpdateTransitionWasm {
7373
self.0.owner_id().into()
7474
}
7575

76+
#[wasm_bindgen(js_name=getIdentityContractNonce)]
77+
pub fn get_identity_contract_nonce(&self) -> u64 {
78+
self.0.identity_contract_nonce() as u64
79+
}
80+
7681
#[wasm_bindgen(js_name=getType)]
7782
pub fn get_type(&self) -> u32 {
7883
self.0.state_transition_type() as u32
7984
}
8085

86+
#[wasm_bindgen(js_name=getUserFeeIncrease)]
87+
pub fn get_user_fee_increase(&self) -> u16 {
88+
self.0.user_fee_increase() as u16
89+
}
90+
91+
#[wasm_bindgen(js_name=setUserFeeIncrease)]
92+
pub fn set_user_fee_increase(&mut self, user_fee_increase: u16) {
93+
self.0.set_user_fee_increase(user_fee_increase);
94+
}
95+
96+
#[wasm_bindgen(js_name=getSignature)]
97+
pub fn get_signature(&self) -> Buffer {
98+
Buffer::from_bytes(self.0.signature().as_slice())
99+
}
100+
101+
#[wasm_bindgen(js_name=getSignaturePublicKeyId)]
102+
pub fn get_signature_public_key_id(&self) -> u32 {
103+
self.0.signature_public_key_id()
104+
}
105+
81106
// #[wasm_bindgen(js_name=toJSON)]
82107
// pub fn to_json(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
83108
// let serializer = serde_wasm_bindgen::Serializer::json_compatible();

packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ use dpp::state_transition::documents_batch_transition::document_create_transitio
44

55
use dpp::document::INITIAL_REVISION;
66

7+
use dpp::state_transition::documents_batch_transition::document_base_transition::v0::v0_methods::DocumentBaseTransitionV0Methods;
8+
use dpp::state_transition::documents_batch_transition::document_create_transition::v0::v0_methods::DocumentCreateTransitionV0Methods;
79
use wasm_bindgen::prelude::*;
810

911
#[wasm_bindgen(js_name=DocumentCreateTransition)]
@@ -81,6 +83,45 @@ impl DocumentCreateTransitionWasm {
8183
INITIAL_REVISION as u32
8284
}
8385

86+
#[wasm_bindgen(js_name = getEntropy)]
87+
pub fn get_entropy(&self) -> Vec<u8> {
88+
Vec::from(self.inner.entropy())
89+
}
90+
91+
#[wasm_bindgen(js_name=getIdentityContractNonce)]
92+
pub fn get_identity_contract_nonce(&self) -> u64 {
93+
self.inner.base().identity_contract_nonce() as u64
94+
}
95+
96+
#[wasm_bindgen(js_name=setIdentityContractNonce)]
97+
pub fn set_identity_contract_nonce(&mut self, identity_contract_nonce: u64) -> () {
98+
let mut base = self.inner.base().clone();
99+
100+
base.set_identity_contract_nonce(identity_contract_nonce);
101+
102+
self.inner.set_base(base)
103+
}
104+
105+
#[wasm_bindgen(js_name = getPrefundedVotingBalance)]
106+
pub fn get_prefunded_voting_balance(&self) -> Result<JsValue, JsValue> {
107+
let prefunded_voting_balance = self.inner.prefunded_voting_balance().clone();
108+
109+
match prefunded_voting_balance {
110+
None => Ok(JsValue::null()),
111+
Some((index_name, credits)) => {
112+
let js_object = js_sys::Object::new();
113+
114+
js_sys::Reflect::set(
115+
&js_object,
116+
&JsValue::from_str(&index_name),
117+
&JsValue::from(credits),
118+
)?;
119+
120+
Ok(JsValue::from(js_object))
121+
}
122+
}
123+
}
124+
84125
// // AbstractDocumentTransitionMethods
85126
// #[wasm_bindgen(js_name=getId)]
86127
// pub fn id(&self) -> IdentifierWrapper {

packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,30 @@ impl DocumentDeleteTransitionWasm {
6868
self.inner.base().document_type_name().clone()
6969
}
7070

71+
#[wasm_bindgen(js_name = getEntropy)]
72+
pub fn get_entropy(&self) -> Vec<u8> {
73+
Vec::from(self.inner.entropy())
74+
}
75+
7176
#[wasm_bindgen(js_name=getDataContractId)]
7277
pub fn data_contract_id(&self) -> IdentifierWrapper {
7378
self.inner.base().data_contract_id().into()
7479
}
7580

81+
#[wasm_bindgen(js_name=getIdentityContractNonce)]
82+
pub fn get_identity_contract_nonce(&self) -> u64 {
83+
self.inner.base().identity_contract_nonce() as u64
84+
}
85+
86+
#[wasm_bindgen(js_name=setIdentityContractNonce)]
87+
pub fn set_identity_contract_nonce(&mut self, identity_contract_nonce: u64) -> () {
88+
let mut base = self.inner.base().clone();
89+
90+
base.set_identity_contract_nonce(identity_contract_nonce);
91+
92+
self.inner.set_base(base)
93+
}
94+
7695
#[wasm_bindgen(js_name=get)]
7796
pub fn get(&self, path: String) -> Result<JsValue, JsValue> {
7897
let _ = path;

packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ impl DocumentReplaceTransitionWasm {
9696
self.inner.revision()
9797
}
9898

99+
#[wasm_bindgen(js_name = getEntropy)]
100+
pub fn get_entropy(&self) -> Vec<u8> {
101+
Vec::from(self.inner.entropy())
102+
}
103+
99104
#[wasm_bindgen(js_name=getUpdatedAt)]
100105
pub fn updated_at(&self) -> Option<js_sys::Date> {
101106
self.inner
@@ -189,6 +194,20 @@ impl DocumentReplaceTransitionWasm {
189194
self.inner.base().data_contract_id().into()
190195
}
191196

197+
#[wasm_bindgen(js_name=getIdentityContractNonce)]
198+
pub fn get_identity_contract_nonce(&self) -> u64 {
199+
self.inner.base().identity_contract_nonce() as u64
200+
}
201+
202+
#[wasm_bindgen(js_name=setIdentityContractNonce)]
203+
pub fn set_identity_contract_nonce(&mut self, identity_contract_nonce: u64) -> () {
204+
let mut base = self.inner.base().clone();
205+
206+
base.set_identity_contract_nonce(identity_contract_nonce);
207+
208+
self.inner.set_base(base)
209+
}
210+
192211
#[wasm_bindgen(js_name=get)]
193212
pub fn get(&self, path: String) -> Result<JsValue, JsValue> {
194213
let document_data = if let Some(ref data) = self.inner.data() {

packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ use dpp::{
1717
use serde::Serialize;
1818
use serde_json::Value as JsonValue;
1919
use wasm_bindgen::prelude::*;
20+
use dpp::platform_value::converter::serde_json::BTreeValueJsonConverter;
21+
use dpp::state_transition::documents_batch_transition::document_base_transition::DocumentBaseTransition;
22+
use dpp::state_transition::documents_batch_transition::document_replace_transition::v0::v0_methods::DocumentReplaceTransitionV0Methods;
2023

2124
use crate::{
2225
buffer::Buffer,
@@ -42,6 +45,28 @@ impl DocumentTransitionWasm {
4245
self.0.document_type_name().to_owned()
4346
}
4447

48+
#[wasm_bindgen(js_name=getData)]
49+
pub fn get_data(&self) -> JsValue {
50+
match &self.0 {
51+
DocumentTransition::Create(document_create_transition) => {
52+
let json_value = document_create_transition.data().to_json_value().unwrap();
53+
json_value
54+
.serialize(&serde_wasm_bindgen::Serializer::json_compatible())
55+
.unwrap()
56+
}
57+
DocumentTransition::Replace(document_replace_transition) => {
58+
let json_value = document_replace_transition.data().to_json_value().unwrap();
59+
json_value
60+
.serialize(&serde_wasm_bindgen::Serializer::json_compatible())
61+
.unwrap()
62+
}
63+
DocumentTransition::Delete(document_delete_transition) => JsValue::null(),
64+
DocumentTransition::Transfer(document_transfer_transition) => JsValue::null(),
65+
DocumentTransition::UpdatePrice(document_update_price_transition) => JsValue::null(),
66+
DocumentTransition::Purchase(document_purchase_transition) => JsValue::null(),
67+
}
68+
}
69+
4570
#[wasm_bindgen(js_name=getAction)]
4671
pub fn get_action(&self) -> u8 {
4772
self.0.action_type() as u8
@@ -59,6 +84,13 @@ impl DocumentTransitionWasm {
5984
Ok(())
6085
}
6186

87+
#[wasm_bindgen(js_name=getIdentityContractNonce)]
88+
pub fn get_identity_contract_nonce(&self) -> JsValue {
89+
match self.0.base() {
90+
DocumentBaseTransition::V0(v0) => JsValue::from(v0.identity_contract_nonce),
91+
}
92+
}
93+
6294
#[wasm_bindgen(js_name=getRevision)]
6395
pub fn get_revision(&self) -> JsValue {
6496
if let Some(revision) = self.0.revision() {
@@ -67,6 +99,10 @@ impl DocumentTransitionWasm {
6799
JsValue::NULL
68100
}
69101
}
102+
#[wasm_bindgen(js_name=getEntropy)]
103+
pub fn get_entropy(&self) -> Option<Vec<u8>> {
104+
self.0.entropy()
105+
}
70106

71107
#[wasm_bindgen(js_name=setRevision)]
72108
pub fn set_revision(&mut self, revision: u32) {
@@ -82,6 +118,32 @@ impl DocumentTransitionWasm {
82118
_ => false,
83119
}
84120
}
121+
122+
#[wasm_bindgen(js_name=getPrefundedVotingBalance)]
123+
pub fn get_prefunded_voting_balance(&self) -> Result<JsValue, JsValue> {
124+
match &self.0 {
125+
DocumentTransition::Create(create_transition) => {
126+
let prefunded_voting_balance = create_transition.prefunded_voting_balance().clone();
127+
128+
if prefunded_voting_balance.is_none() {
129+
return Ok(JsValue::null());
130+
}
131+
132+
let (index_name, credits) = prefunded_voting_balance.unwrap();
133+
134+
let js_object = js_sys::Object::new();
135+
136+
js_sys::Reflect::set(
137+
&js_object,
138+
&JsValue::from_str(&index_name),
139+
&JsValue::from(credits),
140+
)?;
141+
142+
Ok(JsValue::from(js_object))
143+
}
144+
_ => Ok(JsValue::null()),
145+
}
146+
}
85147
}
86148

87149
impl From<DocumentTransition> for DocumentTransitionWasm {

packages/wasm-dpp/src/document/state_transition/document_batch_transition/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,16 @@ impl DocumentsBatchTransitionWasm {
9898
self.0.owner_id().to_owned().into()
9999
}
100100

101+
#[wasm_bindgen(js_name=getUserFeeIncrease)]
102+
pub fn get_user_fee_increase(&self) -> u16 {
103+
self.0.user_fee_increase() as u16
104+
}
105+
106+
#[wasm_bindgen(js_name=setUserFeeIncrease)]
107+
pub fn set_user_fee_increase(&mut self, user_fee_increase: u16) {
108+
self.0.set_user_fee_increase(user_fee_increase);
109+
}
110+
101111
#[wasm_bindgen(js_name=getTransitions)]
102112
pub fn get_transitions(&self) -> js_sys::Array {
103113
let array = js_sys::Array::new();

packages/wasm-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,16 @@ impl IdentityCreateTransitionWasm {
167167
(IdentityCreateTransitionAccessorsV0::owner_id(&self.0)).into()
168168
}
169169

170+
#[wasm_bindgen(js_name=getUserFeeIncrease)]
171+
pub fn get_user_fee_increase(&self) -> u16 {
172+
self.0.user_fee_increase() as u16
173+
}
174+
175+
#[wasm_bindgen(js_name=setUserFeeIncrease)]
176+
pub fn set_user_fee_increase(&mut self, user_fee_increase: u16) {
177+
self.0.set_user_fee_increase(user_fee_increase);
178+
}
179+
170180
#[wasm_bindgen(js_name=toObject)]
171181
pub fn to_object(&self, options: JsValue) -> Result<JsValue, JsValue> {
172182
let opts: super::to_object::ToObjectOptions = if options.is_object() {

0 commit comments

Comments
 (0)