diff --git a/hapi/hedera-protobufs/block/stream/output/smart_contract_service.proto b/hapi/hedera-protobufs/block/stream/output/smart_contract_service.proto index d4fc194ea459..c36054a4afd7 100644 --- a/hapi/hedera-protobufs/block/stream/output/smart_contract_service.proto +++ b/hapi/hedera-protobufs/block/stream/output/smart_contract_service.proto @@ -151,6 +151,7 @@ message EthereumOutput { * This field is not settled and MAY be removed or modified. */ repeated proto.TransactionSidecarRecord sidecars = 1; + /** * An ethereum hash value. *
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/BlockItemsTranslator.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/BlockItemsTranslator.java
index 6d6fc387d928..ba0b0f97db97 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/BlockItemsTranslator.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/BlockItemsTranslator.java
@@ -71,8 +71,9 @@ public TransactionReceipt translateReceipt(
requireNonNull(context);
requireNonNull(result);
requireNonNull(outputs);
- final var receiptBuilder =
- TransactionReceipt.newBuilder().status(result.status()).exchangeRate(result.exchangeRate());
+ final var receiptBuilder = TransactionReceipt.newBuilder()
+ .status(result.status())
+ .exchangeRate(context.transactionExchangeRates());
final var function = context.functionality();
switch (function) {
case CONTRACT_CALL,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/BlockStreamBuilder.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/BlockStreamBuilder.java
index 8d4a610dead7..b44adc6546a2 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/BlockStreamBuilder.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/BlockStreamBuilder.java
@@ -184,6 +184,10 @@ public class BlockStreamBuilder
*/
@Nullable
private HederaFunctionality functionality;
+ /**
+ * The exchange rate set to add to the record stream transaction receipt.
+ */
+ private ExchangeRateSet translationContextExchangeRates;
/**
* The memo from the transaction, set explicitly to avoid parsing the transaction again.
*/
@@ -840,7 +844,10 @@ public BlockStreamBuilder contractID(@Nullable final ContractID contractID) {
@NonNull
@Override
public BlockStreamBuilder exchangeRate(@Nullable final ExchangeRateSet exchangeRate) {
- transactionResultBuilder.exchangeRate(exchangeRate);
+ // Block Stream doesn't include exchange rate in output (it's in state
+ // changes when it is updated), so store exchange rate for the
+ // translation context
+ translationContextExchangeRates = exchangeRate;
return this;
}
@@ -1171,27 +1178,58 @@ private TranslationContext translationContext() {
CONTRACT_DELETE,
CONTRACT_UPDATE,
ETHEREUM_TRANSACTION -> new ContractOpContext(
- memo, transactionId, transaction, functionality, contractId);
+ memo, translationContextExchangeRates, transactionId, transaction, functionality, contractId);
case CRYPTO_CREATE, CRYPTO_UPDATE -> new CryptoOpContext(
- memo, transactionId, transaction, functionality, accountId, evmAddress);
- case FILE_CREATE -> new FileOpContext(memo, transactionId, transaction, functionality, fileId);
- case NODE_CREATE -> new NodeOpContext(memo, transactionId, transaction, functionality, nodeId);
- case SCHEDULE_DELETE -> new ScheduleOpContext(memo, transactionId, transaction, functionality, scheduleId);
+ memo,
+ translationContextExchangeRates,
+ transactionId,
+ transaction,
+ functionality,
+ accountId,
+ evmAddress);
+ case FILE_CREATE -> new FileOpContext(
+ memo, translationContextExchangeRates, transactionId, transaction, functionality, fileId);
+ case NODE_CREATE -> new NodeOpContext(
+ memo, translationContextExchangeRates, transactionId, transaction, functionality, nodeId);
+ case SCHEDULE_DELETE -> new ScheduleOpContext(
+ memo, translationContextExchangeRates, transactionId, transaction, functionality, scheduleId);
case CONSENSUS_SUBMIT_MESSAGE -> new SubmitOpContext(
- memo, transactionId, transaction, functionality, runningHash, runningHashVersion, sequenceNumber);
+ memo,
+ translationContextExchangeRates,
+ transactionId,
+ transaction,
+ functionality,
+ runningHash,
+ runningHashVersion,
+ sequenceNumber);
case TOKEN_AIRDROP -> {
if (!pendingAirdropRecords.isEmpty()) {
pendingAirdropRecords.sort(PENDING_AIRDROP_RECORD_COMPARATOR);
}
- yield new AirdropOpContext(memo, transactionId, transaction, functionality, pendingAirdropRecords);
+ yield new AirdropOpContext(
+ memo,
+ translationContextExchangeRates,
+ transactionId,
+ transaction,
+ functionality,
+ pendingAirdropRecords);
}
case TOKEN_MINT -> new MintOpContext(
- memo, transactionId, transaction, functionality, serialNumbers, newTotalSupply);
+ memo,
+ translationContextExchangeRates,
+ transactionId,
+ transaction,
+ functionality,
+ serialNumbers,
+ newTotalSupply);
case TOKEN_BURN, TOKEN_ACCOUNT_WIPE -> new SupplyChangeOpContext(
- memo, transactionId, transaction, functionality, newTotalSupply);
- case TOKEN_CREATE -> new TokenOpContext(memo, transactionId, transaction, functionality, tokenId);
- case CONSENSUS_CREATE_TOPIC -> new TopicOpContext(memo, transactionId, transaction, functionality, topicId);
- default -> new BaseOpContext(memo, transactionId, transaction, functionality);
+ memo, translationContextExchangeRates, transactionId, transaction, functionality, newTotalSupply);
+ case TOKEN_CREATE -> new TokenOpContext(
+ memo, translationContextExchangeRates, transactionId, transaction, functionality, tokenId);
+ case CONSENSUS_CREATE_TOPIC -> new TopicOpContext(
+ memo, translationContextExchangeRates, transactionId, transaction, functionality, topicId);
+ default -> new BaseOpContext(
+ memo, translationContextExchangeRates, transactionId, transaction, functionality);
};
}
}
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/TranslationContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/TranslationContext.java
index 018d49d2db50..d8a01f436093 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/TranslationContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/TranslationContext.java
@@ -23,6 +23,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.hapi.node.transaction.TransactionRecord;
import com.hedera.pbj.runtime.io.buffer.Bytes;
@@ -37,6 +38,12 @@ public interface TranslationContext {
*/
String memo();
+ /**
+ * The exchange rate set to include in the receipt for this transaction.
+ * @return an exchange rate set applicable to the transaction receipt.
+ */
+ ExchangeRateSet transactionExchangeRates();
+
/**
* Returns the transaction ID of the transaction.
* @return the transaction ID
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/AirdropOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/AirdropOpContext.java
index dbb3cabb4355..cda970178b82 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/AirdropOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/AirdropOpContext.java
@@ -19,6 +19,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.hapi.node.transaction.PendingAirdropRecord;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -34,6 +35,7 @@
*/
public record AirdropOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/BaseOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/BaseOpContext.java
index 0945fed1d67b..750dcd7aa345 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/BaseOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/BaseOpContext.java
@@ -19,6 +19,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -32,6 +33,7 @@
*/
public record BaseOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality)
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/ContractOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/ContractOpContext.java
index 46efafbc9384..b281c638bab5 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/ContractOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/ContractOpContext.java
@@ -20,6 +20,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
@@ -34,6 +35,7 @@
*/
public record ContractOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/CryptoOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/CryptoOpContext.java
index 70a1595f63f9..7d2c16269d58 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/CryptoOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/CryptoOpContext.java
@@ -20,6 +20,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import com.hedera.pbj.runtime.io.buffer.Bytes;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -37,6 +38,7 @@
*/
public record CryptoOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/FileOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/FileOpContext.java
index 28cfa953d7d8..23bb681ead89 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/FileOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/FileOpContext.java
@@ -20,6 +20,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
@@ -34,6 +35,7 @@
*/
public record FileOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/MintOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/MintOpContext.java
index 8c195cd06afd..bab7b98157ae 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/MintOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/MintOpContext.java
@@ -19,6 +19,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.List;
@@ -34,6 +35,7 @@
*/
public record MintOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/NodeOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/NodeOpContext.java
index 3240ca18e5c2..55e34af52682 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/NodeOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/NodeOpContext.java
@@ -19,6 +19,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -32,6 +33,7 @@
*/
public record NodeOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/ScheduleOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/ScheduleOpContext.java
index e70903802c7d..cf1faee096d6 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/ScheduleOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/ScheduleOpContext.java
@@ -20,6 +20,7 @@
import com.hedera.hapi.node.base.ScheduleID;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -33,6 +34,7 @@
*/
public record ScheduleOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/SubmitOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/SubmitOpContext.java
index adf8d1be9eab..aa304a506584 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/SubmitOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/SubmitOpContext.java
@@ -19,6 +19,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import com.hedera.pbj.runtime.io.buffer.Bytes;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -35,6 +36,7 @@
*/
public record SubmitOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/SupplyChangeOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/SupplyChangeOpContext.java
index 1753ffad1aaf..6d2f872d116e 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/SupplyChangeOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/SupplyChangeOpContext.java
@@ -19,6 +19,7 @@
import com.hedera.hapi.node.base.HederaFunctionality;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -32,6 +33,7 @@
*/
public record SupplyChangeOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/TokenOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/TokenOpContext.java
index af43550ba6bf..cc96abed47bc 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/TokenOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/TokenOpContext.java
@@ -20,6 +20,7 @@
import com.hedera.hapi.node.base.TokenID;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -33,6 +34,7 @@
*/
public record TokenOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/TopicOpContext.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/TopicOpContext.java
index 9a653a0c29da..22452d1f2435 100644
--- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/TopicOpContext.java
+++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/contexts/TopicOpContext.java
@@ -20,6 +20,7 @@
import com.hedera.hapi.node.base.TopicID;
import com.hedera.hapi.node.base.Transaction;
import com.hedera.hapi.node.base.TransactionID;
+import com.hedera.hapi.node.transaction.ExchangeRateSet;
import com.hedera.node.app.blocks.impl.TranslationContext;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -33,6 +34,7 @@
*/
public record TopicOpContext(
@NonNull String memo,
+ @NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/blocks/BlockItemsTranslatorTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/blocks/BlockItemsTranslatorTest.java
index 21a080c21dfa..be304352071c 100644
--- a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/blocks/BlockItemsTranslatorTest.java
+++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/blocks/BlockItemsTranslatorTest.java
@@ -142,7 +142,6 @@ class BlockItemsTranslatorTest {
.nextRate(new ExchangeRate(3, 4, TimestampSeconds.DEFAULT))
.build();
private static final TransactionResult TRANSACTION_RESULT = TransactionResult.newBuilder()
- .exchangeRate(RATES)
.consensusTimestamp(CONSENSUS_TIME)
.parentConsensusTimestamp(PARENT_CONSENSUS_TIME)
.scheduleRef(SCHEDULE_REF)
@@ -216,7 +215,7 @@ class BlockItemsTranslatorTest {
"TOKEN_BURN",
})
void mostOpsUseJustUseBaseOpContextForReceipt(@NonNull final HederaFunctionality function) {
- final var context = new BaseOpContext(MEMO, TXN_ID, Transaction.DEFAULT, function);
+ final var context = new BaseOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, function);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT, actualReceipt);
@@ -233,7 +232,7 @@ void mostOpsUseJustUseBaseOpContextForReceipt(@NonNull final HederaFunctionality
"ETHEREUM_TRANSACTION",
})
void contractOpsUseContractOpContext(@NonNull final HederaFunctionality function) {
- final var context = new ContractOpContext(MEMO, TXN_ID, Transaction.DEFAULT, function, CONTRACT_ID);
+ final var context = new ContractOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, function, CONTRACT_ID);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT.copyBuilder().contractID(CONTRACT_ID).build(), actualReceipt);
@@ -247,35 +246,37 @@ void contractOpsUseContractOpContext(@NonNull final HederaFunctionality function
"CRYPTO_UPDATE",
})
void certainCryptoOpsUseCryptoOpContext(@NonNull final HederaFunctionality function) {
- final var context = new CryptoOpContext(MEMO, TXN_ID, Transaction.DEFAULT, function, ACCOUNT_ID, EVM_ADDRESS);
+ final var context =
+ new CryptoOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, function, ACCOUNT_ID, EVM_ADDRESS);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT.copyBuilder().accountID(ACCOUNT_ID).build(), actualReceipt);
}
@Test
void fileCreateUsesFileOpContext() {
- final var context = new FileOpContext(MEMO, TXN_ID, Transaction.DEFAULT, FILE_CREATE, FILE_ID);
+ final var context = new FileOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, FILE_CREATE, FILE_ID);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT.copyBuilder().fileID(FILE_ID).build(), actualReceipt);
}
@Test
void nodeCreateUsesNodeOpContext() {
- final var context = new NodeOpContext(MEMO, TXN_ID, Transaction.DEFAULT, NODE_CREATE, NODE_ID);
+ final var context = new NodeOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, NODE_CREATE, NODE_ID);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT.copyBuilder().nodeId(NODE_ID).build(), actualReceipt);
}
@Test
void tokenCreateUsesTokenOpContext() {
- final var context = new TokenOpContext(MEMO, TXN_ID, Transaction.DEFAULT, TOKEN_CREATE, TOKEN_ID);
+ final var context = new TokenOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, TOKEN_CREATE, TOKEN_ID);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT.copyBuilder().tokenID(TOKEN_ID).build(), actualReceipt);
}
@Test
void topicCreateUsesTopicOpContext() {
- final var context = new TopicOpContext(MEMO, TXN_ID, Transaction.DEFAULT, CONSENSUS_CREATE_TOPIC, TOPIC_ID);
+ final var context =
+ new TopicOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, CONSENSUS_CREATE_TOPIC, TOPIC_ID);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT.copyBuilder().topicID(TOPIC_ID).build(), actualReceipt);
}
@@ -285,7 +286,7 @@ void scheduleCreateUsesCreateScheduleOutputOnlyIfPresent() {
final var output = TransactionOutput.newBuilder()
.createSchedule(new CreateScheduleOutput(SCHEDULE_ID, SCHEDULED_TXN_ID))
.build();
- final var context = new BaseOpContext(MEMO, TXN_ID, Transaction.DEFAULT, SCHEDULE_CREATE);
+ final var context = new BaseOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, SCHEDULE_CREATE);
final var actualReceiptNoOutput = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT, actualReceiptNoOutput);
@@ -306,7 +307,7 @@ void scheduleSignUsesSignScheduleOutputOnlyIfPresent() {
final var output = TransactionOutput.newBuilder()
.signSchedule(new SignScheduleOutput(SCHEDULED_TXN_ID))
.build();
- final var context = new BaseOpContext(MEMO, TXN_ID, Transaction.DEFAULT, SCHEDULE_SIGN);
+ final var context = new BaseOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, SCHEDULE_SIGN);
final var actualReceiptNoOutput = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT, actualReceiptNoOutput);
@@ -323,7 +324,8 @@ void scheduleSignUsesSignScheduleOutputOnlyIfPresent() {
@Test
void scheduleDeleteUsesScheduleOpContext() {
- final var context = new ScheduleOpContext(MEMO, TXN_ID, Transaction.DEFAULT, SCHEDULE_DELETE, SCHEDULE_ID);
+ final var context =
+ new ScheduleOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, SCHEDULE_DELETE, SCHEDULE_ID);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECEIPT.copyBuilder().scheduleID(SCHEDULE_ID).build(), actualReceipt);
@@ -333,6 +335,7 @@ void scheduleDeleteUsesScheduleOpContext() {
void submitMessageUsesSubmitOpContext() {
final var context = new SubmitOpContext(
MEMO,
+ RATES,
TXN_ID,
Transaction.DEFAULT,
CONSENSUS_SUBMIT_MESSAGE,
@@ -354,7 +357,7 @@ void submitMessageUsesSubmitOpContext() {
@Test
void tokenMintUsesMintOpContext() {
final var context =
- new MintOpContext(MEMO, TXN_ID, Transaction.DEFAULT, TOKEN_MINT, SERIAL_NOS, NEW_TOTAL_SUPPLY);
+ new MintOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, TOKEN_MINT, SERIAL_NOS, NEW_TOTAL_SUPPLY);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(
@@ -374,7 +377,8 @@ void tokenMintUsesMintOpContext() {
"TOKEN_BURN",
})
void supplyChangeOpsUseSupplyChangeContext(@NonNull final HederaFunctionality function) {
- final var context = new SupplyChangeOpContext(MEMO, TXN_ID, Transaction.DEFAULT, function, NEW_TOTAL_SUPPLY);
+ final var context =
+ new SupplyChangeOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, function, NEW_TOTAL_SUPPLY);
final var actualReceipt = BLOCK_ITEMS_TRANSLATOR.translateReceipt(context, TRANSACTION_RESULT);
assertEquals(
EXPECTED_BASE_RECEIPT
@@ -391,7 +395,7 @@ void contractCallUsesResultOutputIfPresent() {
final var output = TransactionOutput.newBuilder()
.contractCall(new CallContractOutput(List.of(), FUNCTION_RESULT))
.build();
- final var context = new ContractOpContext(MEMO, TXN_ID, Transaction.DEFAULT, CONTRACT_CALL, CONTRACT_ID);
+ final var context = new ContractOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, CONTRACT_CALL, CONTRACT_ID);
final var actualRecordNoOutput = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(
@@ -423,7 +427,8 @@ void contractCreateUsesResultOutputIfPresent() {
final var output = TransactionOutput.newBuilder()
.contractCreate(new CreateContractOutput(List.of(), FUNCTION_RESULT))
.build();
- final var context = new ContractOpContext(MEMO, TXN_ID, Transaction.DEFAULT, CONTRACT_CREATE, CONTRACT_ID);
+ final var context =
+ new ContractOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, CONTRACT_CREATE, CONTRACT_ID);
final var actualRecordNoOutput = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(
@@ -458,7 +463,8 @@ void ethTxCallUsesResultOutputIfPresent() {
.ethereumCallResult(FUNCTION_RESULT)
.build())
.build();
- final var context = new ContractOpContext(MEMO, TXN_ID, Transaction.DEFAULT, ETHEREUM_TRANSACTION, CONTRACT_ID);
+ final var context =
+ new ContractOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, ETHEREUM_TRANSACTION, CONTRACT_ID);
final var actualRecordNoOutput = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(
@@ -494,7 +500,8 @@ void ethTxCreateUsesResultOutputIfPresent() {
.ethereumCreateResult(FUNCTION_RESULT)
.build())
.build();
- final var context = new ContractOpContext(MEMO, TXN_ID, Transaction.DEFAULT, ETHEREUM_TRANSACTION, CONTRACT_ID);
+ final var context =
+ new ContractOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, ETHEREUM_TRANSACTION, CONTRACT_ID);
final var actualRecordNoOutput = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(
@@ -527,7 +534,7 @@ void cryptoTransferUsesSynthResultOutputIfPresent() {
final var output = TransactionOutput.newBuilder()
.contractCall(new CallContractOutput(List.of(), FUNCTION_RESULT))
.build();
- final var context = new BaseOpContext(MEMO, TXN_ID, Transaction.DEFAULT, CRYPTO_TRANSFER);
+ final var context = new BaseOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, CRYPTO_TRANSFER);
final var actualRecordNoOutput = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECORD, actualRecordNoOutput);
@@ -546,7 +553,7 @@ void cryptoTransferUsesCustomFeesOutputIfPresent() {
final var output = TransactionOutput.newBuilder()
.cryptoTransfer(new CryptoTransferOutput(ASSESSED_CUSTOM_FEES))
.build();
- final var context = new BaseOpContext(MEMO, TXN_ID, Transaction.DEFAULT, CRYPTO_TRANSFER);
+ final var context = new BaseOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, CRYPTO_TRANSFER);
final var actualRecordNoOutput = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECORD, actualRecordNoOutput);
@@ -568,7 +575,8 @@ void cryptoTransferUsesCustomFeesOutputIfPresent() {
"CRYPTO_UPDATE",
})
void certainCryptoOpsUseEvmAddressFromContext(@NonNull final HederaFunctionality function) {
- final var context = new CryptoOpContext(MEMO, TXN_ID, Transaction.DEFAULT, function, ACCOUNT_ID, EVM_ADDRESS);
+ final var context =
+ new CryptoOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, function, ACCOUNT_ID, EVM_ADDRESS);
final var actualRecord = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(
EXPECTED_BASE_RECORD
@@ -585,7 +593,7 @@ void certainCryptoOpsUseEvmAddressFromContext(@NonNull final HederaFunctionality
@Test
void tokenAirdropUsesPendingFromContext() {
final var context =
- new AirdropOpContext(MEMO, TXN_ID, Transaction.DEFAULT, TOKEN_AIRDROP, PENDING_AIRDROP_RECORDS);
+ new AirdropOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, TOKEN_AIRDROP, PENDING_AIRDROP_RECORDS);
final var actualRecord = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(
EXPECTED_BASE_RECORD
@@ -603,7 +611,7 @@ void utilPrngUsesOutputIfPresent() {
final var seedOutput = TransactionOutput.newBuilder()
.utilPrng(UtilPrngOutput.newBuilder().prngBytes(RUNNING_HASH).build())
.build();
- final var context = new BaseOpContext(MEMO, TXN_ID, Transaction.DEFAULT, UTIL_PRNG);
+ final var context = new BaseOpContext(MEMO, RATES, TXN_ID, Transaction.DEFAULT, UTIL_PRNG);
final var actualRecordNoOutput = BLOCK_ITEMS_TRANSLATOR.translateRecord(context, TRANSACTION_RESULT);
assertEquals(EXPECTED_BASE_RECORD, actualRecordNoOutput);
diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/blocks/BlockStreamBuilderTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/blocks/BlockStreamBuilderTest.java
index 476061949b3c..296070dc7a32 100644
--- a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/blocks/BlockStreamBuilderTest.java
+++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/blocks/BlockStreamBuilderTest.java
@@ -154,7 +154,6 @@ private void validateTransactionResult(final List