Search in sources :

Example 1 with SszNodeTemplate

use of tech.pegasys.teku.infrastructure.ssz.tree.SszNodeTemplate in project teku by ConsenSys.

the class AbstractSszCollectionSchema method sszDeserializeSupernode.

private DeserializedData sszDeserializeSupernode(SszReader reader, int supernodeDepth) {
    SszNodeTemplate template = elementSszSupernodeTemplate.get();
    int sszSize = reader.getAvailableBytes();
    if (sszSize % template.getSszLength() != 0) {
        throw new SszDeserializeException("Ssz length is not multiple of element length");
    }
    int elementsCount = sszSize / template.getSszLength();
    int chunkSize = (1 << supernodeDepth) * template.getSszLength();
    int bytesRemain = sszSize;
    List<SszSuperNode> sszNodes = new ArrayList<>(bytesRemain / chunkSize + 1);
    while (bytesRemain > 0) {
        int toRead = min(bytesRemain, chunkSize);
        bytesRemain -= toRead;
        Bytes bytes = reader.read(toRead);
        SszSuperNode node = new SszSuperNode(supernodeDepth, template, bytes);
        sszNodes.add(node);
    }
    TreeNode tree = TreeUtil.createTree(sszNodes, new SszSuperNode(supernodeDepth, template, Bytes.EMPTY), treeDepth() - supernodeDepth);
    return new DeserializedData(tree, elementsCount);
}
Also used : Bytes(org.apache.tuweni.bytes.Bytes) SszDeserializeException(tech.pegasys.teku.infrastructure.ssz.sos.SszDeserializeException) SszNodeTemplate(tech.pegasys.teku.infrastructure.ssz.tree.SszNodeTemplate) TreeNode(tech.pegasys.teku.infrastructure.ssz.tree.TreeNode) ArrayList(java.util.ArrayList) SszSuperNodeHint(tech.pegasys.teku.infrastructure.ssz.schema.SszSchemaHints.SszSuperNodeHint) SszSuperNode(tech.pegasys.teku.infrastructure.ssz.tree.SszSuperNode)

Aggregations

ArrayList (java.util.ArrayList)1 Bytes (org.apache.tuweni.bytes.Bytes)1 SszSuperNodeHint (tech.pegasys.teku.infrastructure.ssz.schema.SszSchemaHints.SszSuperNodeHint)1 SszDeserializeException (tech.pegasys.teku.infrastructure.ssz.sos.SszDeserializeException)1 SszNodeTemplate (tech.pegasys.teku.infrastructure.ssz.tree.SszNodeTemplate)1 SszSuperNode (tech.pegasys.teku.infrastructure.ssz.tree.SszSuperNode)1 TreeNode (tech.pegasys.teku.infrastructure.ssz.tree.TreeNode)1