Created
May 6, 2025 11:04
-
-
Save samlaf/8eba021fabf154ea23f8ff4f12009dec to your computer and use it in GitHub Desktop.
Comparing various eigenda cert sizes under different encoding/compression
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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