diff --git a/grpc-server/src/main/scala/com/wavesplatform/events/events.scala b/grpc-server/src/main/scala/com/wavesplatform/events/events.scala index c08030cb2fe..9734150541b 100644 --- a/grpc-server/src/main/scala/com/wavesplatform/events/events.scala +++ b/grpc-server/src/main/scala/com/wavesplatform/events/events.scala @@ -17,7 +17,7 @@ import com.wavesplatform.protobuf.transaction.InvokeScriptResult.Call.Argument import com.wavesplatform.protobuf.transaction.{PBAmounts, PBTransactions, InvokeScriptResult as PBInvokeScriptResult} import com.wavesplatform.state.* import com.wavesplatform.state.diffs.invoke.InvokeScriptTransactionLike -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.transaction.Asset.IssuedAsset import com.wavesplatform.transaction.assets.exchange.ExchangeTransaction import com.wavesplatform.transaction.lease.LeaseTransaction diff --git a/node/src/main/protobuf/waves/database.proto b/node/src/main/protobuf/waves/database.proto index 5df4ad0be0a..2e723e4f7a1 100644 --- a/node/src/main/protobuf/waves/database.proto +++ b/node/src/main/protobuf/waves/database.proto @@ -7,7 +7,6 @@ import "waves/transaction.proto"; import "waves/amount.proto"; import "waves/recipient.proto"; import "waves/transaction_state_snapshot.proto"; -import "google/protobuf/empty.proto"; message AssetDetails { bytes name = 1; @@ -112,8 +111,7 @@ message LeaseDetails { bytes source_id = 4; int32 height = 5; - oneof status { - google.protobuf.Empty active = 10; + oneof cancel_reason { Cancelled cancelled = 11; Expired expired = 12; } diff --git a/node/src/main/scala/com/wavesplatform/Explorer.scala b/node/src/main/scala/com/wavesplatform/Explorer.scala index 141e608defa..f034331b1e4 100644 --- a/node/src/main/scala/com/wavesplatform/Explorer.scala +++ b/node/src/main/scala/com/wavesplatform/Explorer.scala @@ -12,7 +12,7 @@ import com.wavesplatform.lang.script.ContractScript import com.wavesplatform.lang.script.v1.ExprScript import com.wavesplatform.settings.Constants import com.wavesplatform.state.diffs.{DiffsCommon, SetScriptTransactionDiff} -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.{Blockchain, Height, Portfolio, StateSnapshot, TransactionId} import com.wavesplatform.transaction.Asset.IssuedAsset import com.wavesplatform.utils.ScorexLogging diff --git a/node/src/main/scala/com/wavesplatform/api/common/CommonAccountsApi.scala b/node/src/main/scala/com/wavesplatform/api/common/CommonAccountsApi.scala index 9570d4d38a3..0225b3b2ffb 100644 --- a/node/src/main/scala/com/wavesplatform/api/common/CommonAccountsApi.scala +++ b/node/src/main/scala/com/wavesplatform/api/common/CommonAccountsApi.scala @@ -12,8 +12,8 @@ import com.wavesplatform.features.BlockchainFeatures import com.wavesplatform.lang.ValidationError import com.wavesplatform.protobuf.transaction.PBRecipients import com.wavesplatform.state.patch.CancelLeasesToDisabledAliases -import com.wavesplatform.state.reader.LeaseDetails.Status -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.LeaseDetails.Status +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.{AccountScriptInfo, AssetDescription, Blockchain, DataEntry, Height, InvokeScriptResult, TxMeta} import com.wavesplatform.transaction.Asset.IssuedAsset import com.wavesplatform.transaction.EthereumTransaction.Invocation diff --git a/node/src/main/scala/com/wavesplatform/api/http/DebugApiRoute.scala b/node/src/main/scala/com/wavesplatform/api/http/DebugApiRoute.scala index a6bdd2e7ea6..6aacb112949 100644 --- a/node/src/main/scala/com/wavesplatform/api/http/DebugApiRoute.scala +++ b/node/src/main/scala/com/wavesplatform/api/http/DebugApiRoute.scala @@ -13,7 +13,7 @@ import com.wavesplatform.mining.{Miner, MinerDebugInfo} import com.wavesplatform.network.{PeerDatabase, PeerInfo, *} import com.wavesplatform.settings.{RestAPISettings, WavesSettings} import com.wavesplatform.state.diffs.TransactionDiffer -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.{Blockchain, Height, LeaseBalance, NG, Portfolio, StateHash, TxMeta} import com.wavesplatform.transaction.* import com.wavesplatform.transaction.Asset.IssuedAsset diff --git a/node/src/main/scala/com/wavesplatform/api/http/TransactionJsonSerializer.scala b/node/src/main/scala/com/wavesplatform/api/http/TransactionJsonSerializer.scala index 366d7db0479..d5e510ca02b 100644 --- a/node/src/main/scala/com/wavesplatform/api/http/TransactionJsonSerializer.scala +++ b/node/src/main/scala/com/wavesplatform/api/http/TransactionJsonSerializer.scala @@ -16,7 +16,7 @@ import com.wavesplatform.lang.v1.compiler.Terms.{ARR, CONST_BOOLEAN, CONST_BYTES import com.wavesplatform.lang.v1.serialization.SerdeV1 import com.wavesplatform.protobuf.transaction.PBAmounts import com.wavesplatform.state.InvokeScriptResult.{AttachedPayment, Burn, Call, ErrorMessage, Invocation, Issue, Lease, LeaseCancel, Reissue, SponsorFee} -import com.wavesplatform.state.reader.LeaseDetails +import com.wavesplatform.state.LeaseDetails import com.wavesplatform.state.{Blockchain, DataEntry, InvokeScriptResult, TxMeta} import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.lease.{LeaseCancelTransaction, LeaseTransaction} diff --git a/node/src/main/scala/com/wavesplatform/api/http/utils/UtilsEvaluationRequest.scala b/node/src/main/scala/com/wavesplatform/api/http/utils/UtilsEvaluationRequest.scala index 0736d9d5e4d..dd8f3a13a10 100644 --- a/node/src/main/scala/com/wavesplatform/api/http/utils/UtilsEvaluationRequest.scala +++ b/node/src/main/scala/com/wavesplatform/api/http/utils/UtilsEvaluationRequest.scala @@ -16,16 +16,31 @@ import com.wavesplatform.lang.v1.parser.Parser.LibrariesOffset.NoLibraries import com.wavesplatform.lang.v1.traits.domain.Recipient.Address as RideAddress import com.wavesplatform.lang.{ValidationError, utils} import com.wavesplatform.state.diffs.FeeValidation.{FeeConstants, FeeUnit} -import com.wavesplatform.state.{Blockchain, BlockchainOverrides, OverriddenBlockchain} +import com.wavesplatform.state.{Blockchain, BlockchainOverrides, SnapshotBlockchain, StateSnapshot} import com.wavesplatform.transaction.TxValidationError.GenericError import com.wavesplatform.transaction.smart.AttachedPaymentExtractor import com.wavesplatform.transaction.smart.InvokeScriptTransaction.Payment -import com.wavesplatform.transaction.{TransactionType, smart} +import com.wavesplatform.transaction.{Asset, TransactionType, smart} import play.api.libs.json.* +import scala.collection.immutable.VectorMap + sealed trait UtilsEvaluationRequest { def state: Option[BlockchainOverrides] - def mkBlockchain(underlying: Blockchain): Blockchain = state.foldLeft(underlying)(new OverriddenBlockchain(_, _)) + def mkBlockchain(underlying: Blockchain): Blockchain = { + + state.fold(underlying) { ovs => + SnapshotBlockchain( + underlying, + StateSnapshot(balances = VectorMap.from[(Address, Asset), Long](for { + (addr, ov) <- ovs.accounts + (id, balance) <- ov.assetBalances + } yield ((addr, id), balance.value)) ++ VectorMap.from(ovs.accounts.flatMap { case (addr, acc) => + acc.regularBalance.map(v => ((addr, Asset.Waves), v.value)) + })) + ) + } + } } object UtilsEvaluationRequest { diff --git a/node/src/main/scala/com/wavesplatform/api/http/utils/UtilsEvaluator.scala b/node/src/main/scala/com/wavesplatform/api/http/utils/UtilsEvaluator.scala index 9731bdd1740..2a0a3970eeb 100644 --- a/node/src/main/scala/com/wavesplatform/api/http/utils/UtilsEvaluator.scala +++ b/node/src/main/scala/com/wavesplatform/api/http/utils/UtilsEvaluator.scala @@ -26,7 +26,7 @@ import com.wavesplatform.lang.{ValidationError, utils} import com.wavesplatform.serialization.ScriptValuesJson import com.wavesplatform.state.diffs.TransactionDiffer import com.wavesplatform.state.diffs.invoke.{InvokeDiffsCommon, InvokeScriptTransactionLike, StructuredCallableActions} -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.{AccountScriptInfo, Blockchain, InvokeScriptResult, Portfolio, StateSnapshot} import com.wavesplatform.transaction.Asset.Waves import com.wavesplatform.transaction.TransactionType.InvokeScript diff --git a/node/src/main/scala/com/wavesplatform/database/Caches.scala b/node/src/main/scala/com/wavesplatform/database/Caches.scala index bafe367ba9b..08b299029ad 100644 --- a/node/src/main/scala/com/wavesplatform/database/Caches.scala +++ b/node/src/main/scala/com/wavesplatform/database/Caches.scala @@ -17,7 +17,7 @@ import com.wavesplatform.transaction.{Asset, DiscardedBlocks, Transaction} import com.wavesplatform.utils.ObservedLoadingCache import monix.reactive.Observer -import java.{util, lang} +import java.{lang, util} import scala.collection.immutable.VectorMap import scala.collection.mutable import scala.jdk.CollectionConverters.* @@ -321,9 +321,10 @@ abstract class Caches extends Blockchain with Storage { for ((address, script) <- snapshot.accountScriptsByAddress) stateHash.addAccountScript(address, script.map(_.script)) for ((asset, script) <- snapshot.assetScripts) stateHash.addAssetScript(asset, Some(script.script)) for ((asset, _) <- snapshot.assetStatics) if (!snapshot.assetScripts.contains(asset)) stateHash.addAssetScript(asset, None) - for ((leaseId, lease) <- snapshot.leaseStates) stateHash.addLeaseStatus(leaseId, lease.isActive) - for ((assetId, sponsorship) <- snapshot.sponsorships) stateHash.addSponsorship(assetId, sponsorship.minFee) - for ((alias, address) <- snapshot.aliases) stateHash.addAlias(address, alias.name) + for (leaseId <- snapshot.newLeases.keys) if (!snapshot.cancelledLeases.contains(leaseId)) stateHash.addLeaseStatus(leaseId, isActive = true) + for (leaseId <- snapshot.cancelledLeases.keys) stateHash.addLeaseStatus(leaseId, isActive = false) + for ((assetId, sponsorship) <- snapshot.sponsorships) stateHash.addSponsorship(assetId, sponsorship.minFee) + for ((alias, address) <- snapshot.aliases) stateHash.addAlias(address, alias.name) doAppend( newMeta, diff --git a/node/src/main/scala/com/wavesplatform/database/Keys.scala b/node/src/main/scala/com/wavesplatform/database/Keys.scala index 8fbb1b70834..d6c4c36830c 100644 --- a/node/src/main/scala/com/wavesplatform/database/Keys.scala +++ b/node/src/main/scala/com/wavesplatform/database/Keys.scala @@ -9,7 +9,6 @@ import com.wavesplatform.protobuf.snapshot.TransactionStateSnapshot import com.wavesplatform.protobuf.transaction.PBRecipients import com.wavesplatform.state import com.wavesplatform.state.* -import com.wavesplatform.state.reader.LeaseDetails import com.wavesplatform.transaction.Asset.IssuedAsset import com.wavesplatform.transaction.{ERC20Address, Transaction} import com.wavesplatform.utils.* diff --git a/node/src/main/scala/com/wavesplatform/database/RocksDBWriter.scala b/node/src/main/scala/com/wavesplatform/database/RocksDBWriter.scala index 3bdde73ae90..f14575ddfb0 100644 --- a/node/src/main/scala/com/wavesplatform/database/RocksDBWriter.scala +++ b/node/src/main/scala/com/wavesplatform/database/RocksDBWriter.scala @@ -21,7 +21,6 @@ import com.wavesplatform.protobuf.snapshot.{TransactionStateSnapshot, Transactio import com.wavesplatform.protobuf.{ByteStrExt, ByteStringExt, PBSnapshots} import com.wavesplatform.settings.{BlockchainSettings, DBSettings} import com.wavesplatform.state.* -import com.wavesplatform.state.reader.LeaseDetails import com.wavesplatform.transaction.* import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.EthereumTransaction.Transfer @@ -484,8 +483,16 @@ class RocksDBWriter( expiredKeys ++= updateHistory(rw, Keys.assetDetailsHistory(asset), threshold, Keys.assetDetails(asset)) } - for ((id, details) <- snapshot.leaseStates) { - rw.put(Keys.leaseDetails(id)(height), Some(details)) + for ((id, li) <- snapshot.newLeases) { + rw.put(Keys.leaseDetails(id)(height), Some(LeaseDetails(li, snapshot.cancelledLeases.getOrElse(id, LeaseDetails.Status.Active)))) + expiredKeys ++= updateHistory(rw, Keys.leaseDetailsHistory(id), threshold, Keys.leaseDetails(id)) + } + + for ((id, status) <- snapshot.cancelledLeases if !snapshot.newLeases.contains(id)) { + rw.fromHistory(Keys.leaseDetailsHistory(id), Keys.leaseDetails(id)).flatten.foreach { d => + rw.put(Keys.leaseDetails(id)(height), Some(d.copy(status = status))) + } + expiredKeys ++= updateHistory(rw, Keys.leaseDetailsHistory(id), threshold, Keys.leaseDetails(id)) } diff --git a/node/src/main/scala/com/wavesplatform/database/package.scala b/node/src/main/scala/com/wavesplatform/database/package.scala index 46c5192e045..ba312758032 100644 --- a/node/src/main/scala/com/wavesplatform/database/package.scala +++ b/node/src/main/scala/com/wavesplatform/database/package.scala @@ -22,7 +22,6 @@ import com.wavesplatform.protobuf.transaction.{PBRecipients, PBTransactions} import com.wavesplatform.protobuf.{ByteStringExt, PBSnapshots} import com.wavesplatform.state.* import com.wavesplatform.state.StateHash.SectionId -import com.wavesplatform.state.reader.LeaseDetails import com.wavesplatform.transaction.Asset.IssuedAsset import com.wavesplatform.transaction.{ EthereumTransaction, @@ -151,29 +150,30 @@ package object database { ByteString.copyFrom(ld.sourceId.arr), ld.height, ld.status match { - case LeaseDetails.Status.Active => pb.LeaseDetails.Status.Active(com.google.protobuf.empty.Empty()) + case LeaseDetails.Status.Active => pb.LeaseDetails.CancelReason.Empty case LeaseDetails.Status.Cancelled(height, cancelTxId) => - pb.LeaseDetails.Status + pb.LeaseDetails.CancelReason .Cancelled(pb.LeaseDetails.Cancelled(height, cancelTxId.fold(ByteString.EMPTY)(id => ByteString.copyFrom(id.arr)))) - case LeaseDetails.Status.Expired(height) => pb.LeaseDetails.Status.Expired(pb.LeaseDetails.Expired(height)) + case LeaseDetails.Status.Expired(height) => pb.LeaseDetails.CancelReason.Expired(pb.LeaseDetails.Expired(height)) } ).toByteArray def readLeaseDetails(data: Array[Byte]): LeaseDetails = { val d = pb.LeaseDetails.parseFrom(data) LeaseDetails( - d.senderPublicKey.toPublicKey, - PBRecipients.toAddress(d.recipient.get, AddressScheme.current.chainId).explicitGet(), - TxPositiveAmount.unsafeFrom(d.amount), - d.status match { - case pb.LeaseDetails.Status.Active(_) => LeaseDetails.Status.Active - case pb.LeaseDetails.Status.Expired(pb.LeaseDetails.Expired(height, _)) => LeaseDetails.Status.Expired(height) - case pb.LeaseDetails.Status.Cancelled(pb.LeaseDetails.Cancelled(height, transactionId, _)) => + LeaseStaticInfo( + d.senderPublicKey.toPublicKey, + PBRecipients.toAddress(d.recipient.get, AddressScheme.current.chainId).explicitGet(), + TxPositiveAmount.unsafeFrom(d.amount), + d.sourceId.toByteStr, + d.height + ), + d.cancelReason match { + case pb.LeaseDetails.CancelReason.Expired(pb.LeaseDetails.Expired(height, _)) => LeaseDetails.Status.Expired(height) + case pb.LeaseDetails.CancelReason.Cancelled(pb.LeaseDetails.Cancelled(height, transactionId, _)) => LeaseDetails.Status.Cancelled(height, Some(transactionId.toByteStr).filter(!_.isEmpty)) - case pb.LeaseDetails.Status.Empty => ??? - }, - d.sourceId.toByteStr, - d.height + case pb.LeaseDetails.CancelReason.Empty => LeaseDetails.Status.Active + } ) } diff --git a/node/src/main/scala/com/wavesplatform/mining/BlockChallenger.scala b/node/src/main/scala/com/wavesplatform/mining/BlockChallenger.scala index 4facb60cd9a..d52c4acb413 100644 --- a/node/src/main/scala/com/wavesplatform/mining/BlockChallenger.scala +++ b/node/src/main/scala/com/wavesplatform/mining/BlockChallenger.scala @@ -16,7 +16,7 @@ import com.wavesplatform.state.BlockchainUpdaterImpl.BlockApplyResult import com.wavesplatform.state.BlockchainUpdaterImpl.BlockApplyResult.Applied import com.wavesplatform.state.appender.MaxTimeDrift import com.wavesplatform.state.diffs.BlockDiffer -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.{Blockchain, StateSnapshot, TxStateSnapshotHashBuilder} import com.wavesplatform.transaction.TxValidationError.GenericError import com.wavesplatform.transaction.{BlockchainUpdater, Transaction} diff --git a/node/src/main/scala/com/wavesplatform/protobuf/PBSnapshots.scala b/node/src/main/scala/com/wavesplatform/protobuf/PBSnapshots.scala index 0406763116f..c02ff743035 100644 --- a/node/src/main/scala/com/wavesplatform/protobuf/PBSnapshots.scala +++ b/node/src/main/scala/com/wavesplatform/protobuf/PBSnapshots.scala @@ -6,11 +6,9 @@ import com.wavesplatform.common.state.ByteStr import com.wavesplatform.common.utils.EitherExt2 import com.wavesplatform.lang.script.ScriptReader import com.wavesplatform.protobuf.snapshot.TransactionStateSnapshot -import com.wavesplatform.protobuf.snapshot.TransactionStateSnapshot.AssetStatic +import com.wavesplatform.protobuf.snapshot.TransactionStateSnapshot.NewAsset import com.wavesplatform.protobuf.transaction.{PBAmounts, PBTransactions} import com.wavesplatform.state.* -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.state.reader.LeaseDetails.Status import com.wavesplatform.transaction.Asset.IssuedAsset import com.wavesplatform.transaction.{Asset, TxPositiveAmount} @@ -29,8 +27,10 @@ object PBSnapshots { leaseBalances.map { case (address, balance) => S.LeaseBalance(address.toByteString, balance.in, balance.out) }.toSeq, + newLeases = Seq(), + cancelledLeases = Seq(), assetStatics.map { case (id, st) => - AssetStatic(id.id.toByteString, st.issuer.toByteString, st.decimals, st.nft) + NewAsset(id.id.toByteString, st.issuer.toByteString, st.decimals, st.nft) }.toSeq, assetVolumes.map { case (asset, info) => S.AssetVolume(asset.id.toByteString, info.isReissuable, ByteString.copyFrom(info.volume.toByteArray)) @@ -45,15 +45,6 @@ object PBSnapshots { orderFills.map { case (orderId, VolumeAndFee(volume, fee)) => S.OrderFill(orderId.toByteString, volume, fee) }.toSeq, - leaseStates.map { case (leaseId, ld) => - val pbStatus = ld.status match { - case Status.Active => - S.LeaseState.Status.Active(S.LeaseState.Active(ld.amount.value, ld.sender.toByteString, ld.recipientAddress.toByteString)) - case _: Status.Cancelled | _: Status.Expired => - S.LeaseState.Status.Cancelled(S.LeaseState.Cancelled()) - } - S.LeaseState(leaseId.toByteString, pbStatus) - }.toSeq, accountScripts.map { case (publicKey, scriptOpt) => scriptOpt.fold( S.AccountScript(publicKey.toByteString) @@ -115,22 +106,13 @@ object PBSnapshots { .map(s => s.assetId.toIssuedAssetId -> SponsorshipValue(s.minFee)) .toMap - val leaseStates: Map[ByteStr, LeaseDetails] = - pbSnapshot.leaseStates.map { ls => - ls.status match { - case TransactionStateSnapshot.LeaseState.Status.Active(value) => - ls.leaseId.toByteStr -> LeaseDetails( - value.sender.toPublicKey, - value.recipient.toAddress(), - TxPositiveAmount.unsafeFrom(value.amount), - LeaseDetails.Status.Active, - txId, - height - ) - case _: TransactionStateSnapshot.LeaseState.Status.Cancelled | TransactionStateSnapshot.LeaseState.Status.Empty => - ls.leaseId.toByteStr -> ??? - } - }.toMap + val newLeases = pbSnapshot.newLeases.map { l => l.leaseId.toByteStr -> + LeaseStaticInfo(l.senderPublicKey.toPublicKey, l.recipientAddress.toAddress(), TxPositiveAmount.unsafeFrom(l.amount), txId, height) + }.toMap + + val cancelledLeases = pbSnapshot.cancelledLeases.map { cl => + cl.leaseId.toByteStr -> LeaseDetails.Status.Cancelled(height, Some(txId)) + }.toMap val aliases: Map[Alias, Address] = pbSnapshot.aliases @@ -178,7 +160,8 @@ object PBSnapshots { assetNamesAndDescriptions, assetScripts, sponsorships, - leaseStates, + newLeases, + cancelledLeases, aliases, orderFills, accountScripts, @@ -187,5 +170,4 @@ object PBSnapshots { TxMeta.Status.fromProtobuf(pbSnapshot.transactionStatus) ) } - } diff --git a/node/src/main/scala/com/wavesplatform/protobuf/transaction/PBTransactions.scala b/node/src/main/scala/com/wavesplatform/protobuf/transaction/PBTransactions.scala index 00598610b88..c7a056c446b 100644 --- a/node/src/main/scala/com/wavesplatform/protobuf/transaction/PBTransactions.scala +++ b/node/src/main/scala/com/wavesplatform/protobuf/transaction/PBTransactions.scala @@ -25,7 +25,16 @@ import com.wavesplatform.transaction.smart.InvokeExpressionTransaction import com.wavesplatform.transaction.smart.InvokeScriptTransaction.Payment import com.wavesplatform.transaction.transfer.MassTransferTransaction import com.wavesplatform.transaction.transfer.MassTransferTransaction.ParsedTransfer -import com.wavesplatform.transaction.{EthereumTransaction, Proofs, TxDecimals, TxExchangeAmount, TxExchangePrice, TxNonNegativeAmount, TxPositiveAmount, TxValidationError} +import com.wavesplatform.transaction.{ + EthereumTransaction, + Proofs, + TxDecimals, + TxExchangeAmount, + TxExchangePrice, + TxNonNegativeAmount, + TxPositiveAmount, + TxValidationError +} import com.wavesplatform.utils.StringBytes import scalapb.UnknownFieldSet.empty @@ -74,33 +83,34 @@ object PBTransactions { .map(pk => PublicKey(pk.toByteArray)) .orNull for { - tx <- if (unsafe) - Right( - createVanillaUnsafe( - parsedTx.version, - parsedTx.chainId.toByte, - sender, - feeAmount, - feeAsset, - parsedTx.timestamp, - Proofs(signedTx.proofs.map(_.toByteStr)), - parsedTx.data - ) - ) - else - for { - proofs <- Proofs.create(signedTx.proofs.map(_.toByteStr)) - tx <- createVanilla( - parsedTx.version, - parsedTx.chainId.toByte, - sender, - feeAmount, - feeAsset, - parsedTx.timestamp, - proofs, - parsedTx.data + tx <- + if (unsafe) + Right( + createVanillaUnsafe( + parsedTx.version, + parsedTx.chainId.toByte, + sender, + feeAmount, + feeAsset, + parsedTx.timestamp, + Proofs(signedTx.proofs.map(_.toByteStr)), + parsedTx.data + ) ) - } yield tx + else + for { + proofs <- Proofs.create(signedTx.proofs.map(_.toByteStr)) + tx <- createVanilla( + parsedTx.version, + parsedTx.chainId.toByte, + sender, + feeAmount, + feeAsset, + parsedTx.timestamp, + proofs, + parsedTx.data + ) + } yield tx } yield tx } @@ -696,8 +706,8 @@ object PBTransactions { ) } - def toVanillaDataEntry(de: DataTransactionData.DataEntry): com.wavesplatform.state.DataEntry[?] = { - import DataTransactionData.DataEntry.Value as DEV + def toVanillaDataEntry(de: DataEntry): com.wavesplatform.state.DataEntry[?] = { + import DataEntry.Value as DEV de.value match { case DEV.IntValue(num) => IntegerDataEntry(de.key, num) @@ -708,15 +718,15 @@ object PBTransactions { } } - def toPBDataEntry(de: com.wavesplatform.state.DataEntry[?]): DataTransactionData.DataEntry = { - DataTransactionData.DataEntry( + def toPBDataEntry(de: com.wavesplatform.state.DataEntry[?]): DataEntry = { + DataEntry( de.key, de match { - case IntegerDataEntry(_, value) => DataTransactionData.DataEntry.Value.IntValue(value) - case BooleanDataEntry(_, value) => DataTransactionData.DataEntry.Value.BoolValue(value) - case BinaryDataEntry(_, value) => DataTransactionData.DataEntry.Value.BinaryValue(value.toByteString) - case StringDataEntry(_, value) => DataTransactionData.DataEntry.Value.StringValue(value) - case EmptyDataEntry(_) => DataTransactionData.DataEntry.Value.Empty + case IntegerDataEntry(_, value) => DataEntry.Value.IntValue(value) + case BooleanDataEntry(_, value) => DataEntry.Value.BoolValue(value) + case BinaryDataEntry(_, value) => DataEntry.Value.BinaryValue(value.toByteString) + case StringDataEntry(_, value) => DataEntry.Value.StringValue(value) + case EmptyDataEntry(_) => DataEntry.Value.Empty } ) } diff --git a/node/src/main/scala/com/wavesplatform/state/Blockchain.scala b/node/src/main/scala/com/wavesplatform/state/Blockchain.scala index 448d0ef1f62..f0b949ecde4 100644 --- a/node/src/main/scala/com/wavesplatform/state/Blockchain.scala +++ b/node/src/main/scala/com/wavesplatform/state/Blockchain.scala @@ -11,7 +11,7 @@ import com.wavesplatform.lang.script.ContractScript import com.wavesplatform.lang.v1.ContractLimits import com.wavesplatform.lang.v1.traits.domain.Issue import com.wavesplatform.settings.BlockchainSettings -import com.wavesplatform.state.reader.LeaseDetails +import com.wavesplatform.state.LeaseDetails import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.AliasDoesNotExist import com.wavesplatform.transaction.assets.IssueTransaction diff --git a/node/src/main/scala/com/wavesplatform/state/BlockchainUpdaterImpl.scala b/node/src/main/scala/com/wavesplatform/state/BlockchainUpdaterImpl.scala index 4aa2255a67a..cb3d958ceb8 100644 --- a/node/src/main/scala/com/wavesplatform/state/BlockchainUpdaterImpl.scala +++ b/node/src/main/scala/com/wavesplatform/state/BlockchainUpdaterImpl.scala @@ -18,7 +18,6 @@ import com.wavesplatform.mining.{Miner, MiningConstraint, MiningConstraints} import com.wavesplatform.settings.{BlockchainSettings, WavesSettings} import com.wavesplatform.state.BlockchainUpdaterImpl.BlockApplyResult.{Applied, Ignored} import com.wavesplatform.state.diffs.BlockDiffer -import com.wavesplatform.state.reader.{LeaseDetails, SnapshotBlockchain} import com.wavesplatform.transaction.* import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.{BlockAppendError, GenericError, MicroBlockAppendError} @@ -435,16 +434,15 @@ class BlockchainUpdaterImpl( private def cancelLeases(leaseTransactions: Map[ByteStr, LeaseDetails], height: Int): Map[ByteStr, StateSnapshot] = for { (id, lt) <- leaseTransactions - ltMeta <- transactionMeta(id).toSeq recipient <- rocksdb.resolveAlias(lt.recipientAddress).toSeq portfolios = Map( lt.sender.toAddress -> Portfolio(0, LeaseBalance(0, -lt.amount.value)), recipient -> Portfolio(0, LeaseBalance(-lt.amount.value, 0)) ) leaseStates = Map( - id -> LeaseDetails(lt.sender, lt.recipientAddress, lt.amount, LeaseDetails.Status.Expired(height), id, ltMeta.height) + id -> LeaseDetails.Status.Expired(height) ) - snapshot = StateSnapshot.build(rocksdb, portfolios, leaseStates = leaseStates).explicitGet() + snapshot = StateSnapshot.build(rocksdb, portfolios, cancelledLeases = leaseStates).explicitGet() } yield id -> snapshot override def removeAfter(blockId: ByteStr): Either[ValidationError, DiscardedBlocks] = writeLock { diff --git a/node/src/main/scala/com/wavesplatform/state/Diff.scala b/node/src/main/scala/com/wavesplatform/state/Diff.scala deleted file mode 100755 index e69de29bb2d..00000000000 diff --git a/node/src/main/scala/com/wavesplatform/state/reader/LeaseDetails.scala b/node/src/main/scala/com/wavesplatform/state/LeaseDetails.scala similarity index 62% rename from node/src/main/scala/com/wavesplatform/state/reader/LeaseDetails.scala rename to node/src/main/scala/com/wavesplatform/state/LeaseDetails.scala index b693f69e631..34f1ea64b6f 100644 --- a/node/src/main/scala/com/wavesplatform/state/reader/LeaseDetails.scala +++ b/node/src/main/scala/com/wavesplatform/state/LeaseDetails.scala @@ -1,4 +1,4 @@ -package com.wavesplatform.state.reader +package com.wavesplatform.state import com.wavesplatform.account.{Address, PublicKey} import com.wavesplatform.common.state.ByteStr @@ -8,8 +8,9 @@ object LeaseDetails { sealed trait Status object Status { case object Active extends Status - final case class Cancelled(height: Int, txId: Option[ByteStr]) extends Status - final case class Expired(height: Int) extends Status + sealed trait Inactive extends Status + final case class Cancelled(height: Int, txId: Option[ByteStr]) extends Inactive + final case class Expired(height: Int) extends Inactive implicit class StatusExt(val status: Status) extends AnyVal { def cancelHeight: Option[Int] = status match { @@ -27,6 +28,14 @@ object LeaseDetails { } } -case class LeaseDetails(sender: PublicKey, recipientAddress: Address, amount: TxPositiveAmount, status: LeaseDetails.Status, sourceId: ByteStr, height: Int) { - def isActive: Boolean = status == LeaseDetails.Status.Active +case class LeaseDetails( + static: LeaseStaticInfo, + status: LeaseDetails.Status +) { + def isActive: Boolean = status == LeaseDetails.Status.Active + def sender: PublicKey = static.sender + def sourceId: ByteStr = static.sourceId + def amount: TxPositiveAmount = static.amount + def height: Int = static.height + def recipientAddress: Address = static.recipientAddress } diff --git a/node/src/main/scala/com/wavesplatform/state/LeaseStaticInfo.scala b/node/src/main/scala/com/wavesplatform/state/LeaseStaticInfo.scala new file mode 100644 index 00000000000..5b17fe3ad34 --- /dev/null +++ b/node/src/main/scala/com/wavesplatform/state/LeaseStaticInfo.scala @@ -0,0 +1,13 @@ +package com.wavesplatform.state + +import com.wavesplatform.account.{Address, PublicKey} +import com.wavesplatform.common.state.ByteStr +import com.wavesplatform.transaction.TxPositiveAmount + +case class LeaseStaticInfo( + sender: PublicKey, + recipientAddress: Address, + amount: TxPositiveAmount, + sourceId: ByteStr, + height: Int +) diff --git a/node/src/main/scala/com/wavesplatform/state/NgState.scala b/node/src/main/scala/com/wavesplatform/state/NgState.scala index 52f6e43c8dc..323314e8167 100644 --- a/node/src/main/scala/com/wavesplatform/state/NgState.scala +++ b/node/src/main/scala/com/wavesplatform/state/NgState.scala @@ -61,7 +61,7 @@ case class NgState( ) { def cancelExpiredLeases(snapshot: StateSnapshot): StateSnapshot = leasesToCancel - .collect { case (id, ld) if snapshot.leaseStates.get(id).forall(_.isActive) => ld } + .collect { case (id, ld) if !snapshot.cancelledLeases.contains(id) => ld } .toList .foldLeft(snapshot)(_ |+| _) diff --git a/node/src/main/scala/com/wavesplatform/state/OverriddenBlockchain.scala b/node/src/main/scala/com/wavesplatform/state/OverriddenBlockchain.scala deleted file mode 100644 index 258c6704860..00000000000 --- a/node/src/main/scala/com/wavesplatform/state/OverriddenBlockchain.scala +++ /dev/null @@ -1,110 +0,0 @@ -package com.wavesplatform.state - -import cats.syntax.option.* -import com.wavesplatform.account.{Address, Alias} -import com.wavesplatform.block.Block.BlockId -import com.wavesplatform.block.SignedBlockHeader -import com.wavesplatform.common.state.ByteStr -import com.wavesplatform.lang.ValidationError -import com.wavesplatform.settings.BlockchainSettings -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.transaction.transfer.TransferTransactionLike -import com.wavesplatform.transaction.{Asset, ERC20Address, Transaction} - -class OverriddenBlockchain(underlying: Blockchain, overrides: BlockchainOverrides) extends Blockchain { - override def settings: BlockchainSettings = underlying.settings - - override def hasData(address: Address): Boolean = underlying.hasData(address) - - override def accountData(acc: Address, key: String): Option[DataEntry[?]] = underlying.accountData(acc, key) - - override def accountScript(address: Address): Option[AccountScriptInfo] = underlying.accountScript(address) - - override def hasAccountScript(address: Address): Boolean = accountScript(address).nonEmpty - - override def blockHeader(height: Int): Option[SignedBlockHeader] = underlying.blockHeader(height) - - override def hitSource(height: Int): Option[ByteStr] = underlying.hitSource(height) - - override def height: Int = underlying.height - - override def activatedFeatures: Map[Short, Int] = underlying.activatedFeatures - - override def assetDescription(id: Asset.IssuedAsset): Option[AssetDescription] = underlying.assetDescription(id) - - override def assetScript(id: Asset.IssuedAsset): Option[AssetScriptInfo] = underlying.assetScript(id) - - override def resolveAlias(a: Alias): Either[ValidationError, Address] = underlying.resolveAlias(a) - - override def leaseBalance(address: Address): LeaseBalance = underlying.leaseBalance(address) - - override def balance(address: Address, mayBeAssetId: Asset): Long = - overrides.balance(address, mayBeAssetId).getOrElse(underlying.balance(address, mayBeAssetId)) - - override def transactionInfos(ids: Seq[BlockId]): Seq[Option[(TxMeta, Transaction)]] = underlying.transactionInfos(ids) - - override def leaseBalances(addresses: Seq[Address]): Map[Address, LeaseBalance] = underlying.leaseBalances(addresses) - - override def balances(req: Seq[(Address, Asset)]): Map[(Address, Asset), Long] = - req.map { case k@(addr, asset) => k -> overrides.balance(addr, asset).getOrElse(underlying.balance(addr, asset)) }.toMap - - override def wavesBalances(addresses: Seq[Address]): Map[Address, Long] = - addresses.map(addr => addr -> overrides.balance(addr, Asset.Waves).getOrElse(underlying.balance(addr))).toMap - - override def effectiveBalanceBanHeights(address: Address): Seq[Int] = underlying.effectiveBalanceBanHeights(address) - - override def lastStateHash(refId: Option[BlockId]): BlockId = underlying.lastStateHash(refId) - - // Ride: wavesBalance (specifies to=None) - /** Retrieves Waves balance snapshot in the [from, to] range (inclusive) */ - override def balanceSnapshots(address: Address, from: Int, to: Option[BlockId]): Seq[BalanceSnapshot] = { - val orig = underlying.balanceSnapshots(address, from, to) - val toHeight = to.flatMap(this.heightOf).getOrElse(this.height) - if (toHeight < this.height) orig - else - overrides - .balance(address, Asset.Waves) - .fold(orig) { regularBalance => - orig.headOption match { - case None => Seq(BalanceSnapshot(toHeight, regularBalance, 0, 0)) - case Some(latest) => latest.copy(toHeight, regularBalance) +: orig - } - } - } - - override def balanceAtHeight(address: Address, height: Int, assetId: Asset): Option[(Int, Long)] = { - lazy val orig = underlying.balanceAtHeight(address, height, assetId) - if (height < this.height) orig - else overrides.balance(address, assetId).fold(orig)(b => (height, b).some) - } - - override def transactionMeta(id: ByteStr): Option[TxMeta] = underlying.transactionMeta(id) - - override def transferById(id: ByteStr): Option[(Int, TransferTransactionLike)] = underlying.transferById(id) - - override def score: BigInt = underlying.score - - override def carryFee(refId: Option[BlockId]): Long = underlying.carryFee(refId) - - override def heightOf(blockId: ByteStr): Option[Int] = underlying.heightOf(blockId) - - override def approvedFeatures: Map[Short, Int] = underlying.approvedFeatures - - override def featureVotes(height: Int): Map[Short, Int] = underlying.featureVotes(height) - - override def containsTransaction(tx: Transaction): Boolean = underlying.containsTransaction(tx) - - override def leaseDetails(leaseId: ByteStr): Option[LeaseDetails] = underlying.leaseDetails(leaseId) - - override def filledVolumeAndFee(orderId: ByteStr): VolumeAndFee = underlying.filledVolumeAndFee(orderId) - - override def transactionInfo(id: BlockId): Option[(TxMeta, Transaction)] = underlying.transactionInfo(id) - - override def blockReward(height: Int): Option[Long] = underlying.blockReward(height) - - override def blockRewardVotes(height: Int): Seq[Long] = underlying.blockRewardVotes(height) - - override def wavesAmount(height: Int): BigInt = underlying.wavesAmount(height) - - override def resolveERC20Address(address: ERC20Address): Option[Asset.IssuedAsset] = underlying.resolveERC20Address(address) -} diff --git a/node/src/main/scala/com/wavesplatform/state/reader/SnapshotBlockchain.scala b/node/src/main/scala/com/wavesplatform/state/SnapshotBlockchain.scala similarity index 97% rename from node/src/main/scala/com/wavesplatform/state/reader/SnapshotBlockchain.scala rename to node/src/main/scala/com/wavesplatform/state/SnapshotBlockchain.scala index f131329b5c1..51146f08bb9 100644 --- a/node/src/main/scala/com/wavesplatform/state/reader/SnapshotBlockchain.scala +++ b/node/src/main/scala/com/wavesplatform/state/SnapshotBlockchain.scala @@ -1,4 +1,4 @@ -package com.wavesplatform.state.reader +package com.wavesplatform.state import cats.syntax.option.* import com.wavesplatform.account.{Address, Alias} @@ -8,7 +8,6 @@ import com.wavesplatform.common.state.ByteStr import com.wavesplatform.features.BlockchainFeatures.RideV6 import com.wavesplatform.lang.ValidationError import com.wavesplatform.settings.BlockchainSettings -import com.wavesplatform.state.* import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.{AliasDoesNotExist, AliasIsDisabled} import com.wavesplatform.transaction.transfer.{TransferTransaction, TransferTransactionLike} @@ -83,10 +82,13 @@ case class SnapshotBlockchain( override def assetDescription(asset: IssuedAsset): Option[AssetDescription] = SnapshotBlockchain.assetDescription(asset, snapshot, height, inner) - override def leaseDetails(leaseId: ByteStr): Option[LeaseDetails] = - snapshot.leaseStates - .get(leaseId) - .orElse(inner.leaseDetails(leaseId)) + override def leaseDetails(leaseId: ByteStr): Option[LeaseDetails] = { + val newer = snapshot.newLeases.get(leaseId).map(n => LeaseDetails(n, LeaseDetails.Status.Active)).orElse(inner.leaseDetails(leaseId)) + snapshot.cancelledLeases.get(leaseId) match { + case Some(newStatus) => newer.map(_.copy(status = newStatus)) + case None => newer + } + } override def transferById(id: ByteStr): Option[(Int, TransferTransactionLike)] = snapshot.transactions diff --git a/node/src/main/scala/com/wavesplatform/state/StateHashBuilder.scala b/node/src/main/scala/com/wavesplatform/state/StateHashBuilder.scala index a8f1bac7192..612ef4bb03a 100644 --- a/node/src/main/scala/com/wavesplatform/state/StateHashBuilder.scala +++ b/node/src/main/scala/com/wavesplatform/state/StateHashBuilder.scala @@ -84,9 +84,9 @@ class StateHashBuilder { ) } - def addLeaseStatus(leaseId: ByteStr, status: Boolean): Unit = { + def addLeaseStatus(leaseId: ByteStr, isActive: Boolean): Unit = { addEntry(SectionId.LeaseStatus, leaseId.arr)( - if (status) Array(1: Byte) else Array(0: Byte) + if (isActive) Array(1: Byte) else Array(0: Byte) ) } diff --git a/node/src/main/scala/com/wavesplatform/state/StateSnapshot.scala b/node/src/main/scala/com/wavesplatform/state/StateSnapshot.scala index 46aaba292b2..90874dc212c 100644 --- a/node/src/main/scala/com/wavesplatform/state/StateSnapshot.scala +++ b/node/src/main/scala/com/wavesplatform/state/StateSnapshot.scala @@ -7,7 +7,6 @@ import com.wavesplatform.account.{Address, Alias, PublicKey} import com.wavesplatform.common.state.ByteStr import com.wavesplatform.database.protobuf.EthereumTransactionMeta import com.wavesplatform.lang.ValidationError -import com.wavesplatform.state.reader.{LeaseDetails, SnapshotBlockchain} import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.GenericError import com.wavesplatform.transaction.{Asset, Transaction} @@ -23,7 +22,8 @@ case class StateSnapshot( assetNamesAndDescriptions: Map[IssuedAsset, AssetInfo] = Map(), assetScripts: Map[IssuedAsset, AssetScriptInfo] = Map(), sponsorships: Map[IssuedAsset, SponsorshipValue] = Map(), - leaseStates: Map[ByteStr, LeaseDetails] = Map(), + newLeases: Map[ByteStr, LeaseStaticInfo] = Map(), + cancelledLeases: Map[ByteStr, LeaseDetails.Status.Inactive] = Map.empty, aliases: Map[Alias, Address] = Map(), orderFills: Map[ByteStr, VolumeAndFee] = Map(), accountScripts: Map[PublicKey, Option[AccountScriptInfo]] = Map(), @@ -79,7 +79,8 @@ object StateSnapshot { updatedAssets: Map[IssuedAsset, Ior[AssetInfo, AssetVolumeInfo]] = Map(), assetScripts: Map[IssuedAsset, AssetScriptInfo] = Map(), sponsorships: Map[IssuedAsset, Sponsorship] = Map(), - leaseStates: Map[ByteStr, LeaseDetails] = Map(), + newLeases: Map[ByteStr, LeaseStaticInfo] = Map(), + cancelledLeases: Map[ByteStr, LeaseDetails.Status.Inactive] = Map.empty, aliases: Map[Alias, Address] = Map(), accountData: Map[Address, Map[String, DataEntry[?]]] = Map(), accountScripts: Map[PublicKey, Option[AccountScriptInfo]] = Map(), @@ -102,7 +103,8 @@ object StateSnapshot { assetNamesAndDescriptions(issuedAssets, updatedAssets), assetScripts, sponsorships.collect { case (asset, value: SponsorshipValue) => (asset, value) }, - leaseStates, + newLeases, + cancelledLeases, aliases, of, accountScripts, @@ -218,7 +220,8 @@ object StateSnapshot { s1.assetNamesAndDescriptions ++ s2.assetNamesAndDescriptions, s1.assetScripts ++ s2.assetScripts, s1.sponsorships ++ s2.sponsorships, - s1.leaseStates ++ s2.leaseStates, + s1.newLeases ++ s2.newLeases, + s1.cancelledLeases ++ s2.cancelledLeases, s1.aliases ++ s2.aliases, s1.orderFills ++ s2.orderFills, s1.accountScripts ++ s2.accountScripts, diff --git a/node/src/main/scala/com/wavesplatform/state/TxStateSnapshotHashBuilder.scala b/node/src/main/scala/com/wavesplatform/state/TxStateSnapshotHashBuilder.scala index de6a81a4d45..e5fafc966ea 100644 --- a/node/src/main/scala/com/wavesplatform/state/TxStateSnapshotHashBuilder.scala +++ b/node/src/main/scala/com/wavesplatform/state/TxStateSnapshotHashBuilder.scala @@ -11,7 +11,6 @@ import com.wavesplatform.lang.ValidationError import com.wavesplatform.state.TxMeta.Status import com.wavesplatform.state.diffs.BlockDiffer.{CurrentBlockFeePart, maybeApplySponsorship} import com.wavesplatform.state.diffs.TransactionDiffer -import com.wavesplatform.state.reader.SnapshotBlockchain import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.smart.script.trace.TracedResult import com.wavesplatform.transaction.{GenesisTransaction, Transaction} @@ -66,11 +65,13 @@ object TxStateSnapshotHashBuilder { (asset, scriptInfo) <- snapshot.assetScripts } changedKeys += asset.id.arr ++ scriptInfo.script.bytes().arr - snapshot.leaseStates.foreach { case (leaseId, details) => - changedKeys += leaseId.arr ++ booleanToBytes(details.isActive) - if (details.isActive) { - changedKeys += leaseId.arr ++ details.sender.arr ++ details.recipientAddress.bytes ++ Longs.toByteArray(details.amount.value) - } + snapshot.newLeases.foreach { case (leaseId, details) => + changedKeys += leaseId.arr ++ booleanToBytes(true) + changedKeys += leaseId.arr ++ details.sender.arr ++ details.recipientAddress.bytes ++ Longs.toByteArray(details.amount.value) + } + + snapshot.cancelledLeases.keys.foreach { leaseId => + changedKeys += leaseId.arr ++ booleanToBytes(false) } snapshot.sponsorships.foreach { case (asset, sponsorship) => diff --git a/node/src/main/scala/com/wavesplatform/state/diffs/BlockDiffer.scala b/node/src/main/scala/com/wavesplatform/state/diffs/BlockDiffer.scala index 310a6daa2f0..c4402a8966d 100644 --- a/node/src/main/scala/com/wavesplatform/state/diffs/BlockDiffer.scala +++ b/node/src/main/scala/com/wavesplatform/state/diffs/BlockDiffer.scala @@ -12,7 +12,7 @@ import com.wavesplatform.state.* import com.wavesplatform.state.StateSnapshot.monoid import com.wavesplatform.state.TxStateSnapshotHashBuilder.TxStatusInfo import com.wavesplatform.state.patch.* -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.* import com.wavesplatform.transaction.assets.exchange.ExchangeTransaction diff --git a/node/src/main/scala/com/wavesplatform/state/diffs/DiffsCommon.scala b/node/src/main/scala/com/wavesplatform/state/diffs/DiffsCommon.scala index 08e9810871e..54d37353fe5 100644 --- a/node/src/main/scala/com/wavesplatform/state/diffs/DiffsCommon.scala +++ b/node/src/main/scala/com/wavesplatform/state/diffs/DiffsCommon.scala @@ -15,8 +15,7 @@ import com.wavesplatform.lang.script.Script import com.wavesplatform.lang.v1.estimator.v2.ScriptEstimatorV2 import com.wavesplatform.lang.v1.estimator.{ScriptEstimator, ScriptEstimatorV1} import com.wavesplatform.lang.v1.traits.domain.* -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.state.{AssetVolumeInfo, Blockchain, LeaseBalance, Portfolio, SponsorshipValue, StateSnapshot} +import com.wavesplatform.state.{AssetVolumeInfo, Blockchain, LeaseBalance, LeaseDetails, LeaseStaticInfo, Portfolio, SponsorshipValue, StateSnapshot} import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxPositiveAmount import com.wavesplatform.transaction.TxValidationError.GenericError @@ -167,11 +166,10 @@ object DiffsCommon { senderAddress -> Portfolio(-fee, LeaseBalance(0, amount.value)), recipientAddress -> Portfolio(0, LeaseBalance(amount.value, 0)) ) - details = LeaseDetails(sender, recipientAddress, amount, LeaseDetails.Status.Active, txId, blockchain.height) snapshot <- StateSnapshot.build( blockchain, portfolios = portfolioDiff, - leaseStates = Map(leaseId -> details) + newLeases = Map(leaseId -> LeaseStaticInfo(sender, recipientAddress, amount, txId, blockchain.height)) ) } yield snapshot } @@ -203,12 +201,11 @@ object DiffsCommon { ) senderPortfolio = Map[Address, Portfolio](sender.toAddress -> Portfolio(-fee, LeaseBalance(0, -lease.amount.value))) recipientPortfolio = Map(recipient -> Portfolio(0, LeaseBalance(-lease.amount.value, 0))) - actionInfo = lease.copy(status = LeaseDetails.Status.Cancelled(blockchain.height, Some(cancelTxId))) portfolios <- Portfolio.combine(senderPortfolio, recipientPortfolio).leftMap(GenericError(_)) snapshot <- StateSnapshot.build( blockchain, portfolios = portfolios, - leaseStates = Map(leaseId -> actionInfo) + cancelledLeases = Map(leaseId -> LeaseDetails.Status.Cancelled(blockchain.height, Some(cancelTxId))) ) } yield snapshot } diff --git a/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeDiffsCommon.scala b/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeDiffsCommon.scala index b7be52f79af..4c6b7821876 100644 --- a/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeDiffsCommon.scala +++ b/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeDiffsCommon.scala @@ -24,7 +24,7 @@ import com.wavesplatform.lang.v1.traits.domain.Tx.{BurnPseudoTx, ReissuePseudoTx import com.wavesplatform.state.* import com.wavesplatform.state.diffs.FeeValidation.* import com.wavesplatform.state.diffs.{BalanceDiffValidation, DiffsCommon} -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.* import com.wavesplatform.transaction.assets.IssueTransaction diff --git a/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeScriptDiff.scala b/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeScriptDiff.scala index 54cf3fe6800..c51c79ea6d6 100644 --- a/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeScriptDiff.scala +++ b/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeScriptDiff.scala @@ -27,7 +27,7 @@ import com.wavesplatform.metrics.* import com.wavesplatform.state.* import com.wavesplatform.state.diffs.BalanceDiffValidation import com.wavesplatform.state.diffs.invoke.CallArgumentPolicy.* -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.* import com.wavesplatform.transaction.smart.DAppEnvironment.ActionLimits diff --git a/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeScriptTransactionDiff.scala b/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeScriptTransactionDiff.scala index 5673c35cdb9..e66367ea453 100644 --- a/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeScriptTransactionDiff.scala +++ b/node/src/main/scala/com/wavesplatform/state/diffs/invoke/InvokeScriptTransactionDiff.scala @@ -31,7 +31,7 @@ import com.wavesplatform.metrics.TxProcessingStats.TxTimerExt import com.wavesplatform.protobuf.dapp.DAppMeta import com.wavesplatform.state.* import com.wavesplatform.state.diffs.invoke.CallArgumentPolicy.* -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.transaction.TransactionBase import com.wavesplatform.transaction.TxValidationError.* import com.wavesplatform.transaction.smart.DAppEnvironment.ActionLimits diff --git a/node/src/main/scala/com/wavesplatform/state/patch/CancelAllLeases.scala b/node/src/main/scala/com/wavesplatform/state/patch/CancelAllLeases.scala index a0bd2bbfd9b..845bac60671 100644 --- a/node/src/main/scala/com/wavesplatform/state/patch/CancelAllLeases.scala +++ b/node/src/main/scala/com/wavesplatform/state/patch/CancelAllLeases.scala @@ -1,12 +1,10 @@ package com.wavesplatform.state.patch import cats.implicits.catsSyntaxSemigroup -import com.wavesplatform.account.{Address, PublicKey} +import com.wavesplatform.account.Address import com.wavesplatform.common.state.ByteStr import com.wavesplatform.common.utils.* -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.state.{Blockchain, LeaseBalance, StateSnapshot} -import com.wavesplatform.transaction.TxPositiveAmount +import com.wavesplatform.state.{Blockchain, LeaseBalance, LeaseDetails, StateSnapshot} import play.api.libs.json.{Json, OFormat} case object CancelAllLeases extends PatchAtHeight('W' -> 462000, 'T' -> 51500) { @@ -14,11 +12,8 @@ case object CancelAllLeases extends PatchAtHeight('W' -> 462000, 'T' -> 51500) { private[patch] case class CancelledLeases(balances: Map[Address, LeaseBalance], cancelledLeases: Seq[LeaseData]) { private[this] val height: Int = patchHeight.getOrElse(0) - val leaseStates: Map[ByteStr, LeaseDetails] = cancelledLeases.map { data => - val sender = PublicKey(ByteStr.decodeBase58(data.senderPublicKey).get) - val recipient = Address.fromString(data.recipient).explicitGet() - val id = ByteStr.decodeBase58(data.id).get - (id, LeaseDetails(sender, recipient, TxPositiveAmount.unsafeFrom(data.amount), status = LeaseDetails.Status.Expired(height), id, height)) + val leaseStates: Map[ByteStr, LeaseDetails.Status.Inactive] = cancelledLeases.map { data => + (ByteStr.decodeBase58(data.id).get, LeaseDetails.Status.Cancelled(height, None)) }.toMap } @@ -29,6 +24,6 @@ case object CancelAllLeases extends PatchAtHeight('W' -> 462000, 'T' -> 51500) { def apply(blockchain: Blockchain): StateSnapshot = { val patch = readPatchData[CancelledLeases]() - StateSnapshot.ofLeaseBalances(patch.balances, blockchain).explicitGet() |+| StateSnapshot(leaseStates = patch.leaseStates) + StateSnapshot.ofLeaseBalances(patch.balances, blockchain).explicitGet() |+| StateSnapshot(cancelledLeases = patch.leaseStates) } } diff --git a/node/src/main/scala/com/wavesplatform/state/patch/CancelLeaseOverflow.scala b/node/src/main/scala/com/wavesplatform/state/patch/CancelLeaseOverflow.scala index eeb2db63c5b..f4727c101c8 100644 --- a/node/src/main/scala/com/wavesplatform/state/patch/CancelLeaseOverflow.scala +++ b/node/src/main/scala/com/wavesplatform/state/patch/CancelLeaseOverflow.scala @@ -8,6 +8,6 @@ import com.wavesplatform.state.{Blockchain, StateSnapshot} case object CancelLeaseOverflow extends PatchAtHeight('W' -> 795000) { def apply(blockchain: Blockchain): StateSnapshot = { val patch = readPatchData[CancelledLeases]() - StateSnapshot.ofLeaseBalances(patch.balances, blockchain).explicitGet() |+| StateSnapshot(leaseStates = patch.leaseStates) + StateSnapshot.ofLeaseBalances(patch.balances, blockchain).explicitGet() |+| StateSnapshot(cancelledLeases = patch.leaseStates) } } diff --git a/node/src/main/scala/com/wavesplatform/state/patch/CancelLeasesToDisabledAliases.scala b/node/src/main/scala/com/wavesplatform/state/patch/CancelLeasesToDisabledAliases.scala index df704603b8a..b86dabff156 100644 --- a/node/src/main/scala/com/wavesplatform/state/patch/CancelLeasesToDisabledAliases.scala +++ b/node/src/main/scala/com/wavesplatform/state/patch/CancelLeasesToDisabledAliases.scala @@ -1,13 +1,11 @@ package com.wavesplatform.state.patch -import cats.implicits.{catsSyntaxAlternativeSeparate, catsSyntaxSemigroup, toFoldableOps} +import cats.implicits.{catsSyntaxSemigroup, toFoldableOps} import com.wavesplatform.account.{Address, PublicKey} import com.wavesplatform.common.state.ByteStr import com.wavesplatform.common.utils.{Base58, EitherExt2} import com.wavesplatform.features.BlockchainFeatures -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.state.{Blockchain, LeaseBalance, Portfolio, StateSnapshot} -import com.wavesplatform.transaction.TxPositiveAmount +import com.wavesplatform.state.{Blockchain, LeaseBalance, LeaseDetails, Portfolio, StateSnapshot} import play.api.libs.json.{Json, Reads} case object CancelLeasesToDisabledAliases extends PatchOnFeature(BlockchainFeatures.SynchronousCalls, Set('W')) { @@ -20,39 +18,33 @@ case object CancelLeasesToDisabledAliases extends PatchOnFeature(BlockchainFeatu height: Int ) - def patchData: Map[ByteStr, (LeaseDetails, Address)] = { + def patchData: Map[ByteStr, (Map[Address, Portfolio], Address)] = { implicit val cancelDetailsReads: Reads[CancelDetails] = Json.reads readPatchData[Seq[CancelDetails]]().map { cancelDetails => val leaseId = ByteStr(Base58.decode(cancelDetails.id)) val sender = PublicKey(Base58.decode(cancelDetails.senderPublicKey)) val recipientAddress = Address.fromString(cancelDetails.recipientAddress).explicitGet() - leaseId -> (LeaseDetails( - sender, - recipientAddress, - TxPositiveAmount.unsafeFrom(cancelDetails.amount), - LeaseDetails.Status.Expired(0), - leaseId, - cancelDetails.height - ) -> recipientAddress) + leaseId -> (Portfolio + .combine( + Map(sender.toAddress -> Portfolio(lease = LeaseBalance(0, -cancelDetails.amount))), + Map(recipientAddress -> Portfolio(lease = LeaseBalance(-cancelDetails.amount, 0))) + ) + .explicitGet(), + recipientAddress) }.toMap } override def apply(blockchain: Blockchain): StateSnapshot = { val (leaseBalances, leaseStates) = - patchData.toSeq.map { case (id, (ld, recipientAddress)) => + patchData.toSeq.map { case (id, (pf, _)) => ( - Portfolio - .combine( - Map(ld.sender.toAddress -> Portfolio(lease = LeaseBalance(0, -ld.amount.value))), - Map(recipientAddress -> Portfolio(lease = LeaseBalance(-ld.amount.value, 0))) - ) - .explicitGet(), + pf, StateSnapshot( - leaseStates = Map(id -> ld.copy(status = LeaseDetails.Status.Expired(blockchain.height))) + cancelledLeases = Map(id -> LeaseDetails.Status.Expired(blockchain.height)) ) ) - }.separate + }.unzip val combinedLeaseBalances = leaseBalances.reduce(Portfolio.combine(_, _).explicitGet()) val leaseBalancesSnapshot = StateSnapshot.ofLeaseBalances(combinedLeaseBalances.view.mapValues(_.lease).toMap, blockchain) leaseBalancesSnapshot.explicitGet() |+| leaseStates.combineAll diff --git a/node/src/main/scala/com/wavesplatform/transaction/smart/WavesEnvironment.scala b/node/src/main/scala/com/wavesplatform/transaction/smart/WavesEnvironment.scala index fdd2ec8aa27..8e451eded75 100644 --- a/node/src/main/scala/com/wavesplatform/transaction/smart/WavesEnvironment.scala +++ b/node/src/main/scala/com/wavesplatform/transaction/smart/WavesEnvironment.scala @@ -25,7 +25,7 @@ import com.wavesplatform.lang.{Global, ValidationError} import com.wavesplatform.state.* import com.wavesplatform.state.BlockRewardCalculator.CurrentBlockRewardPart import com.wavesplatform.state.diffs.invoke.{InvokeScript, InvokeScriptDiff, InvokeScriptTransactionLike} -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.transaction.Asset.* import com.wavesplatform.transaction.TxValidationError.{FailedTransactionError, GenericError} import com.wavesplatform.transaction.assets.exchange.Order diff --git a/node/src/main/scala/com/wavesplatform/utx/UtxPoolImpl.scala b/node/src/main/scala/com/wavesplatform/utx/UtxPoolImpl.scala index c8b1cecde77..23adf485ff9 100644 --- a/node/src/main/scala/com/wavesplatform/utx/UtxPoolImpl.scala +++ b/node/src/main/scala/com/wavesplatform/utx/UtxPoolImpl.scala @@ -15,7 +15,7 @@ import com.wavesplatform.state.TxStateSnapshotHashBuilder.TxStatusInfo import com.wavesplatform.state.diffs.BlockDiffer.CurrentBlockFeePart import com.wavesplatform.state.diffs.TransactionDiffer.TransactionValidationError import com.wavesplatform.state.diffs.{BlockDiffer, TransactionDiffer} -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.{Blockchain, Portfolio, StateSnapshot, TxStateSnapshotHashBuilder} import com.wavesplatform.transaction.* import com.wavesplatform.transaction.TxValidationError.{AlreadyInTheState, GenericError, SenderIsBlacklisted, WithLog} diff --git a/node/src/main/scala/com/wavesplatform/utx/UtxPriorityPool.scala b/node/src/main/scala/com/wavesplatform/utx/UtxPriorityPool.scala index fd4a77d2082..ec1000cee03 100644 --- a/node/src/main/scala/com/wavesplatform/utx/UtxPriorityPool.scala +++ b/node/src/main/scala/com/wavesplatform/utx/UtxPriorityPool.scala @@ -3,7 +3,7 @@ package com.wavesplatform.utx import cats.implicits.toFoldableOps import com.wavesplatform.ResponsivenessLogs import com.wavesplatform.common.state.ByteStr -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.{Blockchain, StateSnapshot} import com.wavesplatform.transaction.Transaction import com.wavesplatform.utils.{OptimisticLockable, ScorexLogging} diff --git a/node/src/test/scala/com/wavesplatform/db/WithState.scala b/node/src/test/scala/com/wavesplatform/db/WithState.scala index 42bba1cb503..37a53fa4b4f 100644 --- a/node/src/test/scala/com/wavesplatform/db/WithState.scala +++ b/node/src/test/scala/com/wavesplatform/db/WithState.scala @@ -22,7 +22,7 @@ import com.wavesplatform.lang.directives.values.* import com.wavesplatform.mining.MiningConstraint import com.wavesplatform.settings.{TestFunctionalitySettings as TFS, *} import com.wavesplatform.state.diffs.{BlockDiffer, ENOUGH_AMT} -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.utils.TestRocksDB import com.wavesplatform.state.{Blockchain, BlockchainUpdaterImpl, Diff, NgState, Portfolio, StateSnapshot, TxStateSnapshotHashBuilder} import com.wavesplatform.test.* diff --git a/node/src/test/scala/com/wavesplatform/history/Domain.scala b/node/src/test/scala/com/wavesplatform/history/Domain.scala index 8ddd0a031d6..be4ed740981 100644 --- a/node/src/test/scala/com/wavesplatform/history/Domain.scala +++ b/node/src/test/scala/com/wavesplatform/history/Domain.scala @@ -26,7 +26,6 @@ import com.wavesplatform.state.BlockchainUpdaterImpl.BlockApplyResult import com.wavesplatform.state.BlockchainUpdaterImpl.BlockApplyResult.{Applied, Ignored} import com.wavesplatform.state.appender.BlockAppender import com.wavesplatform.state.diffs.{BlockDiffer, TransactionDiffer} -import com.wavesplatform.state.reader.SnapshotBlockchain import com.wavesplatform.test.TestTime import com.wavesplatform.transaction.* import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} diff --git a/node/src/test/scala/com/wavesplatform/history/SnapshotOps.scala b/node/src/test/scala/com/wavesplatform/history/SnapshotOps.scala index bff0bb1dc61..40d80ce2773 100644 --- a/node/src/test/scala/com/wavesplatform/history/SnapshotOps.scala +++ b/node/src/test/scala/com/wavesplatform/history/SnapshotOps.scala @@ -6,7 +6,6 @@ import com.wavesplatform.common.state.ByteStr import com.wavesplatform.common.utils.EitherExt2 import com.wavesplatform.lang.ValidationError import com.wavesplatform.state.* -import com.wavesplatform.state.reader.LeaseDetails import com.wavesplatform.transaction.Asset.IssuedAsset import scala.collection.immutable.VectorMap diff --git a/node/src/test/scala/com/wavesplatform/http/DebugApiRouteSpec.scala b/node/src/test/scala/com/wavesplatform/http/DebugApiRouteSpec.scala index 9ba3b469ed8..361bac436c1 100644 --- a/node/src/test/scala/com/wavesplatform/http/DebugApiRouteSpec.scala +++ b/node/src/test/scala/com/wavesplatform/http/DebugApiRouteSpec.scala @@ -30,8 +30,7 @@ import com.wavesplatform.settings.{TestFunctionalitySettings, WalletSettings, Wa import com.wavesplatform.state.StateHash.SectionId import com.wavesplatform.state.TxMeta.Status import com.wavesplatform.state.diffs.ENOUGH_AMT -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.state.{AccountScriptInfo, AssetDescription, AssetScriptInfo, Blockchain, Height, NG, StateHash, TxMeta} +import com.wavesplatform.state.{AccountScriptInfo, AssetDescription, AssetScriptInfo, Blockchain, Height, LeaseDetails, NG, StateHash, TxMeta} import com.wavesplatform.test.* import com.wavesplatform.transaction.TxHelpers.* import com.wavesplatform.transaction.assets.exchange.OrderType @@ -1690,7 +1689,18 @@ class DebugApiRouteSpec (blockchain.leaseDetails _) .when(canceledLeaseId) - .returns(Some(LeaseDetails(dAppPk, TxHelpers.defaultAddress, TxPositiveAmount.unsafeFrom(leaseCancelAmount), LeaseDetails.Status.Active, invoke.id(), 1))) + .returns( + Some( + LeaseDetails( + dAppPk, + TxHelpers.defaultAddress, + TxPositiveAmount.unsafeFrom(leaseCancelAmount), + LeaseDetails.Status.Active, + invoke.id(), + 1 + ) + ) + ) .anyNumberOfTimes() (blockchain.leaseDetails _) diff --git a/node/src/test/scala/com/wavesplatform/http/LeaseRouteSpec.scala b/node/src/test/scala/com/wavesplatform/http/LeaseRouteSpec.scala index 82e5aca2e01..c57c1479276 100644 --- a/node/src/test/scala/com/wavesplatform/http/LeaseRouteSpec.scala +++ b/node/src/test/scala/com/wavesplatform/http/LeaseRouteSpec.scala @@ -18,8 +18,7 @@ import com.wavesplatform.lang.v1.compiler.TestCompiler import com.wavesplatform.settings.WavesSettings import com.wavesplatform.state.TxMeta.Status import com.wavesplatform.state.diffs.ENOUGH_AMT -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.state.{BinaryDataEntry, Blockchain} +import com.wavesplatform.state.{BinaryDataEntry, Blockchain, LeaseDetails} import com.wavesplatform.test.* import com.wavesplatform.test.DomainPresets.* import com.wavesplatform.transaction.EthTxGenerator.Arg diff --git a/node/src/test/scala/com/wavesplatform/http/ProtoVersionTransactionsSpec.scala b/node/src/test/scala/com/wavesplatform/http/ProtoVersionTransactionsSpec.scala index 667863482bf..d3b911abe0e 100644 --- a/node/src/test/scala/com/wavesplatform/http/ProtoVersionTransactionsSpec.scala +++ b/node/src/test/scala/com/wavesplatform/http/ProtoVersionTransactionsSpec.scala @@ -14,7 +14,7 @@ import com.wavesplatform.protobuf.transaction.{PBSignedTransaction, PBTransactio import com.wavesplatform.protobuf.utils.PBUtils import com.wavesplatform.settings.Constants import com.wavesplatform.state.Blockchain -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.transaction.* import com.wavesplatform.transaction.Asset.IssuedAsset import com.wavesplatform.transaction.assets.* diff --git a/node/src/test/scala/com/wavesplatform/http/TransactionBroadcastSpec.scala b/node/src/test/scala/com/wavesplatform/http/TransactionBroadcastSpec.scala index f05881ba678..6b5f639a36f 100644 --- a/node/src/test/scala/com/wavesplatform/http/TransactionBroadcastSpec.scala +++ b/node/src/test/scala/com/wavesplatform/http/TransactionBroadcastSpec.scala @@ -10,7 +10,7 @@ import com.wavesplatform.lang.directives.values.V5 import com.wavesplatform.lang.v1.estimator.v3.ScriptEstimatorV3 import com.wavesplatform.lang.v1.traits.domain.{Lease, Recipient} import com.wavesplatform.network.TransactionPublisher -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.state.{AccountScriptInfo, Blockchain} import com.wavesplatform.test.TestTime import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} diff --git a/node/src/test/scala/com/wavesplatform/http/TransactionsRouteSpec.scala b/node/src/test/scala/com/wavesplatform/http/TransactionsRouteSpec.scala index 272e983604b..aaa20126519 100644 --- a/node/src/test/scala/com/wavesplatform/http/TransactionsRouteSpec.scala +++ b/node/src/test/scala/com/wavesplatform/http/TransactionsRouteSpec.scala @@ -22,7 +22,7 @@ import com.wavesplatform.lang.v1.compiler.TestCompiler import com.wavesplatform.lang.v1.traits.domain.LeaseCancel import com.wavesplatform.network.TransactionPublisher import com.wavesplatform.state.TxMeta.Status -import com.wavesplatform.state.reader.LeaseDetails +import com.wavesplatform.state.LeaseDetails import com.wavesplatform.state.{Blockchain, Height, InvokeScriptResult, TxMeta} import com.wavesplatform.test.* import com.wavesplatform.test.DomainPresets.{RideV6, TransactionStateSnapshot} diff --git a/node/src/test/scala/com/wavesplatform/state/Diff.scala b/node/src/test/scala/com/wavesplatform/state/Diff.scala index d71987f26b0..1380d90abe5 100755 --- a/node/src/test/scala/com/wavesplatform/state/Diff.scala +++ b/node/src/test/scala/com/wavesplatform/state/Diff.scala @@ -6,7 +6,6 @@ import com.google.common.hash.{BloomFilter, Funnels} import com.wavesplatform.account.{Address, Alias, PublicKey} import com.wavesplatform.common.state.ByteStr import com.wavesplatform.database.protobuf.EthereumTransactionMeta -import com.wavesplatform.state.reader.LeaseDetails import com.wavesplatform.transaction.Asset.IssuedAsset import com.wavesplatform.transaction.Transaction diff --git a/node/src/test/scala/com/wavesplatform/state/LightNodeTest.scala b/node/src/test/scala/com/wavesplatform/state/LightNodeTest.scala index 807d67a5ffd..361c5421674 100644 --- a/node/src/test/scala/com/wavesplatform/state/LightNodeTest.scala +++ b/node/src/test/scala/com/wavesplatform/state/LightNodeTest.scala @@ -12,7 +12,7 @@ import com.wavesplatform.settings.WavesSettings import com.wavesplatform.state.BlockchainUpdaterImpl.BlockApplyResult.Applied import com.wavesplatform.state.appender.{BlockAppender, ExtensionAppender} import com.wavesplatform.state.diffs.BlockDiffer -import com.wavesplatform.state.reader.SnapshotBlockchain +import com.wavesplatform.state.SnapshotBlockchain import com.wavesplatform.test.* import com.wavesplatform.transaction.TxHelpers import com.wavesplatform.transaction.TxValidationError.InvalidStateHash diff --git a/node/src/test/scala/com/wavesplatform/state/RollbackSpec.scala b/node/src/test/scala/com/wavesplatform/state/RollbackSpec.scala index 9391bb3301c..ffb2246b7b6 100644 --- a/node/src/test/scala/com/wavesplatform/state/RollbackSpec.scala +++ b/node/src/test/scala/com/wavesplatform/state/RollbackSpec.scala @@ -18,7 +18,7 @@ import com.wavesplatform.lang.v1.compiler.Terms.TRUE import com.wavesplatform.lang.v1.compiler.{Terms, TestCompiler} import com.wavesplatform.lang.v1.traits.domain.Lease import com.wavesplatform.settings.{TestFunctionalitySettings, WavesSettings} -import com.wavesplatform.state.reader.LeaseDetails +import com.wavesplatform.state.LeaseDetails import com.wavesplatform.test.* import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.AliasDoesNotExist diff --git a/node/src/test/scala/com/wavesplatform/state/StateHashSpec.scala b/node/src/test/scala/com/wavesplatform/state/StateHashSpec.scala index d1aab7e32ec..b6709947053 100644 --- a/node/src/test/scala/com/wavesplatform/state/StateHashSpec.scala +++ b/node/src/test/scala/com/wavesplatform/state/StateHashSpec.scala @@ -37,7 +37,7 @@ class StateHashSpec extends FreeSpec { stateHash.addAlias(address, "test1") stateHash.addAlias(address1, "test2") stateHash.addDataEntry(address, dataEntry) - stateHash.addLeaseStatus(TransactionId @@ assetId.id, status = true) + stateHash.addLeaseStatus(TransactionId @@ assetId.id, isActive = true) stateHash.addSponsorship(assetId, 1000) stateHash.addAssetBalance(address, assetId, 2000) stateHash.addAssetBalance(address1, assetId, 2000) diff --git a/node/src/test/scala/com/wavesplatform/state/diffs/BlockDifferTest.scala b/node/src/test/scala/com/wavesplatform/state/diffs/BlockDifferTest.scala index d8453155046..96dc3cd41b9 100644 --- a/node/src/test/scala/com/wavesplatform/state/diffs/BlockDifferTest.scala +++ b/node/src/test/scala/com/wavesplatform/state/diffs/BlockDifferTest.scala @@ -13,8 +13,7 @@ import com.wavesplatform.lagonaki.mocks.TestBlock.BlockWithSigner import com.wavesplatform.mining.{MinerImpl, MiningConstraint} import com.wavesplatform.settings.FunctionalitySettings import com.wavesplatform.state.diffs.BlockDiffer.Result -import com.wavesplatform.state.reader.SnapshotBlockchain -import com.wavesplatform.state.{Blockchain, Diff, StateSnapshot, TxStateSnapshotHashBuilder} +import com.wavesplatform.state.{Blockchain, Diff, SnapshotBlockchain, StateSnapshot, TxStateSnapshotHashBuilder} import com.wavesplatform.test.* import com.wavesplatform.test.node.* import com.wavesplatform.transaction.TxValidationError.InvalidStateHash diff --git a/node/src/test/scala/com/wavesplatform/state/diffs/ci/sync/SyncInvokeLeaseTest.scala b/node/src/test/scala/com/wavesplatform/state/diffs/ci/sync/SyncInvokeLeaseTest.scala index be423e2bddd..3e5b88c01c2 100644 --- a/node/src/test/scala/com/wavesplatform/state/diffs/ci/sync/SyncInvokeLeaseTest.scala +++ b/node/src/test/scala/com/wavesplatform/state/diffs/ci/sync/SyncInvokeLeaseTest.scala @@ -5,7 +5,7 @@ import com.wavesplatform.db.WithState.AddrWithBalance import com.wavesplatform.lang.directives.values.* import com.wavesplatform.lang.v1.compiler.TestCompiler import com.wavesplatform.state.diffs.FeeValidation.{FeeConstants, FeeUnit} -import com.wavesplatform.state.reader.LeaseDetails.Status.{Active, Cancelled} +import com.wavesplatform.state.LeaseDetails.Status.{Active, Cancelled} import com.wavesplatform.test.{PropSpec, produce} import com.wavesplatform.transaction.TransactionType import com.wavesplatform.transaction.TxHelpers.* diff --git a/node/src/test/scala/com/wavesplatform/state/diffs/smart/predef/MatcherBlockchainTest.scala b/node/src/test/scala/com/wavesplatform/state/diffs/smart/predef/MatcherBlockchainTest.scala index 96a8a45c238..68aab412353 100644 --- a/node/src/test/scala/com/wavesplatform/state/diffs/smart/predef/MatcherBlockchainTest.scala +++ b/node/src/test/scala/com/wavesplatform/state/diffs/smart/predef/MatcherBlockchainTest.scala @@ -13,7 +13,6 @@ import com.wavesplatform.lang.v1.compiler.TestCompiler import com.wavesplatform.lang.v1.traits.domain.Recipient import com.wavesplatform.settings.BlockchainSettings import com.wavesplatform.state.* -import com.wavesplatform.state.reader.LeaseDetails import com.wavesplatform.test.PropSpec import com.wavesplatform.transaction.Asset.Waves import com.wavesplatform.transaction.smart.script.ScriptRunner diff --git a/node/src/test/scala/com/wavesplatform/state/diffs/smart/scenarios/BalancesV4Test.scala b/node/src/test/scala/com/wavesplatform/state/diffs/smart/scenarios/BalancesV4Test.scala index ed46169e843..11e76bb87aa 100644 --- a/node/src/test/scala/com/wavesplatform/state/diffs/smart/scenarios/BalancesV4Test.scala +++ b/node/src/test/scala/com/wavesplatform/state/diffs/smart/scenarios/BalancesV4Test.scala @@ -20,7 +20,6 @@ import com.wavesplatform.lang.v1.traits.Environment import com.wavesplatform.settings.{Constants, FunctionalitySettings, TestFunctionalitySettings} import com.wavesplatform.state.* import com.wavesplatform.state.diffs.* -import com.wavesplatform.state.reader.SnapshotBlockchain import com.wavesplatform.test.* import com.wavesplatform.transaction.* import com.wavesplatform.transaction.Asset.* diff --git a/node/src/test/scala/com/wavesplatform/state/snapshot/StateSnapshotProtoTest.scala b/node/src/test/scala/com/wavesplatform/state/snapshot/StateSnapshotProtoTest.scala index bf5f7df21e7..d30976a23b0 100644 --- a/node/src/test/scala/com/wavesplatform/state/snapshot/StateSnapshotProtoTest.scala +++ b/node/src/test/scala/com/wavesplatform/state/snapshot/StateSnapshotProtoTest.scala @@ -8,7 +8,6 @@ import com.wavesplatform.lang.directives.values.V6 import com.wavesplatform.lang.v1.compiler.TestCompiler import com.wavesplatform.protobuf.PBSnapshots import com.wavesplatform.state.* -import com.wavesplatform.state.reader.LeaseDetails.Status import com.wavesplatform.test.PropSpec import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxHelpers.{defaultAddress, defaultSigner, secondAddress, secondSigner} diff --git a/node/src/test/scala/com/wavesplatform/state/snapshot/StateSnapshotStorageTest.scala b/node/src/test/scala/com/wavesplatform/state/snapshot/StateSnapshotStorageTest.scala index 44ecd523fd6..3a2b0d088c1 100644 --- a/node/src/test/scala/com/wavesplatform/state/snapshot/StateSnapshotStorageTest.scala +++ b/node/src/test/scala/com/wavesplatform/state/snapshot/StateSnapshotStorageTest.scala @@ -15,8 +15,8 @@ import com.wavesplatform.state.* import com.wavesplatform.state.TxMeta.Status.{Failed, Succeeded} import com.wavesplatform.state.diffs.BlockDiffer.CurrentBlockFeePart import com.wavesplatform.state.diffs.ENOUGH_AMT -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.state.reader.LeaseDetails.Status.{Active, Cancelled} +import com.wavesplatform.state.LeaseDetails +import com.wavesplatform.state.LeaseDetails.Status.{Active, Cancelled} import com.wavesplatform.test.DomainPresets.* import com.wavesplatform.test.{NumericExt, PropSpec} import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} diff --git a/node/src/test/scala/com/wavesplatform/utils/EmptyBlockchain.scala b/node/src/test/scala/com/wavesplatform/utils/EmptyBlockchain.scala index 6ee1556f2d1..27f41f53e81 100644 --- a/node/src/test/scala/com/wavesplatform/utils/EmptyBlockchain.scala +++ b/node/src/test/scala/com/wavesplatform/utils/EmptyBlockchain.scala @@ -7,7 +7,6 @@ import com.wavesplatform.common.state.ByteStr import com.wavesplatform.lang.ValidationError import com.wavesplatform.settings.BlockchainSettings import com.wavesplatform.state.* -import com.wavesplatform.state.reader.LeaseDetails import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.TxValidationError.GenericError import com.wavesplatform.transaction.transfer.TransferTransactionLike diff --git a/ride-runner/src/main/scala/com/wavesplatform/database/rocksdb/package.scala b/ride-runner/src/main/scala/com/wavesplatform/database/rocksdb/package.scala index 2367f392b08..8e3c4a67c56 100644 --- a/ride-runner/src/main/scala/com/wavesplatform/database/rocksdb/package.scala +++ b/ride-runner/src/main/scala/com/wavesplatform/database/rocksdb/package.scala @@ -15,7 +15,6 @@ import com.wavesplatform.lang.script.ScriptReader import com.wavesplatform.protobuf.transaction.PBRecipients import com.wavesplatform.protobuf.{ByteStrExt, ByteStringExt} import com.wavesplatform.state.* -import com.wavesplatform.state.reader.LeaseDetails import com.wavesplatform.transaction import com.wavesplatform.utils.* import monix.eval.Task diff --git a/ride-runner/src/main/scala/com/wavesplatform/ride/runner/blockchain/SupportedBlockchain.scala b/ride-runner/src/main/scala/com/wavesplatform/ride/runner/blockchain/SupportedBlockchain.scala index c9a15ca1a87..5e1c1232408 100644 --- a/ride-runner/src/main/scala/com/wavesplatform/ride/runner/blockchain/SupportedBlockchain.scala +++ b/ride-runner/src/main/scala/com/wavesplatform/ride/runner/blockchain/SupportedBlockchain.scala @@ -3,8 +3,7 @@ package com.wavesplatform.ride.runner.blockchain import com.wavesplatform.account.Address import com.wavesplatform.block.Block.BlockId import com.wavesplatform.common.state.ByteStr -import com.wavesplatform.state.reader.LeaseDetails -import com.wavesplatform.state.{AssetScriptInfo, Blockchain, TxMeta, VolumeAndFee} +import com.wavesplatform.state.{AssetScriptInfo, Blockchain, LeaseDetails, TxMeta, VolumeAndFee} import com.wavesplatform.transaction.transfer.TransferTransactionLike import com.wavesplatform.transaction.{Asset, ERC20Address, Transaction} import com.wavesplatform.utils.ScorexLogging