Skip to content

Commit

Permalink
IOS-7628 Add txBuilder as property, move sign logic into main send me…
Browse files Browse the repository at this point in the history
…thod
  • Loading branch information
fedorov-d committed Aug 16, 2024
1 parent 5f0ec70 commit 9ebeeaf
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,35 @@ import WalletCore
import BigInt

struct EthereumStakeKitTransactionHelper {
private let transactionBuilder: EthereumTransactionBuilder

init(transactionBuilder: EthereumTransactionBuilder) {
self.transactionBuilder = transactionBuilder
}

func prepareForSign(
_ stakingTransaction: StakeKitTransaction,
transactionBuilder: EthereumTransactionBuilder
_ stakingTransaction: StakeKitTransaction
) throws -> Data {
let input = try buildSigningInput(
stakingTransaction: stakingTransaction,
transactionBuilder: transactionBuilder
stakingTransaction: stakingTransaction
)
let preSigningOutput = try transactionBuilder.buildTxCompilerPreSigningOutput(input: input)
return preSigningOutput.dataHash
}

func prepareForSend(
stakingTransaction: StakeKitTransaction,
transactionBuilder: EthereumTransactionBuilder,
signatureInfo: SignatureInfo
) throws -> Data {
let input = try buildSigningInput(
stakingTransaction: stakingTransaction,
transactionBuilder: transactionBuilder
stakingTransaction: stakingTransaction
)
let output = try transactionBuilder.buildSigningOutput(input: input, signatureInfo: signatureInfo)
return output.encoded
}

private func buildSigningInput(
stakingTransaction: StakeKitTransaction,
transactionBuilder: EthereumTransactionBuilder
stakingTransaction: StakeKitTransaction
) throws -> EthereumSigningInput {
let compiledTransactionData = Data(hex: stakingTransaction.unsignedData)
let compiledTransaction = try JSONDecoder().decode(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class EthereumTransactionBuilder {
let input = try buildSigningInput(transaction: transaction)
let output = try buildSigningOutput(input: input, signatureInfo: signatureInfo)
return output.encoded
}
}

func buildDummyTransactionForL1(destination: String, value: String?, data: Data?, fee: Fee) throws -> Data {
let valueData = BigUInt(Data(hex: value ?? "0x0"))
Expand Down
38 changes: 16 additions & 22 deletions BlockchainSdk/Blockchains/Ethereum/EthereumWalletManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -410,28 +410,9 @@ extension EthereumWalletManager: StakeKitTransactionSender {
transaction: StakeKitTransaction,
signer: any TransactionSigner
) -> AnyPublisher<TransactionSendResult, SendTxError> {
signStakeKit(transaction, signer: signer)
.withWeakCaptureOf(self)
.flatMap { walletManager, rawTransaction in
walletManager.networkService.send(transaction: rawTransaction)
.mapSendError(tx: rawTransaction)
}
.withWeakCaptureOf(self)
.tryMap { walletManager, hash in
let mapper = PendingTransactionRecordMapper()
let record = mapper.mapToPendingTransactionRecord(stakeKitTransaction: transaction, hash: hash)
walletManager.wallet.addPendingTransaction(record)

return TransactionSendResult(hash: hash)
}
.eraseSendError()
.eraseToAnyPublisher()
}

func signStakeKit(_ transaction: StakeKitTransaction, signer: TransactionSigner) -> AnyPublisher<String, Error> {
let helper = EthereumStakeKitTransactionHelper()
let helper = EthereumStakeKitTransactionHelper(transactionBuilder: txBuilder)
return Result {
try helper.prepareForSign(transaction, transactionBuilder: txBuilder)
try helper.prepareForSign(transaction)
}
.publisher
.withWeakCaptureOf(self)
Expand All @@ -442,13 +423,26 @@ extension EthereumWalletManager: StakeKitTransactionSender {
.tryMap { walletManager, signatureInfo -> String in
try helper.prepareForSend(
stakingTransaction: transaction,
transactionBuilder: walletManager.txBuilder,
signatureInfo: signatureInfo
)
.hexString
.lowercased()
.addHexPrefix()
}
.withWeakCaptureOf(self)
.flatMap { walletManager, rawTransaction in
walletManager.networkService.send(transaction: rawTransaction)
.mapSendError(tx: rawTransaction)
}
.withWeakCaptureOf(self)
.tryMap { walletManager, hash in
let mapper = PendingTransactionRecordMapper()
let record = mapper.mapToPendingTransactionRecord(stakeKitTransaction: transaction, hash: hash)
walletManager.wallet.addPendingTransaction(record)

return TransactionSendResult(hash: hash)
}
.eraseSendError()
.eraseToAnyPublisher()
}
}

0 comments on commit 9ebeeaf

Please sign in to comment.