@@ -5,11 +5,35 @@ import (
5
5
"slices"
6
6
7
7
"github.com/NethermindEth/juno/core"
8
+ "github.com/NethermindEth/juno/core/felt"
8
9
"github.com/NethermindEth/juno/utils"
9
10
"github.com/NethermindEth/juno/vm"
10
11
"github.com/ethereum/go-ethereum/common"
11
12
)
12
13
14
+ func AdaptExecutionResources (resources * vm.ExecutionResources , totalGas * vm.GasConsumed ) * core.ExecutionResources {
15
+ return & core.ExecutionResources {
16
+ BuiltinInstanceCounter : core.BuiltinInstanceCounter {
17
+ Pedersen : resources .Pedersen ,
18
+ RangeCheck : resources .RangeCheck ,
19
+ Bitwise : resources .Bitwise ,
20
+ Ecsda : resources .Ecdsa ,
21
+ EcOp : resources .EcOp ,
22
+ Keccak : resources .Keccak ,
23
+ Poseidon : resources .Poseidon ,
24
+ SegmentArena : resources .SegmentArena ,
25
+ Output : resources .Output ,
26
+ AddMod : resources .AddMod ,
27
+ MulMod : resources .MulMod ,
28
+ RangeCheck96 : resources .RangeCheck96 ,
29
+ },
30
+ MemoryHoles : resources .MemoryHoles ,
31
+ Steps : resources .Steps ,
32
+ DataAvailability : adaptDA (resources .DataAvailability ),
33
+ TotalGasConsumed : & core.GasConsumed {L1Gas : totalGas .L1Gas , L1DataGas : totalGas .L1DataGas },
34
+ }
35
+ }
36
+
13
37
func AdaptOrderedEvent (event vm.OrderedEvent ) * core.Event {
14
38
return & core.Event {
15
39
From : event .From ,
@@ -39,3 +63,113 @@ func AdaptOrderedEvents(events []vm.OrderedEvent) []*core.Event {
39
63
})
40
64
return utils .Map (events , AdaptOrderedEvent )
41
65
}
66
+
67
+ func adaptDA (da * vm.DataAvailability ) * core.DataAvailability {
68
+ if da == nil {
69
+ return nil
70
+ }
71
+
72
+ return & core.DataAvailability {
73
+ L1Gas : da .L1Gas ,
74
+ L1DataGas : da .L1DataGas ,
75
+ }
76
+ }
77
+
78
+ func AdaptStateDiff (sd * vm.StateDiff ) * core.StateDiff {
79
+ result := core.StateDiff {
80
+ StorageDiffs : make (map [felt.Felt ]map [felt.Felt ]* felt.Felt ),
81
+ Nonces : make (map [felt.Felt ]* felt.Felt ),
82
+ DeployedContracts : make (map [felt.Felt ]* felt.Felt ),
83
+ DeclaredV0Classes : []* felt.Felt {},
84
+ DeclaredV1Classes : make (map [felt.Felt ]* felt.Felt ),
85
+ ReplacedClasses : make (map [felt.Felt ]* felt.Felt ),
86
+ }
87
+ if sd == nil {
88
+ return & result
89
+ }
90
+ for _ , entries := range sd .StorageDiffs {
91
+ KeyVals := map [felt.Felt ]* felt.Felt {}
92
+ for _ , entry := range entries .StorageEntries {
93
+ KeyVals [entry .Key ] = & entry .Value
94
+ }
95
+ result .StorageDiffs [entries .Address ] = KeyVals
96
+ }
97
+ for _ , addrNonce := range sd .Nonces {
98
+ result .Nonces [addrNonce .ContractAddress ] = & addrNonce .Nonce
99
+ }
100
+ for _ , addrClassHash := range sd .DeployedContracts {
101
+ result .Nonces [addrClassHash .Address ] = & addrClassHash .ClassHash
102
+ }
103
+ for _ , hashes := range sd .DeclaredClasses {
104
+ result .DeclaredV1Classes [hashes .ClassHash ] = & hashes .CompiledClassHash
105
+ }
106
+ for _ , addrClassHash := range sd .ReplacedClasses {
107
+ result .ReplacedClasses [addrClassHash .ClassHash ] = & addrClassHash .ClassHash
108
+ }
109
+ result .DeclaredV0Classes = append (result .DeclaredV0Classes , sd .DeprecatedDeclaredClasses ... )
110
+ return & result
111
+ }
112
+
113
+ func StateDiff (trace * vm.TransactionTrace ) * core.StateDiff {
114
+ if trace .StateDiff == nil {
115
+ return nil
116
+ }
117
+ stateDiff := trace .StateDiff
118
+ newStorageDiffs := make (map [felt.Felt ]map [felt.Felt ]* felt.Felt )
119
+ for _ , sd := range stateDiff .StorageDiffs {
120
+ entries := make (map [felt.Felt ]* felt.Felt )
121
+ for _ , entry := range sd .StorageEntries {
122
+ val := entry .Value
123
+ entries [entry .Key ] = & val
124
+ }
125
+ newStorageDiffs [sd .Address ] = entries
126
+ }
127
+
128
+ newNonces := make (map [felt.Felt ]* felt.Felt )
129
+ for _ , nonce := range stateDiff .Nonces {
130
+ nonc := nonce .Nonce
131
+ newNonces [nonce .ContractAddress ] = & nonc
132
+ }
133
+
134
+ newDeployedContracts := make (map [felt.Felt ]* felt.Felt )
135
+ for _ , dc := range stateDiff .DeployedContracts {
136
+ ch := dc .ClassHash
137
+ newDeployedContracts [dc .Address ] = & ch
138
+ }
139
+
140
+ newDeclaredV1Classes := make (map [felt.Felt ]* felt.Felt )
141
+ for _ , dc := range stateDiff .DeclaredClasses {
142
+ cch := dc .CompiledClassHash
143
+ newDeclaredV1Classes [dc .ClassHash ] = & cch
144
+ }
145
+
146
+ newReplacedClasses := make (map [felt.Felt ]* felt.Felt )
147
+ for _ , rc := range stateDiff .ReplacedClasses {
148
+ ch := rc .ClassHash
149
+ newReplacedClasses [rc .ContractAddress ] = & ch
150
+ }
151
+
152
+ return & core.StateDiff {
153
+ StorageDiffs : newStorageDiffs ,
154
+ Nonces : newNonces ,
155
+ DeployedContracts : newDeployedContracts ,
156
+ DeclaredV0Classes : stateDiff .DeprecatedDeclaredClasses ,
157
+ DeclaredV1Classes : newDeclaredV1Classes ,
158
+ ReplacedClasses : newReplacedClasses ,
159
+ }
160
+ }
161
+
162
+ func Receipt (fee * felt.Felt , feeUnit core.FeeUnit , txHash * felt.Felt ,
163
+ trace * vm.TransactionTrace , txnReceipt * vm.TransactionReceipt ,
164
+ ) * core.TransactionReceipt {
165
+ return & core.TransactionReceipt { //nolint:exhaustruct
166
+ Fee : fee ,
167
+ FeeUnit : feeUnit ,
168
+ Events : AdaptOrderedEvents (trace .AllEvents ()),
169
+ ExecutionResources : AdaptExecutionResources (trace .TotalExecutionResources (), & txnReceipt .Gas ),
170
+ L2ToL1Message : AdaptOrderedMessagesToL1 (trace .AllMessages ()),
171
+ TransactionHash : txHash ,
172
+ Reverted : trace .IsReverted (),
173
+ RevertReason : trace .RevertReason (),
174
+ }
175
+ }
0 commit comments