Skip to content

Commit

Permalink
Add TransactionVersion enum (#413)
Browse files Browse the repository at this point in the history
  • Loading branch information
DelevoXDG authored Feb 15, 2024
1 parent 72ffcc8 commit 4b67d12
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 92 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,7 @@ class StandardAccount @JvmOverloads constructor(

override fun signV1(calls: List<Call>, params: ExecutionParams, forFeeEstimate: Boolean): InvokeTransactionV1Payload {
val calldata = AccountCalldataTransformer.callsToExecuteCalldata(calls, cairoVersion)
val signVersion = when (forFeeEstimate) {
true -> estimateVersion(Felt.ONE)
false -> Felt.ONE
}
val signVersion = if (forFeeEstimate) TransactionVersion.V1_QUERY else TransactionVersion.V1
val tx = TransactionFactory.makeInvokeV1Transaction(
senderAddress = address,
calldata = calldata,
Expand All @@ -68,10 +65,7 @@ class StandardAccount @JvmOverloads constructor(

override fun signV3(calls: List<Call>, params: InvokeParamsV3, forFeeEstimate: Boolean): InvokeTransactionV3Payload {
val calldata = AccountCalldataTransformer.callsToExecuteCalldata(calls, cairoVersion)
val signVersion = when (forFeeEstimate) {
true -> estimateVersion(Felt(3))
false -> Felt(3)
}
val signVersion = if (forFeeEstimate) TransactionVersion.V3_QUERY else TransactionVersion.V3
val tx = TransactionFactory.makeInvokeV3Transaction(
senderAddress = address,
calldata = calldata,
Expand All @@ -94,10 +88,7 @@ class StandardAccount @JvmOverloads constructor(
nonce: Felt,
forFeeEstimate: Boolean,
): DeployAccountTransactionV1Payload {
val signVersion = when (forFeeEstimate) {
true -> estimateVersion(Felt.ONE)
false -> Felt.ONE
}
val signVersion = if (forFeeEstimate) TransactionVersion.V1_QUERY else TransactionVersion.V1
val tx = TransactionFactory.makeDeployAccountV1Transaction(
classHash = classHash,
contractAddress = address,
Expand All @@ -120,10 +111,7 @@ class StandardAccount @JvmOverloads constructor(
params: DeployAccountParamsV3,
forFeeEstimate: Boolean,
): DeployAccountTransactionV3Payload {
val signVersion = when (forFeeEstimate) {
true -> estimateVersion(Felt(3))
false -> Felt(3)
}
val signVersion = if (forFeeEstimate) TransactionVersion.V3_QUERY else TransactionVersion.V3
val tx = TransactionFactory.makeDeployAccountV3Transaction(
classHash = classHash,
senderAddress = address,
Expand All @@ -145,10 +133,7 @@ class StandardAccount @JvmOverloads constructor(
params: ExecutionParams,
forFeeEstimate: Boolean,
): DeclareTransactionV1Payload {
val signVersion = when (forFeeEstimate) {
true -> estimateVersion(Felt.ONE)
false -> Felt.ONE
}
val signVersion = if (forFeeEstimate) TransactionVersion.V1_QUERY else TransactionVersion.V1
val tx = TransactionFactory.makeDeclareV1Transaction(
contractDefinition = contractDefinition,
classHash = classHash,
Expand All @@ -169,10 +154,7 @@ class StandardAccount @JvmOverloads constructor(
params: ExecutionParams,
forFeeEstimate: Boolean,
): DeclareTransactionV2Payload {
val signVersion = when (forFeeEstimate) {
true -> estimateVersion(Felt(2))
false -> Felt(2)
}
val signVersion = if (forFeeEstimate) TransactionVersion.V2_QUERY else TransactionVersion.V2
val tx = TransactionFactory.makeDeclareV2Transaction(
contractDefinition = sierraContractDefinition,
senderAddress = address,
Expand All @@ -193,10 +175,7 @@ class StandardAccount @JvmOverloads constructor(
params: DeclareParamsV3,
forFeeEstimate: Boolean,
): DeclareTransactionV3Payload {
val signVersion = when (forFeeEstimate) {
true -> estimateVersion(Felt(3))
false -> Felt(3)
}
val signVersion = if (forFeeEstimate) TransactionVersion.V3_QUERY else TransactionVersion.V3
val tx = TransactionFactory.makeDeclareV3Transaction(
contractDefinition = sierraContractDefinition,
senderAddress = address,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.swmansion.starknet.crypto.StarknetCurve
import com.swmansion.starknet.data.types.*
import com.swmansion.starknet.data.types.transactions.DAMode
import com.swmansion.starknet.data.types.transactions.TransactionType
import com.swmansion.starknet.data.types.transactions.TransactionVersion
import com.swmansion.starknet.extensions.toFelt

/**
Expand All @@ -19,7 +20,7 @@ object TransactionHashCalculator {
contractAddress: Felt,
calldata: Calldata,
chainId: StarknetChainId,
version: Felt,
version: TransactionVersion,
nonce: Felt,
maxFee: Felt,
): Felt = transactionHashCommon(
Expand All @@ -38,7 +39,7 @@ object TransactionHashCalculator {
senderAddress: Felt,
calldata: Calldata,
chainId: StarknetChainId,
version: Felt,
version: TransactionVersion,
nonce: Felt,
tip: Uint64,
resourceBounds: ResourceBoundsMapping,
Expand Down Expand Up @@ -71,7 +72,7 @@ object TransactionHashCalculator {
calldata: Calldata,
salt: Felt,
chainId: StarknetChainId,
version: Felt,
version: TransactionVersion,
maxFee: Felt,
nonce: Felt,
): Felt {
Expand Down Expand Up @@ -99,7 +100,7 @@ object TransactionHashCalculator {
salt: Felt,
paymasterData: PaymasterData,
chainId: StarknetChainId,
version: Felt,
version: TransactionVersion,
nonce: Felt,
tip: Uint64,
resourceBounds: ResourceBoundsMapping,
Expand Down Expand Up @@ -136,13 +137,13 @@ object TransactionHashCalculator {
chainId: StarknetChainId,
senderAddress: Felt,
maxFee: Felt,
version: Felt,
version: TransactionVersion,
nonce: Felt,
): Felt {
val hash = StarknetCurve.pedersenOnElements(listOf(classHash))
return StarknetCurve.pedersenOnElements(
TransactionType.DECLARE.txPrefix,
version,
version.value,
senderAddress,
Felt.ZERO,
hash,
Expand All @@ -158,14 +159,14 @@ object TransactionHashCalculator {
chainId: StarknetChainId,
senderAddress: Felt,
maxFee: Felt,
version: Felt,
version: TransactionVersion,
nonce: Felt,
compiledClassHash: Felt,
): Felt {
val calldataHash = StarknetCurve.pedersenOnElements(listOf(classHash))
return StarknetCurve.pedersenOnElements(
TransactionType.DECLARE.txPrefix,
version,
version.value,
senderAddress,
Felt.ZERO,
calldataHash,
Expand All @@ -181,7 +182,7 @@ object TransactionHashCalculator {
classHash: Felt,
chainId: StarknetChainId,
senderAddress: Felt,
version: Felt,
version: TransactionVersion,
nonce: Felt,
compiledClassHash: Felt,
tip: Uint64,
Expand Down Expand Up @@ -212,7 +213,7 @@ object TransactionHashCalculator {

private fun transactionHashCommon(
txType: TransactionType,
version: Felt,
version: TransactionVersion,
contractAddress: Felt,
entryPointSelector: Felt,
calldata: Calldata,
Expand All @@ -222,7 +223,7 @@ object TransactionHashCalculator {
): Felt {
return StarknetCurve.pedersenOnElements(
txType.txPrefix,
version,
version.value,
contractAddress,
entryPointSelector,
StarknetCurve.pedersenOnElements(calldata),
Expand All @@ -234,7 +235,7 @@ object TransactionHashCalculator {

private fun prepareCommonTransanctionV3Fields(
txType: TransactionType,
version: Felt,
version: TransactionVersion,
address: Felt,
tip: Uint64,
resourceBounds: ResourceBoundsMapping,
Expand All @@ -246,7 +247,7 @@ object TransactionHashCalculator {
): List<Felt> {
return listOf(
txType.txPrefix,
version,
version.value,
address,
Poseidon.poseidonHash(
tip.toFelt,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ internal object DeclareTransactionV1PayloadSerializer : KSerializer<DeclareTrans
val jsonObject = buildJsonObject {
put("contract_class", value.contractDefinition.toJson())
put("sender_address", value.senderAddress.hexString())
put("version", value.version)
put("version", value.version.value.hexString())
put("max_fee", value.maxFee.hexString())
putJsonArray("signature") { value.signature.forEach { add(it) } }
put("nonce", value.nonce)
Expand All @@ -119,7 +119,7 @@ internal object DeclareTransactionV2PayloadSerializer : KSerializer<DeclareTrans
val jsonObject = buildJsonObject {
put("contract_class", value.contractDefinition.toJson())
put("sender_address", value.senderAddress.hexString())
put("version", value.version)
put("version", value.version.value.hexString())
put("max_fee", value.maxFee.hexString())
putJsonArray("signature") { value.signature.forEach { add(it) } }
put("nonce", value.nonce)
Expand All @@ -144,7 +144,7 @@ internal object DeclareTransactionV3PayloadSerializer : KSerializer<DeclareTrans
val jsonObject = buildJsonObject {
put("contract_class", value.contractDefinition.toJson())
put("sender_address", value.senderAddress.hexString())
put("version", value.version)
put("version", value.version.value.hexString())
putJsonArray("signature") { value.signature.forEach { add(it) } }
put("nonce", value.nonce)
put("type", value.type.toString())
Expand Down
Loading

0 comments on commit 4b67d12

Please sign in to comment.