Skip to main content

Try it Live

Run Blob examples in the interactive playground

    How It Works

    Extracts data from each blob and concatenates:
    Blob 1: [length_1][chunk_1][padding] → Extract chunk_1
    Blob 2: [length_2][chunk_2][padding] → Extract chunk_2
    Blob 3: [length_3][chunk_3][padding] → Extract chunk_3
    
    Result: chunk_1 + chunk_2 + chunk_3
    

    Manual Join

    import { Blob } from 'tevm';
    
    const blobs = Blob.splitData(data);
    
    // Manual join (equivalent to joinData)
    const chunks = blobs.map(blob => Blob.toData(blob));
    const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
    
    const result = new Uint8Array(totalLength);
    let offset = 0;
    for (const chunk of chunks) {
      result.set(chunk, offset);
      offset += chunk.length;
    }
    
    // Verify equivalence
    const auto = Blob.joinData(blobs);
    console.log(Blob.equals(result, auto)); // true
    

    Round-Trip Verification

    import { Blob } from 'tevm';
    
    function verifyRoundTrip(data: Uint8Array) {
      // Split
      const blobs = Blob.splitData(data);
    
      // Join
      const reconstructed = Blob.joinData(blobs);
    
      // Verify
      if (reconstructed.length !== data.length) {
        throw new Error('Length mismatch');
      }
    
      if (!Blob.equals(reconstructed, data)) {
        throw new Error('Data mismatch');
      }
    
      console.log('Round-trip verified');
    }
    
    // Test with various sizes
    verifyRoundTrip(new Uint8Array(1000));
    verifyRoundTrip(new Uint8Array(100_000));
    verifyRoundTrip(new Uint8Array(300_000));
    

    Error Handling

    import { Blob } from 'tevm';
    
    // Invalid blob size
    try {
      const invalid = new Uint8Array(1000);
      Blob.joinData([invalid as any]);
    } catch (e) {
      console.error(e); // "Invalid blob size: 1000"
    }
    
    // Corrupted length prefix
    const blobs = Blob.splitData(data);
    blobs[0][0] = 0xff; // Corrupt length prefix
    try {
      Blob.joinData(blobs);
    } catch (e) {
      console.error(e); // "Invalid length prefix"
    }
    

    Empty Array

    import { Blob } from 'tevm';
    
    // Empty array returns empty data
    const result = Blob.joinData([]);
    console.log(result.length); // 0
    console.log(result instanceof Uint8Array); // true
    

    See Also