Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
227 changes: 0 additions & 227 deletions ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReaderProxy.java

This file was deleted.

32 changes: 16 additions & 16 deletions ssz/src/main/java/org/ethereum/beacon/ssz/SSZSerializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,16 @@
import org.ethereum.beacon.ssz.type.SSZListType;
import org.ethereum.beacon.ssz.type.SSZType;
import org.ethereum.beacon.ssz.type.TypeResolver;
import org.ethereum.beacon.ssz.visitor.SSZSimpleDeserializer;
import org.ethereum.beacon.ssz.visitor.SSZSimpleDeserializer.DecodeResult;
import org.ethereum.beacon.ssz.visitor.SSZSimpleSerializer;
import org.ethereum.beacon.ssz.visitor.SSZSimpleSerializer.SSZSerializerResult;
import org.ethereum.beacon.ssz.visitor.SosDeserializer;
import org.ethereum.beacon.ssz.visitor.SosDeserializer.DecodeResult;
import org.ethereum.beacon.ssz.visitor.SosSerializer;
import org.ethereum.beacon.ssz.visitor.SosSerializer.SerializerResult;
import org.ethereum.beacon.ssz.visitor.SSZVisitorHandler;
import org.ethereum.beacon.ssz.visitor.SSZVisitorHost;
import org.javatuples.Pair;

/** SSZ serializer/deserializer */
public class SSZSerializer implements BytesSerializer, SSZVisitorHandler<SSZSimpleSerializer.SSZSerializerResult> {
public class SSZSerializer implements BytesSerializer, SSZVisitorHandler<SerializerResult> {

private final SSZVisitorHost sszVisitorHost;
private final TypeResolver typeResolver;
Expand All @@ -35,21 +36,21 @@ public SSZSerializer(SSZVisitorHost sszVisitorHost,
*/
@Override
public <C> byte[] encode(@Nullable C inputObject, Class<? extends C> inputClazz) {
return visit(inputObject, inputClazz).getSerialized().getArrayUnsafe();
return visit(inputObject, inputClazz).getSerializedBody().getArrayUnsafe();
}

private <C> SSZSerializerResult visit(C input, Class<? extends C> clazz) {
private <C> SerializerResult visit(C input, Class<? extends C> clazz) {
return visitAny(typeResolver.resolveSSZType(new SSZField(clazz)), input);
}

@Override
public SSZSerializerResult visitAny(SSZType sszType, Object value) {
return sszVisitorHost.handleAny(sszType, value, new SSZSimpleSerializer());
public SerializerResult visitAny(SSZType sszType, Object value) {
return sszVisitorHost.handleAny(sszType, value, new SosSerializer());
}

@Override
public SSZSerializerResult visitList(SSZListType descriptor, Object listValue, int startIdx, int len) {
return sszVisitorHost.handleSubList(descriptor, listValue, startIdx, len, new SSZSimpleSerializer());
public SerializerResult visitList(SSZListType descriptor, Object listValue, int startIdx, int len) {
return sszVisitorHost.handleSubList(descriptor, listValue, startIdx, len, new SosSerializer());
}

/**
Expand All @@ -62,11 +63,10 @@ public SSZSerializerResult visitList(SSZListType descriptor, Object listValue, i
public <C> C decode(byte[] data, Class<? extends C> clazz) {
DecodeResult decodeResult = sszVisitorHost.handleAny(
typeResolver.resolveSSZType(new SSZField(clazz)),
Bytes.wrap(data),
new SSZSimpleDeserializer());
if (data.length > decodeResult.readBytes) {
throw new SSZSerializeException("Invalid SSZ data length (data is bigger than required): "
+ data.length + " > " + decodeResult.readBytes);
Pair.with(Bytes.wrap(data), null),
new SosDeserializer());
if (data.length != decodeResult.readBytes) {
throw new SSZSerializeException(String.format("Invalid SSZ encoding, calculated data size %s bytes, while provided %s bytes", decodeResult.readBytes, data.length));
}
return (C) decodeResult.decodedInstance;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package org.ethereum.beacon.ssz.access;

import net.consensys.cava.ssz.BytesSSZReaderProxy;
import org.ethereum.beacon.ssz.visitor.SSZReader;
import org.ethereum.beacon.ssz.SSZSchemeException;
import org.ethereum.beacon.ssz.SSZSerializer;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

Expand Down Expand Up @@ -44,16 +43,6 @@ public interface SSZBasicAccessor {
*/
void encode(Object value, SSZField field, OutputStream result);

/**
* Encodes list field as SSZ type and writes it to output stream
*
* @param value Field value
* @param field Field type
* @param result Output stream
*/
void encodeList(
List<Object> value, SSZField field, OutputStream result);

/**
* Decodes SSZ encoded data and returns result
*
Expand All @@ -62,17 +51,7 @@ void encodeList(
* moved to the end of this field/beginning of next one after reading is performed.
* @return field value
*/
Object decode(SSZField field, BytesSSZReaderProxy reader);

/**
* Decodes SSZ encoded data and returns result
*
* @param field Type of field to read at this point, list
* @param reader Reader which holds SSZ encoded data at the appropriate point. Pointer will be
* moved to the end of this field/beginning of next one after reading is performed.
* @return field list value
*/
List decodeList(SSZField field, BytesSSZReaderProxy reader);
Object decode(SSZField field, SSZReader reader);

/**
* Helper designed to throw usual error
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package org.ethereum.beacon.ssz.access.basic;

import net.consensys.cava.bytes.Bytes;
import net.consensys.cava.ssz.BytesSSZReaderProxy;
import net.consensys.cava.ssz.SSZ;
import org.ethereum.beacon.ssz.visitor.SSZReader;
import org.ethereum.beacon.ssz.visitor.SSZWriter;
import net.consensys.cava.ssz.SSZException;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.ethereum.beacon.ssz.access.SSZField;
import org.ethereum.beacon.ssz.access.SSZBasicAccessor;
Expand Down Expand Up @@ -47,7 +46,7 @@ public int getSize(SSZField field) {
@Override
public void encode(Object value, SSZField field, OutputStream result) {
boolean boolValue = (boolean) value;
Bytes res = SSZ.encodeBoolean(boolValue);
Bytes res = SSZWriter.encodeBoolean(boolValue);
try {
result.write(res.toArrayUnsafe());
} catch (IOException e) {
Expand All @@ -57,29 +56,7 @@ public void encode(Object value, SSZField field, OutputStream result) {
}

@Override
public void encodeList(
List<Object> value, SSZField field, OutputStream result) {
try {
boolean[] data = new boolean[value.size()];
for (int i = 0; i < value.size(); ++i) {
data[i] = (boolean) value.get(i);
}
result.write(SSZ.encodeBooleanList(data).toArrayUnsafe());
} catch (IOException ex) {
String error = String.format("Failed to write data from field \"%s\" to stream",
field.getName());
throw new SSZException(error, ex);
}
}

@Override
public Object decode(SSZField field, BytesSSZReaderProxy reader) {
public Object decode(SSZField field, SSZReader reader) {
return reader.readBoolean();
}

@Override
public List<Object> decodeList(
SSZField field, BytesSSZReaderProxy reader) {
return (List<Object>) (List<?>) reader.readBooleanList();
}
}
Loading