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 @@ -29,6 +29,12 @@ function keepsHistory(batchedTransition, tokenConfiguration) {
case TokenTransitionType.Unfreeze: {
return tokenConfiguration.keepsHistory().keepsFreezingHistory();
}
case TokenTransitionType.Claim:
case TokenTransitionType.ConfigUpdate:
case TokenTransitionType.EmergencyAction:
case TokenTransitionType.DestroyFrozenFunds: {
return true;
}
default:
return false;
}
Expand Down Expand Up @@ -148,16 +154,6 @@ function fetchProofForStateTransitionFactory(driveClient, dpp) {
identityTokenBalancesList.push(requestSender, requestRecipient);
break;
}
case TokenTransitionType.DestroyFrozenFunds: {
const request = new IdentityTokenBalanceRequest();
request.setTokenId(batchedTransition.getTokenId().toBuffer());
request.setIdentityId(
batchedTransition.toTransition().getFrozenIdentityId().toBuffer(),
);

identityTokenBalancesList.push(request);
break;
}
case TokenTransitionType.EmergencyAction:
{
const request = new TokenStatusRequest();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ use dpp::data_contract::accessors::v0::DataContractV0Getters;
use dpp::data_contract::accessors::v1::DataContractV1Getters;
use dpp::data_contract::associated_token::token_configuration::accessors::v0::TokenConfigurationV0Getters;
use dpp::data_contract::associated_token::token_keeps_history_rules::accessors::v0::TokenKeepsHistoryRulesV0Getters;
use dpp::data_contract::config::v0::DataContractConfigGettersV0;
use dpp::data_contract::document_type::accessors::DocumentTypeV0Getters;
use dpp::data_contract::serialized_version::DataContractInSerializationFormat;
use dpp::document::{Document, DocumentV0Getters};
Expand Down Expand Up @@ -35,18 +34,15 @@ use dpp::state_transition::batch_transition::batched_transition::document_transi
use dpp::state_transition::batch_transition::batched_transition::document_update_price_transition::v0::v0_methods::DocumentUpdatePriceTransitionV0Methods;
use dpp::state_transition::batch_transition::batched_transition::token_transition::{TokenTransition, TokenTransitionV0Methods};
use dpp::state_transition::batch_transition::token_base_transition::v0::v0_methods::TokenBaseTransitionV0Methods;
use dpp::state_transition::batch_transition::token_config_update_transition::v0::v0_methods::TokenConfigUpdateTransitionV0Methods;
use dpp::state_transition::batch_transition::token_emergency_action_transition::v0::v0_methods::TokenEmergencyActionTransitionV0Methods;
use dpp::state_transition::batch_transition::token_freeze_transition::v0::v0_methods::TokenFreezeTransitionV0Methods;
use dpp::state_transition::batch_transition::token_mint_transition::v0::v0_methods::TokenMintTransitionV0Methods;
use dpp::state_transition::batch_transition::token_transfer_transition::v0::v0_methods::TokenTransferTransitionV0Methods;
use dpp::state_transition::batch_transition::token_unfreeze_transition::v0::v0_methods::TokenUnfreezeTransitionV0Methods;
use dpp::state_transition::masternode_vote_transition::accessors::MasternodeVoteTransitionAccessorsV0;
use dpp::state_transition::proof_result::StateTransitionProofResult;
use dpp::state_transition::proof_result::StateTransitionProofResult::{VerifiedBalanceTransfer, VerifiedDataContract, VerifiedDocuments, VerifiedIdentity, VerifiedMasternodeVote, VerifiedPartialIdentity, VerifiedTokenActionWithDocument, VerifiedTokenBalance, VerifiedTokenIdentitiesBalances, VerifiedTokenIdentityInfo, VerifiedTokenStatus};
use dpp::state_transition::proof_result::StateTransitionProofResult::{VerifiedBalanceTransfer, VerifiedDataContract, VerifiedDocuments, VerifiedIdentity, VerifiedMasternodeVote, VerifiedPartialIdentity, VerifiedTokenActionWithDocument, VerifiedTokenBalance, VerifiedTokenIdentitiesBalances, VerifiedTokenIdentityInfo};
use dpp::system_data_contracts::{load_system_data_contract, SystemDataContract};
use dpp::tokens::info::v0::IdentityTokenInfoV0Accessors;
use dpp::tokens::status::v0::TokenStatusV0Accessors;
use dpp::voting::vote_polls::VotePoll;
use dpp::voting::votes::resource_vote::accessors::v0::ResourceVoteGettersV0;
use dpp::voting::votes::Vote;
Expand Down Expand Up @@ -493,59 +489,10 @@ impl Drive {
))
}
}
TokenTransition::DestroyFrozenFunds(_) => historical_query(),
TokenTransition::EmergencyAction(emergency_action_transition) => {
let (root_hash, Some(token_status)) = Drive::verify_token_status(
proof,
token_id.into_buffer(),
true,
platform_version,
)?
else {
return Err(Error::Proof(ProofError::IncorrectProof(
"proof did not contain token status expected to exist because of state transition (token emergency action)".to_string())));
};
if token_status.paused()
!= emergency_action_transition.emergency_action().paused()
{
return Err(Error::Proof(ProofError::IncorrectProof(
format!("proof contained token status saying this token is {}paused, but we expected {}paused", if token_status.paused() {""} else {"not "}, if emergency_action_transition.emergency_action().paused() {""} else {"not "}))));
}
Ok((root_hash, VerifiedTokenStatus(token_status)))
}
TokenTransition::ConfigUpdate(update) => {
let (root_hash, Some(updated_contract)) = Drive::verify_contract(
proof,
Some(contract.config().keeps_history()),
true,
false,
contract.id().into_buffer(),
platform_version,
)?
else {
return Err(Error::Proof(ProofError::IncorrectProof(
"proof did not contain token status expected to exist because of state transition (token emergency action)".to_string())));
};
let mut expected_config = token_config.clone();
expected_config.apply_token_configuration_item(
update.update_token_configuration_item().clone(),
);
let new_token_config = updated_contract.expected_token_configuration(
token_transition.base().token_contract_position(),
).map_err(|_| {
Error::Proof(ProofError::CorruptedProof("returned proof does not have a token configuration, which should not be possible".to_string()))
})?;

if new_token_config != &expected_config {
return Err(Error::Proof(ProofError::IncorrectProof(
format!(
"expected token configuration does not match the token configuration from the proof: expected {}, found {}",
expected_config, new_token_config
))));
}
Ok((root_hash, VerifiedDataContract(updated_contract)))
}
TokenTransition::Claim(_) => historical_query(),
TokenTransition::DestroyFrozenFunds(_)
| TokenTransition::EmergencyAction(_)
| TokenTransition::ConfigUpdate(_)
| TokenTransition::Claim(_) => historical_query(),
}
}
}
Expand Down