Skip to content

Commit df48ed9

Browse files
Update hashing functions for 0.13.2 (#1964)
Co-authored-by: IronGauntlets <[email protected]>
1 parent 62b354d commit df48ed9

File tree

32 files changed

+17747
-130
lines changed

32 files changed

+17747
-130
lines changed

adapters/p2p2core/receipt.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,15 @@ func adaptExecutionResources(er *spec.Receipt_ExecutionResources) *core.Executio
5252
Keccak: uint64(er.GetBuiltins().GetKeccak()),
5353
Poseidon: uint64(er.GetBuiltins().GetPoseidon()),
5454
SegmentArena: 0, // todo(kirill) recheck
55+
// todo(kirill) set fields after spec update
56+
AddMod: 0,
57+
MulMod: 0,
58+
RangeCheck96: 0,
5559
},
5660
DataAvailability: nil, // todo(kirill) recheck
5761
MemoryHoles: uint64(er.MemoryHoles),
5862
Steps: uint64(er.Steps), // todo SPEC 32 -> 64 bytes
63+
TotalGasConsumed: nil, // todo(kirill) fill after spec update
5964
}
6065
}
6166

adapters/sn2core/sn2core.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,17 @@ func AdaptTransactionReceipt(response *starknet.TransactionReceipt) *core.Transa
7979
}
8080
}
8181

82+
func adaptGasConsumed(response *starknet.GasConsumed) *core.GasConsumed {
83+
if response == nil {
84+
return nil
85+
}
86+
87+
return &core.GasConsumed{
88+
L1Gas: response.L1Gas,
89+
L1DataGas: response.L1DataGas,
90+
}
91+
}
92+
8293
func AdaptEvent(response *starknet.Event) *core.Event {
8394
if response == nil {
8495
return nil
@@ -101,6 +112,7 @@ func AdaptExecutionResources(response *starknet.ExecutionResources) *core.Execut
101112
MemoryHoles: response.MemoryHoles,
102113
Steps: response.Steps,
103114
DataAvailability: (*core.DataAvailability)(response.DataAvailability),
115+
TotalGasConsumed: adaptGasConsumed(response.TotalGasConsumed),
104116
}
105117
}
106118

adapters/vm2core/vm2core.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,14 @@ func AdaptExecutionResources(resources *vm.ExecutionResources) *core.ExecutionRe
2222
Poseidon: resources.Poseidon,
2323
SegmentArena: resources.SegmentArena,
2424
Output: 0, // todo(kirill) recheck, add Output field to core?
25+
AddMod: resources.AddMod,
26+
MulMod: resources.MulMod,
27+
RangeCheck96: resources.RangeCheck96,
2528
},
2629
MemoryHoles: resources.MemoryHoles,
2730
Steps: resources.Steps,
2831
DataAvailability: adaptDA(resources.DataAvailability),
32+
TotalGasConsumed: nil, // todo: fill after 0.13.2
2933
}
3034
}
3135

