Skip to content

Commit

Permalink
ABW-2048 Handle Reserved Instructions (#762)
Browse files Browse the repository at this point in the history
  • Loading branch information
GhenadieVP committed Sep 15, 2023
1 parent 38d35ca commit 2259258
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

import ClientPrelude
import EngineKit

// MARK: - TransactionFailure
public enum TransactionFailure: Sendable, LocalizedError, Equatable {
Expand Down Expand Up @@ -51,6 +51,9 @@ extension TransactionFailure {
case .failedToSubmit:
return (errorKind: .failedToSubmitTransaction, message: nil)

case .failedToPrepareTXReview(.manifestWithReservedInstructions):
return (errorKind: .failedToPrepareTransaction, message: self.errorDescription)

// case let .failedToSubmit(error):
// switch error {
// case .failedToSubmitTX:
Expand Down Expand Up @@ -82,6 +85,7 @@ extension TransactionFailure {
case failedToRetrieveTXReceipt(String)
case failedToExtractTXReceiptBytes(Error)
case failedToGenerateTXReview(Error)
case manifestWithReservedInstructions([ReservedInstruction])

public var errorDescription: String? {
switch self {
Expand All @@ -95,6 +99,8 @@ extension TransactionFailure {
return "ET failed to generate TX review: \(error.localizedDescription)"
case let .failedToRetrieveTXReceipt(message):
return "Failed to retrive TX receipt from gateway: \(message)"
case .manifestWithReservedInstructions:
return "Transaction Manifest contains forbidden instructions"
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,10 @@ extension TransactionClient {
/// Analyze the manifest
let analyzedManifestToReview = try request.manifestToSign.analyzeExecution(transactionReceipt: receiptBytes)

guard analyzedManifestToReview.reservedInstructions.isEmpty else {
throw TransactionFailure.failedToPrepareTXReview(.manifestWithReservedInstructions(analyzedManifestToReview.reservedInstructions))
}

/// Get all of the expected signing factors.
let signingFactors = try await {
if let nonEmpty = NonEmpty<Set<EntityPotentiallyVirtual>>(transactionSigners.intentSignerEntitiesOrEmpty()) {
Expand Down

0 comments on commit 2259258

Please sign in to comment.