Skip to content

Commit be21143

Browse files
committed
implement sequecning
1 parent a9d11d4 commit be21143

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+31969
-274
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ build/
66
coverage/*
77
config/
88
.envrc
9+
.python-version
910
# Default path for Juno DB files. It will get created if you follow the
1011
# README and/or run `./build/juno` command.
1112
/juno/

Makefile

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
.PHONY: vm juno
44

55
ifeq ($(VM_DEBUG),true)
6-
GO_TAGS = -tags vm_debug
6+
GO_TAGS = -tags 'vm_debug,no_coverage'
77
VM_TARGET = debug
88
else
9-
GO_TAGS =
9+
GO_TAGS = -tags 'no_coverage'
1010
VM_TARGET = all
1111
endif
1212

@@ -160,6 +160,65 @@ node3: juno-cached ## Run a node №3. P2P usage only
160160
--metrics-port=9093 \
161161
--disable-l1-verification
162162

163+
sequencer:
164+
./build/juno \
165+
--http \
166+
--http-port=6060 \
167+
--http-host=0.0.0.0 \
168+
--db-path=../seq-db \
169+
--log-level=debug \
170+
--seq-enable \
171+
--seq-block-time=1 \
172+
--network sequencer \
173+
--disable-l1-verification \
174+
--rpc-call-max-steps=4123000
175+
176+
sequencer-plugin-w-accounts:
177+
./build/juno \
178+
--http \
179+
--http-port=6060 \
180+
--http-host=0.0.0.0 \
181+
--db-path=../seq-db \
182+
--log-level=debug \
183+
--seq-enable \
184+
--seq-block-time=1 \
185+
--network sequencer \
186+
--plugin-path="myplugin.so" \
187+
--seq-disable-fees \
188+
--seq-genesis-file "./genesis/genesis_prefund_accounts.json" \
189+
--rpc-call-max-steps=4123000
190+
191+
sequencer-with-accounts:
192+
./build/juno \
193+
--http \
194+
--http-port=6060 \
195+
--http-host=0.0.0.0 \
196+
--db-path=../seq-db \
197+
--log-level=debug \
198+
--seq-enable \
199+
--seq-block-time=1 \
200+
--network sequencer \
201+
--disable-l1-verification \
202+
--seq-genesis-file "./genesis/genesis_prefund_accounts.json" \
203+
--rpc-call-max-steps=4123000
204+
205+
206+
sequencer-shadow-sepolia: # Only works for 0.12.3 Sepolia blocks
207+
./build/juno \
208+
--http \
209+
--http-port=6066 \
210+
--http-host=0.0.0.0 \
211+
--db-path=../seq-db\
212+
--log-level=info \
213+
--seq-enable \
214+
--seq-shadow-mode \
215+
--seq-block-time=5 \
216+
--seq-shadow-mode-sync-to-block=0 \
217+
--seq-rpc-endpoint="" \
218+
--network sepolia \
219+
--disable-l1-verification \
220+
--rpc-call-max-steps=4123000
221+
163222
pathfinder: juno-cached ## Run a node to sync from pathfinder feedernode. P2P usage only
164223
./build/juno \
165224
--network=sepolia \

adapters/vm2core/vm2core.go

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,35 @@ import (
55
"slices"
66

77
"github.com/NethermindEth/juno/core"
8+
"github.com/NethermindEth/juno/core/felt"
89
"github.com/NethermindEth/juno/utils"
910
"github.com/NethermindEth/juno/vm"
1011
"github.com/ethereum/go-ethereum/common"
1112
)
1213

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+
1337
func AdaptOrderedEvent(event vm.OrderedEvent) *core.Event {
1438
return &core.Event{
1539
From: event.From,
@@ -39,3 +63,113 @@ func AdaptOrderedEvents(events []vm.OrderedEvent) []*core.Event {
3963
})
4064
return utils.Map(events, AdaptOrderedEvent)
4165
}
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

Comments
 (0)