Skip to content

Instantly share code, notes, and snippets.

@samlaf
Created May 6, 2025 11:04
Show Gist options
  • Save samlaf/8eba021fabf154ea23f8ff4f12009dec to your computer and use it in GitHub Desktop.
Save samlaf/8eba021fabf154ea23f8ff4f12009dec to your computer and use it in GitHub Desktop.
Comparing various eigenda cert sizes under different encoding/compression
package main
import (
"encoding/hex"
"encoding/json"
"fmt"
"github.com/Layr-Labs/eigenda/api/clients/v2/coretypes"
certbindings "github.com/Layr-Labs/eigenda/contracts/bindings/IEigenDACertTypeBindings"
"github.com/ethereum/go-ethereum/rlp"
"github.com/golang/snappy"
"github.com/klauspost/compress/zstd"
"github.com/pierrec/lz4/v4"
)
// var serializedCertV2Hex = "f90389f901f0f901cbf9018280820001f9015af842a0151a2ebbf7dfea4abc0919bc28aedfb9907375d1d55767e0f6c7e47a77a71290a010ef739902eea464102e1c982825f8bb2eb84b8b051adfa20faf794f569a6faef888f842a001bcd44cc6bb4a897490e083d932638bdfc6870bbcf3139701ad3f515ec036efa00c5c3b320694c7bde367c43287a41beec3c788558430b6fe5a2c372067d3268cf842a01d1788d67886f495b9041e756b6646819d327f90280d7d72e6bf3d53cca965d1a02228a9bfab37d1aa823e70be4c13268d71b609754395eaeab7236f4744e90a7ff887f842a01126cbb8e193069bf5b37dd8beb09c4d4435791164ebd00a6c952e06f1706adea02bbd49b773d2753007efe21e467242a3322dfc29e7b52001d633ea0f3793cb18f8419f9c803d817c4490db982110d850f70a582834bef558c4fcc4c183e9d506c264a0210517125d12bebc8d31001fdb56b4a0eade1632353c691c093eceaf1a773c45828000a05b3fc26740a2d9ab45cb5340b2d552c60aabedeea1923b7eaa68f4d744b41ebeb84120d3eb07105e8faf70012d5bf329e3c8643cef95d868d05432c89cc4c7a534e947a620ae3a486c2d8b714525c7c15d70e5ff44c726bc3c2c201d2de2a2103f7900c2800180a0ae601aceb396aeb3ab6390017c321bccac0ed018bdb2360996af739b3985c77ce5a09d317b37671ad4ef3de6404ca0a57022298d812fd3cd6a396e5b5ade3592bf868339d983f9016ac0c0f888f842a024a7a27018d148696e27a316f796142f698f0536e7829b95218d049e1bc97d90a0178d350236c70671889926cd368dcefbb9c405d75d872b406c66f3879448b2e9f842a0233349ae6231602e0d37cb43edcaec8a973ad9bdad801309f4bbbd74d5f24a19a0226166f66d071f5bcd8a4a4aba2fbe4b5124b05bc2f94fb6de7f42ca09512a77f887f842a0054a90b09e74dcd82d6654f731f3f8437a0b19a226ae8eff77fcaddb98058fcaa01c955ca8119c81b605a9f0c666eab30f008874f73b3ad682a85ec9368a2ff372f841a007bdb9e853f105a7be76292b7a3b3f758de0937dc921fcf16f724b22148f21599f39d57a7cc0f833cd2c236257e954367eb88c68add698b25f900ff58daece57f842a00f00b5b8acdbf4b1cfb3314e382602813917d690871fc8724d2513e596512dc2a02e6821b2ddc9da9e3a7d187bd0fa097ef308249cb5dc9b00fab6643d1c2bd9f0c68206ed820891c682092882099cc2c0c0820001"
var serializedCertV2Hex = "f90369f901d0f901cbf9018280820001f9015af842a0151a2ebbf7dfea4abc0919bc28aedfb9907375d1d55767e0f6c7e47a77a71290a010ef739902eea464102e1c982825f8bb2eb84b8b051adfa20faf794f569a6faef888f842a001bcd44cc6bb4a897490e083d932638bdfc6870bbcf3139701ad3f515ec036efa00c5c3b320694c7bde367c43287a41beec3c788558430b6fe5a2c372067d3268cf842a01d1788d67886f495b9041e756b6646819d327f90280d7d72e6bf3d53cca965d1a02228a9bfab37d1aa823e70be4c13268d71b609754395eaeab7236f4744e90a7ff887f842a01126cbb8e193069bf5b37dd8beb09c4d4435791164ebd00a6c952e06f1706adea02bbd49b773d2753007efe21e467242a3322dfc29e7b52001d633ea0f3793cb18f8419f9c803d817c4490db982110d850f70a582834bef558c4fcc4c183e9d506c264a0210517125d12bebc8d31001fdb56b4a0eade1632353c691c093eceaf1a773c45828000a017c7a19966a1304f09e2d417e30e3b5c91f47ec6ee6afe854140474b72fc3fe9b84157de2555c7a98e6b9df4ac859e03e14373c3b8651aa7cc58605e097d892f9c5b046540108015b6d2ce959f9781f07f3bf208d0082e272890fe45cd703dea677400c202018080e5a0232998b77a1ed116ad7faa969093994c4129869baf9f3b213d86cb65bd589d4a8339d97cf9016ac0c0f888f842a024a7a27018d148696e27a316f796142f698f0536e7829b95218d049e1bc97d90a0178d350236c70671889926cd368dcefbb9c405d75d872b406c66f3879448b2e9f842a0233349ae6231602e0d37cb43edcaec8a973ad9bdad801309f4bbbd74d5f24a19a0226166f66d071f5bcd8a4a4aba2fbe4b5124b05bc2f94fb6de7f42ca09512a77f887f842a0054a90b09e74dcd82d6654f731f3f8437a0b19a226ae8eff77fcaddb98058fcaa01c955ca8119c81b605a9f0c666eab30f008874f73b3ad682a85ec9368a2ff372f841a007bdb9e853f105a7be76292b7a3b3f758de0937dc921fcf16f724b22148f21599f39d57a7cc0f833cd2c236257e954367eb88c68add698b25f900ff58daece57f842a00603df1da673a03c87429b99995792f1fee6224043e1b58b570a8d4eaa044c4ba02e0c7427b38f4bc5586c1a5e70f9a53eed4c4f221478fa2e1f5a7c1d0f7542c9c68206ed820891c682092882099cc2c0c0820001"
func main() {
// RLP
serializedCertV2, err := hex.DecodeString(serializedCertV2Hex)
panicOnErr(err)
fmt.Println("rlp length: ", len(serializedCertV2))
printCompressedSizes(serializedCertV2)
// ABI ENCODING
var certV2 coretypes.EigenDACert
err = rlp.DecodeBytes(serializedCertV2, &certV2)
panicOnErr(err)
certV2JSON, err := json.Marshal(certV2)
panicOnErr(err)
var certV3 certbindings.EigenDACertTypesEigenDACertV3
err = json.Unmarshal(certV2JSON, &certV3)
panicOnErr(err)
abi, err := certbindings.ContractIEigenDACertTypeBindingsMetaData.GetAbi()
panicOnErr(err)
certV3ABI, err := abi.Methods["dummyFnCertV3"].Inputs.Pack(certV3)
panicOnErr(err)
fmt.Println("abi encoded length", len(certV3ABI))
printCompressedSizes(certV3ABI)
}
func printCompressedSizes(serializedCertV2 []byte) {
snappyCompressed := snappy.Encode(nil, serializedCertV2)
fmt.Println(" snappy compressed length: ", len(snappyCompressed))
compressed := make([]byte, lz4.CompressBlockBound(len(serializedCertV2)))
compressedSize, err := lz4.CompressBlock(serializedCertV2, compressed, nil)
panicOnErr(err)
compressed = compressed[:compressedSize]
fmt.Println(" lz4 compressed length: ", len(compressed))
encoder, _ := zstd.NewWriter(nil)
compressed = encoder.EncodeAll(serializedCertV2, nil)
fmt.Println(" zstd compressed length: ", len(compressed))
}
func panicOnErr(err error) {
if err != nil {
panic(err)
}
}
// rlp length: 908
// snappy compressed length: 913
// lz4 compressed length: 913
// zstd compressed length: 923
// abi encoded length 2208
// snappy compressed length: 1017
// lz4 compressed length: 1039
// zstd compressed length: 973
// rlp length: 876
// snappy compressed length: 881
// lz4 compressed length: 881
// zstd compressed length: 891
// abi encoded length 2176
// snappy compressed length: 989
// lz4 compressed length: 1012
// zstd compressed length: 939
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment