From 22b5b8d4e765125c2b56fca185d73f5ebecd9f84 Mon Sep 17 00:00:00 2001 From: bianyuanop Date: Thu, 6 Feb 2025 15:49:38 -0500 Subject: [PATCH 1/2] get arcadia block with sig --- arcadia/arcadia.go | 15 ++++++++++++++- arcadia/consts.go | 1 + arcadia/types.go | 6 ++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/arcadia/arcadia.go b/arcadia/arcadia.go index 7bcfa55859..0175031a06 100644 --- a/arcadia/arcadia.go +++ b/arcadia/arcadia.go @@ -585,17 +585,30 @@ func (cli *Arcadia) GetBlockPayloadFromArcadia(ctx context.Context, maxBw, block MaxBandwidth: maxBw, BlockNumber: blockNumber, } - reqRaw, err := json.Marshal(reqr) + reqRaw, err := reqr.Payload() if err != nil { return nil, err } + uwm, err := warp.NewUnsignedMessage(cli.vm.NetworkID(), cli.vm.ChainID(), reqRaw) + if err != nil { + return nil, err + } + sig, err := cli.vm.Sign(uwm) + if err != nil { + return nil, err + } + sigStr := hexutil.Encode(sig) + + cli.vm.Logger().Debug("signing GetArcadiaBlock request with", zap.String("pubkey", hexutil.Encode(cli.vm.Signer().Compress())), zap.Uint64("height", blockNumber), zap.String("chainID", cli.vm.ChainID().String()), zap.Uint32("networkID", cli.vm.NetworkID())) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewBuffer(reqRaw)) if err != nil { return nil, err } req.Header.Set("Content-Type", "application/json") + req.Header.Set(GetArcadiaBlockSignatureHeader, sigStr) resp, err := client.Do(req) if err != nil { diff --git a/arcadia/consts.go b/arcadia/consts.go index 052bddaa01..c3c5b4ff89 100644 --- a/arcadia/consts.go +++ b/arcadia/consts.go @@ -3,3 +3,4 @@ package arcadia var DefaultNMTNamespace = make([]byte, 8) const DefaultBuilderLRUSize = 20 +const GetArcadiaBlockSignatureHeader = "X-Arcadia-GetBlock-Sig" diff --git a/arcadia/types.go b/arcadia/types.go index 1fed2901a6..eccc5b97f9 100644 --- a/arcadia/types.go +++ b/arcadia/types.go @@ -1,6 +1,8 @@ package arcadia import ( + "encoding/json" + "github.com/ava-labs/avalanchego/ids" "github.com/bits-and-blooms/bitset" @@ -69,6 +71,10 @@ type GetBlockPayloadFromArcadia struct { BlockNumber uint64 `json:"blockNumber"` } +func (req *GetBlockPayloadFromArcadia) Payload() ([]byte, error) { + return json.Marshal(req) +} + type ChunkInterface interface { Marshal() ([]byte, error) Transactions() []*chain.Transaction From 5c1a09f832e3514663618f6d32e507dc5ee3de22 Mon Sep 17 00:00:00 2001 From: bianyuanop Date: Tue, 11 Feb 2025 14:05:07 -0500 Subject: [PATCH 2/2] pad namespace when length of bytes < 8 --- arcadia/utils.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arcadia/utils.go b/arcadia/utils.go index 124a505242..f5fc5c4615 100644 --- a/arcadia/utils.go +++ b/arcadia/utils.go @@ -97,7 +97,9 @@ func replaceHTTPWithWS(url string) string { } func namespaceToChainIDStr(ns []byte) string { - chainIDu64 := binary.LittleEndian.Uint64(ns) + nsPadded := make([]byte, 8) + copy(nsPadded[:], ns) + chainIDu64 := binary.LittleEndian.Uint64(nsPadded) chainID := big.NewInt(int64(chainIDu64)) return hexutil.EncodeBig(chainID)