blockchain/blockchain.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ type Reader interface {
5151

5252
var (
5353
ErrParentDoesNotMatchHead = errors.New("block's parent hash does not match head block hash")
54-
supportedStarknetVersion = semver.MustParse("0.13.1")
54+
supportedStarknetVersion = semver.MustParse("0.13.2")
5555
)
5656

5757
func checkBlockVersion(protocolVersion string) error {
@@ -340,6 +340,7 @@ func (b *Blockchain) Store(block *core.Block, blockCommitments *core.BlockCommit
340340
if err := verifyBlock(txn, block); err != nil {
341341
return err
342342
}
343+
343344
if err := core.NewState(txn).Update(block.Number, stateUpdate, newClasses); err != nil {
344345
return err
345346
}
@@ -636,7 +637,7 @@ func (b *Blockchain) SanityCheckNewHeight(block *core.Block, stateUpdate *core.S
636637
return nil, err
637638
}
638639

639-
return core.VerifyBlockHash(block, b.network)
640+
return core.VerifyBlockHash(block, b.network, stateUpdate.StateDiff)
640641
}
641642

642643
type txAndReceiptDBKey struct {

blockchain/blockchain_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,31 @@ func TestStore(t *testing.T) {
268268
})
269269
}
270270

271+
func TestBlockCommitments(t *testing.T) {
272+
chain := blockchain.New(pebble.NewMemTest(t), &utils.Mainnet)
273+
client := feeder.NewTestClient(t, &utils.Mainnet)
274+
gw := adaptfeeder.New(client)
275+
276+
b, err := gw.BlockByNumber(context.Background(), 0)
277+
require.NoError(t, err)
278+
279+
su, err := gw.StateUpdate(context.Background(), 0)
280+
require.NoError(t, err)
281+
282+
expectedCommitments := &core.BlockCommitments{
283+
TransactionCommitment: new(felt.Felt).SetUint64(1),
284+
EventCommitment: new(felt.Felt).SetUint64(2),
285+
ReceiptCommitment: new(felt.Felt).SetUint64(3),
286+
StateDiffCommitment: new(felt.Felt).SetUint64(4),
287+
}
288+
289+
require.NoError(t, chain.Store(b, expectedCommitments, su, nil))
290+
291+
commitments, err := chain.BlockCommitmentsByNumber(0)
292+
require.NoError(t, err)
293+
require.Equal(t, expectedCommitments, commitments)
294+
}
295+
271296
func TestTransactionAndReceipt(t *testing.T) {
272297
chain := blockchain.New(pebble.NewMemTest(t), &utils.Mainnet)
273298

clients/feeder/feeder_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,22 @@ func TestBlockHeaderV0131Unmarshal(t *testing.T) {
334334
require.Equal(t, uint64(128), block.Receipts[0].ExecutionResources.DataAvailability.L1DataGas)
335335
}
336336

337+
func TestBlockHeaderv0132Unmarshal(t *testing.T) {
338+
client := feeder.NewTestClient(t, &utils.SepoliaIntegration)
339+
block, err := client.Block(context.Background(), "35748")
340+
require.NoError(t, err)
341+
342+
// Only focus on checking the new fields
343+
require.Equal(t, utils.HexToFelt(t, "0x1ea2a9cfa3df5297d58c0a04d09d276bc68d40fe64701305bbe2ed8f417e869"), block.Hash)
344+
require.Equal(t, utils.HexToFelt(t, "0x77140bef51bbb4d1932f17cc5081825ff18465a1df4440ca0429a4fa80f1dc5"), block.ParentHash)
345+
require.Equal(t, utils.HexToFelt(t, "0x6f12628d21a8df7f158b631d801fc0dd20034b9e22eca255bddc0c1c1bc283f"), block.ReceiptCommitment)
346+
require.Equal(t, utils.HexToFelt(t, "0x23587c54d590b57b8e25acbf1e1a422eb4cd104e95ee4a681021a6bb7456afa"), block.StateDiffCommitment)
347+
require.Equal(t, uint64(6), block.StateDiffLength)
348+
require.Equal(t, "0.13.2", block.Version)
349+
require.Equal(t, uint64(117620), block.Receipts[0].ExecutionResources.TotalGasConsumed.L1Gas)
350+
require.Equal(t, uint64(192), block.Receipts[0].ExecutionResources.TotalGasConsumed.L1DataGas)
351+
}
352+
337353
func TestClassV0Unmarshal(t *testing.T) {
338354
client := feeder.NewTestClient(t, &utils.Mainnet)
339355

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
{
2+
"block_hash": "0x1ea2a9cfa3df5297d58c0a04d09d276bc68d40fe64701305bbe2ed8f417e869",
3+
"parent_block_hash": "0x77140bef51bbb4d1932f17cc5081825ff18465a1df4440ca0429a4fa80f1dc5",
4+
"block_number": 35748,
5+
"state_root": "0x38e01cbe2d5721780b2e1a478fd131f2ffcc099528dd2e1289f26b027127790",
6+
"transaction_commitment": "0x54f43cf29b80cc83aef36f3195b73cb165ad12553eae147b4cce62adbf0b180",
7+
"event_commitment": "0x12dfbe9dbbaba9c34b5a4c0ba622dcd8e2bb0264481c77f073008b59825a758",
8+
"receipt_commitment": "0x6f12628d21a8df7f158b631d801fc0dd20034b9e22eca255bddc0c1c1bc283f",
9+
"state_diff_commitment": "0x23587c54d590b57b8e25acbf1e1a422eb4cd104e95ee4a681021a6bb7456afa",
10+
"state_diff_length": 6,
11+
"status": "ACCEPTED_ON_L1",
12+
"l1_da_mode": "BLOB",
13+
"l1_gas_price": {
14+
"price_in_wei": "0x7427e87c4",
15+
"price_in_fri": "0x9346cee0949c"
16+
},
17+
"l1_data_gas_price": {
18+
"price_in_wei": "0x3b095dc6",
19+
"price_in_fri": "0x4ada914d823"
20+
},
21+
"transactions": [
22+
{
23+
"transaction_hash": "0x5ac644bbd6ae98d3be2d988439854e33f0961e24f349a63b43e16d172bfe747",
24+
"version": "0x2",
25+
"max_fee": "0x4f6ac5195e92e4",
26+
"signature": [
27+
"0x43ad3c7c77f7b7762db41ee9d33958813ee25efed77bc7199e08f4f40b1a59",
28+
"0xfedb8715405faf28de29a07a3f3f06f078bac3fcb67ac7f5ae392e15a75921"
29+
],
30+
"nonce": "0xd",
31+
"class_hash": "0x2fd9e122406490dc0f299f3070eaaa8df854d97ff81b47e91da32b8cd9d757a",
32+
"compiled_class_hash": "0x55d1e0ee31f8f937fc75b37045129fbe0e01747baacb44b89d2d3d2c649117e",
33+
"sender_address": "0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365",
34+
"type": "DECLARE"
35+
},
36+
{
37+
"transaction_hash": "0x21bc0afe54123b946855e1bf9389d943313df5c5c396fbf0630234a44f6f592",
38+
"version": "0x2",
39+
"max_fee": "0xe6e9346a5ae75a",
40+
"signature": [
41+
"0x12a928f7042a66c5419fc5182da6879c357f013335d8b61d0ad774009afbb40",
42+
"0x63479f4343dc2f068bff99fbbf0027250a672999fb5675cee1f2d1a64d33844"
43+
],
44+
"nonce": "0xe",
45+
"class_hash": "0x19de7881922dbc95846b1bb9464dba34046c46470cfb5e18b4cb2892fd4111f",
46+
"compiled_class_hash": "0x6506976af042088c9ea49e6cc9c9a12838ee6920bb989dce02f5c6467667367",
47+
"sender_address": "0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365",
48+
"type": "DECLARE"
49+
}
50+
],
51+
"timestamp": 1720426817,
52+
"sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8",
53+
"transaction_receipts": [
54+
{
55+
"execution_status": "SUCCEEDED",
56+
"transaction_index": 0,
57+
"transaction_hash": "0x5ac644bbd6ae98d3be2d988439854e33f0961e24f349a63b43e16d172bfe747",
58+
"l2_to_l1_messages": [],
59+
"events": [
60+
{
61+
"from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
62+
"keys": [
63+
"0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9"
64+
],
65+
"data": [
66+
"0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365",
67+
"0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8",
68+
"0xd07af45c84550",
69+
"0x0"
70+
]
71+
}
72+
],
73+
"execution_resources": {
74+
"n_steps": 3950,
75+
"builtin_instance_counter": {
76+
"pedersen_builtin": 16,
77+
"range_check_builtin": 157,
78+
"ecdsa_builtin": 1,
79+
"poseidon_builtin": 4
80+
},
81+
"n_memory_holes": 0,
82+
"data_availability": {
83+
"l1_gas": 0,
84+
"l1_data_gas": 192
85+
},
86+
"total_gas_consumed": {
87+
"l1_gas": 117620,
88+
"l1_data_gas": 192
89+
}
90+
},
91+
"actual_fee": "0xd07af45c84550"
92+
},
93+
{
94+
"execution_status": "SUCCEEDED",
95+
"transaction_index": 1,
96+
"transaction_hash": "0x21bc0afe54123b946855e1bf9389d943313df5c5c396fbf0630234a44f6f592",
97+
"l2_to_l1_messages": [],
98+
"events": [
99+
{
100+
"from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
101+
"keys": [
102+
"0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9"
103+
],
104+
"data": [
105+
"0x472aa8128e01eb0df145810c9511a92852d62a68ba8198ce5fa414e6337a365",
106+
"0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8",
107+
"0x471426f16c4330",
108+
"0x0"
109+
]
110+
}
111+
],
112+
"execution_resources": {
113+
"n_steps": 3950,
114+
"builtin_instance_counter": {
115+
"poseidon_builtin": 4,
116+
"ecdsa_builtin": 1,
117+
"range_check_builtin": 157,
118+
"pedersen_builtin": 16
119+
},
120+
"n_memory_holes": 0,
121+
"data_availability": {
122+
"l1_gas": 0,
123+
"l1_data_gas": 192
124+
},
125+
"total_gas_consumed": {
126+
"l1_gas": 641644,
127+
"l1_data_gas": 192
128+
}
129+
},
130+
"actual_fee": "0x471426f16c4330"
131+
}
132+
],
133+
"starknet_version": "0.13.2"
134+
}

0 commit comments

Comments
 (0)