Skip to content

Commit

Permalink
Update block stream code
Browse files Browse the repository at this point in the history
* Updated block stream builder to remove exchange rates from transaction result
* Updated `BlockItemsTranslator` to read exchange rates from the `TranslationContext`.
* Updated all 12 `TranslationContext` implementations to carry the exchange rates
* Updated BlockStreamBuilder to store the exchange rates in the translation context only.
* Updated BlockStreamBuilderTest as needed
* Fixed other tests as needed.

Signed-off-by: Joseph Sinclair <joseph.sinclair@swirldslabs.com>
  • Loading branch information
jsync-swirlds committed Oct 29, 2024
1 parent 1cea16f commit 2d0c151
Show file tree
Hide file tree
Showing 19 changed files with 120 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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.
* <p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,6 +35,7 @@
*/
public record AirdropOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -32,6 +33,7 @@
*/
public record BaseOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,6 +35,7 @@
*/
public record ContractOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -37,6 +38,7 @@
*/
public record CryptoOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,6 +35,7 @@
*/
public record FileOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,6 +35,7 @@
*/
public record MintOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -32,6 +33,7 @@
*/
public record NodeOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -33,6 +34,7 @@
*/
public record ScheduleOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -35,6 +36,7 @@
*/
public record SubmitOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -32,6 +33,7 @@
*/
public record SupplyChangeOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -33,6 +34,7 @@
*/
public record TokenOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -33,6 +34,7 @@
*/
public record TopicOpContext(
@NonNull String memo,
@NonNull ExchangeRateSet transactionExchangeRates,
@NonNull TransactionID txnId,
@NonNull Transaction transaction,
@NonNull HederaFunctionality functionality,
Expand Down
Loading

0 comments on commit 2d0c151

Please sign in to comment.