diff --git a/Makefile b/Makefile index e2bae30eec..b35ca89723 100644 --- a/Makefile +++ b/Makefile @@ -120,7 +120,7 @@ node2: --log-level=debug \ --db-path=./p2p-dbs/node2 \ --p2p \ - --p2p-peers=/ip4/127.0.0.1/tcp/7777/p2p/12D3KooWLdURCjbp1D7hkXWk6ZVfcMDPtsNnPHuxoTcWXFtvrxGG \ + --p2p-peers=/ip4/10.100.7.108/tcp/10000/p2p/12D3KooWDFYi71juk6dYWo3UDvqs5gAzGDc124LSvcR5d187Tdvi \ --p2p-private-key="2d87e1d1c9d8dda1cf9a662de1978d2cd0b96e6ba390c75ded87c6c4fab657057fa782ae5977c3bd02d58281dccd16f2c26990d1f6c22f818a84edac97957348" \ --metrics-port=9092 diff --git a/adapters/core2p2p/block.go b/adapters/core2p2p/block.go index ea290e8f04..e28b6346b1 100644 --- a/adapters/core2p2p/block.go +++ b/adapters/core2p2p/block.go @@ -27,7 +27,9 @@ func AdaptSignature(sig []*felt.Felt) *spec.ConsensusSignature { } } -func AdaptHeader(header *core.Header, commitments *core.BlockCommitments) *spec.SignedBlockHeader { +func AdaptHeader(header *core.Header, commitments *core.BlockCommitments, + stateDiffCommitment *felt.Felt, +) *spec.SignedBlockHeader { return &spec.SignedBlockHeader{ BlockHash: AdaptHash(header.Hash), ParentHash: AdaptHash(header.ParentHash), @@ -44,12 +46,15 @@ func AdaptHeader(header *core.Header, commitments *core.BlockCommitments) *spec. Root: AdaptHash(commitments.EventCommitment), }, // todo fill receipts - Receipts: nil, + Receipts: &spec.Hash{}, ProtocolVersion: header.ProtocolVersion, GasPriceFri: AdaptUint128(header.GasPrice), Signatures: utils.Map(header.Signatures, AdaptSignature), // todo(kirill) set these fields - StateDiffCommitment: nil, + StateDiffCommitment: &spec.StateDiffCommitment{ + StateDiffLength: uint64(len(stateDiffCommitment.Bytes())), + Root: AdaptHash(stateDiffCommitment), + }, GasPriceWei: AdaptUint128(header.GasPriceSTRK), DataGasPriceFri: AdaptUint128(header.L1DataGasPrice.PriceInFri), DataGasPriceWei: AdaptUint128(header.L1DataGasPrice.PriceInWei), diff --git a/core/class_hash.go b/core/class_hash.go index 9cc4f94990..2686f8fa65 100644 --- a/core/class_hash.go +++ b/core/class_hash.go @@ -12,6 +12,7 @@ import "C" import ( "encoding/json" "errors" + "fmt" "unsafe" "github.com/NethermindEth/juno/core/felt" @@ -24,6 +25,7 @@ func cairo0ClassHash(class *Cairo0Class) (*felt.Felt, error) { if err != nil { return nil, err } + fmt.Println("------------------>After makeDeprecatedVMClass") classJSON, err := json.Marshal(definition) if err != nil { diff --git a/p2p/p2p.go b/p2p/p2p.go index 18bc8af761..d2bb1215ea 100644 --- a/p2p/p2p.go +++ b/p2p/p2p.go @@ -116,7 +116,7 @@ func NewWithHost(p2phost host.Host, peers string, feederNode bool, bc *blockchai func makeDHT(p2phost host.Host, addrInfos []peer.AddrInfo) (*dht.IpfsDHT, error) { return dht.New(context.Background(), p2phost, - dht.ProtocolPrefix(starknet.Prefix), + dht.ProtocolPrefix(starknet.KadPrefix()), dht.BootstrapPeers(addrInfos...), dht.RoutingTableRefreshPeriod(routingTableRefreshPeriod), dht.Mode(dht.ModeServer), diff --git a/p2p/starknet/client.go b/p2p/starknet/client.go index e273b84f7c..8c93e4fed2 100644 --- a/p2p/starknet/client.go +++ b/p2p/starknet/client.go @@ -69,6 +69,10 @@ func requestAndReceiveStream[ReqT proto.Message, ResT proto.Message](ctx context } id := stream.ID() + + // peerID := stream.Conn().RemotePeer() + // log.Debugw("sending request", "req", req, "streamID", id, "peerID", peerID) + if err := sendAndCloseWrite(stream, req); err != nil { log.Errorw("sendAndCloseWrite (stream is not closed)", "err", err, "streamID", id) return nil, err @@ -93,6 +97,8 @@ func requestAndReceiveStream[ReqT proto.Message, ResT proto.Message](ctx context break } + // log.Infow("receiving response", "res", res, "streamID", id, "peerID", peerID) + if !yield(res.(ResT)) { break } diff --git a/p2p/starknet/handlers.go b/p2p/starknet/handlers.go index 2893268792..b913b1c271 100644 --- a/p2p/starknet/handlers.go +++ b/p2p/starknet/handlers.go @@ -143,9 +143,14 @@ func (h *Handler) onHeadersRequest(req *spec.BlockHeadersRequest) (iter.Seq[prot return nil, err } + stateUpdate, err := h.bcReader.StateUpdateByNumber(header.Number) + if err != nil { + return nil, err + } + return &spec.BlockHeadersResponse{ HeaderMessage: &spec.BlockHeadersResponse_Header{ - Header: core2p2p.AdaptHeader(header, commitments), + Header: core2p2p.AdaptHeader(header, commitments, stateUpdate.StateDiff.Commitment()), }, }, nil }) diff --git a/p2p/starknet/ids.go b/p2p/starknet/ids.go index d1b97b0ad2..e2482eca71 100644 --- a/p2p/starknet/ids.go +++ b/p2p/starknet/ids.go @@ -6,6 +6,10 @@ import ( const Prefix = "/starknet" +func KadPrefix() protocol.ID { + return Prefix + "/juno-papyrus" +} + func HeadersPID() protocol.ID { return Prefix + "/headers/0.1.0-rc.0" } diff --git a/p2p/sync.go b/p2p/sync.go index 61afb503ee..e4794d6d7a 100644 --- a/p2p/sync.go +++ b/p2p/sync.go @@ -54,6 +54,7 @@ func (s *syncService) start(ctx context.Context) { s.client = starknet.NewClient(s.randomPeerStream, s.network, s.log) for i := 0; ; i++ { + time.Sleep(1 * time.Second) if err := ctx.Err(); err != nil { break } @@ -190,8 +191,8 @@ func (s *syncService) processSpecBlockParts( default: switch p := part.(type) { case specBlockHeaderAndSigs: - s.log.Debugw("Received Block Header with signatures", "blockNumber", p.blockNumber()) if _, ok := specBlockHeadersAndSigsM[part.blockNumber()]; !ok { + // fmt.Println(p.header.String()) specBlockHeadersAndSigsM[part.blockNumber()] = p } case specTxWithReceipts: @@ -334,8 +335,10 @@ func (s *syncService) adaptAndSanityCheckBlock(ctx context.Context, header *spec coreBlock.Hash = h newClasses := make(map[felt.Felt]core.Class) + s.log.Debugw("len of the classes", "len", len(classes)) for _, cls := range classes { coreC := p2p2core.AdaptClass(cls) + fmt.Println(reflect.TypeOf(coreC)) h, err = coreC.Hash() if err != nil { bodyCh <- blockBody{err: fmt.Errorf("class hash calculation error: %v", err)} @@ -656,6 +659,7 @@ func (s *syncService) randomPeerStream(ctx context.Context, pids ...protocol.ID) } stream, err := s.host.NewStream(ctx, randPeer, pids...) if err != nil { + s.log.Debugw("Error creating stream", "peer", randPeer, "err", err) s.removePeer(randPeer) return nil, err }