You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuweni.apache.org by to...@apache.org on 2019/04/22 21:11:36 UTC

[incubator-tuweni] branch master updated (d0ae682 -> ec647af)

This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git.


    from d0ae682  Use simpler logic to get properties
     new fb27eda  wip
     new ec647af  Bring over latest changes on scuttlebutt

The 32 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../handshake/vertx/ClientHandlerFactory.java      |   4 +-
 .../vertx/SecureScuttlebuttVertxClient.java        |  20 +-
 .../vertx/SecureScuttlebuttVertxServer.java        |   2 +-
 .../handshake/vertx/VertxIntegrationTest.java      |   3 +-
 scuttlebutt-rpc/build.gradle                       |   5 +-
 .../tuweni/scuttlebutt/rpc/RPCAsyncRequest.java    |  58 +++++
 .../apache/tuweni/scuttlebutt/rpc/RPCCodec.java    |  30 +++
 .../tuweni/scuttlebutt/rpc/RPCErrorBody.java       |  64 +++++
 .../apache/tuweni/scuttlebutt/rpc/RPCFunction.java |  52 ++++
 .../apache/tuweni/scuttlebutt/rpc/RPCMessage.java  |  69 +++++-
 .../tuweni/scuttlebutt/rpc/RPCRequestBody.java     |  71 ++++++
 .../tuweni/scuttlebutt/rpc/RPCRequestType.java     |  21 +-
 .../apache/tuweni/scuttlebutt/rpc/RPCResponse.java |  80 ++++++
 .../tuweni/scuttlebutt/rpc/RPCStreamRequest.java   |  57 +++++
 .../tuweni/scuttlebutt/rpc/mux/Multiplexer.java    |  59 +++++
 .../tuweni/scuttlebutt/rpc/mux/RPCHandler.java     | 269 +++++++++++++++++++++
 .../rpc/mux/ScuttlebuttStreamHandler.java          |  28 +--
 .../mux/exceptions/ConnectionClosedException.java  |   9 +-
 .../mux/exceptions/RPCRequestFailedException.java  |   8 +-
 .../scuttlebutt/rpc/PatchworkIntegrationTest.java  |   9 +-
 .../tuweni/scuttlebutt/rpc/RPCEncodingTest.java    |   3 +-
 .../rpc/mux/PatchworkIntegrationTest.java          | 238 ++++++++++++++++++
 22 files changed, 1098 insertions(+), 61 deletions(-)
 create mode 100644 scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCAsyncRequest.java
 create mode 100644 scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCErrorBody.java
 create mode 100644 scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFunction.java
 create mode 100644 scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestBody.java
 copy rlpx/src/main/java/org/apache/tuweni/rlpx/HandshakeMessage.java => scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestType.java (68%)
 create mode 100644 scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCResponse.java
 create mode 100644 scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCStreamRequest.java
 create mode 100644 scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/Multiplexer.java
 create mode 100644 scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/RPCHandler.java
 copy crypto/src/main/java/org/apache/tuweni/crypto/sodium/DetachedEncryptionResult.java => scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/ScuttlebuttStreamHandler.java (62%)
 copy scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/StreamException.java => scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/ConnectionClosedException.java (80%)
 copy scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/StreamException.java => scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/RPCRequestFailedException.java (78%)
 create mode 100644 scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/mux/PatchworkIntegrationTest.java


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 31/32: wip

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit fb27edaeeee3eaf999678b3c5202e2bebee4871b
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Mon Apr 22 10:57:47 2019 -0700

    wip
---
 .../handshake/vertx/ClientHandlerFactory.java      |   4 +-
 .../vertx/SecureScuttlebuttVertxClient.java        |  20 +-
 .../vertx/SecureScuttlebuttVertxServer.java        |   2 +-
 .../handshake/vertx/VertxIntegrationTest.java      |   3 +-
 scuttlebutt-rpc/build.gradle                       |   2 +
 .../tuweni/scuttlebutt/rpc/RPCAsyncRequest.java    |  58 +++++
 .../apache/tuweni/scuttlebutt/rpc/RPCCodec.java    |  30 +++
 .../tuweni/scuttlebutt/rpc/RPCErrorBody.java       |  64 ++++++
 .../apache/tuweni/scuttlebutt/rpc/RPCFunction.java |  52 +++++
 .../apache/tuweni/scuttlebutt/rpc/RPCMessage.java  |  44 +++-
 .../tuweni/scuttlebutt/rpc/RPCRequestBody.java     |  71 ++++++
 .../tuweni/scuttlebutt/rpc/RPCRequestType.java     |  35 +++
 .../tuweni/scuttlebutt/rpc/RPCStreamRequest.java   |  57 +++++
 .../tuweni/scuttlebutt/rpc/mux/Multiplexer.java    |  59 +++++
 .../tuweni/scuttlebutt/rpc/mux/RPCHandler.java     | 250 +++++++++++++++++++++
 .../rpc/mux/ScuttlebuttStreamHandler.java          |  41 ++++
 .../mux/exceptions/ConnectionClosedException.java  |  21 ++
 .../scuttlebutt/rpc/PatchworkIntegrationTest.java  |   1 +
 .../tuweni/scuttlebutt/rpc/RPCEncodingTest.java    |   3 +-
 .../rpc/mux/PatchworkIntegrationTest.java          | 249 ++++++++++++++++++++
 20 files changed, 1045 insertions(+), 21 deletions(-)

diff --git a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ClientHandlerFactory.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
index e947f49..f047acd 100644
--- a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
+++ b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
@@ -19,7 +19,7 @@ import java.util.function.Consumer;
 /**
  * Factory creating stream handlers, managing client-side connections.
  */
-public interface ClientHandlerFactory {
+public interface ClientHandlerFactory<T extends ClientHandler> {
 
   /**
    * Creates a new handler associated with a valid streaming connection.
@@ -27,5 +27,5 @@ public interface ClientHandlerFactory {
    * @param sender the function to send bytes to the server
    * @param terminationFunction a function to terminate the stream properly
    */
-  ClientHandler createHandler(Consumer<Bytes> sender, Runnable terminationFunction);
+  T createHandler(Consumer<Bytes> sender, Runnable terminationFunction);
 }
diff --git a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
index c7f69e5..7ac177c 100644
--- a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
+++ b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
@@ -39,16 +39,16 @@ import org.logl.LoggerProvider;
  */
 public final class SecureScuttlebuttVertxClient {
 
-  private class NetSocketClientHandler {
+  private class NetSocketClientHandler<T extends ClientHandler> {
 
     private final Logger logger;
     private final NetSocket socket;
     private final SecureScuttlebuttHandshakeClient handshakeClient;
-    private final ClientHandlerFactory handlerFactory;
-    private final CompletableAsyncResult<ClientHandler> completionHandle;
+    private final ClientHandlerFactory<T> handlerFactory;
+    private final CompletableAsyncResult<T> completionHandle;
     private int handshakeCounter;
     private SecureScuttlebuttStreamClient client;
-    private ClientHandler handler;
+    private T handler;
 
     private Bytes messageBuffer = Bytes.EMPTY;
 
@@ -56,8 +56,8 @@ public final class SecureScuttlebuttVertxClient {
         Logger logger,
         NetSocket socket,
         Signature.PublicKey remotePublicKey,
-        ClientHandlerFactory handlerFactory,
-        CompletableAsyncResult<ClientHandler> completionHandle) {
+        ClientHandlerFactory<T> handlerFactory,
+        CompletableAsyncResult<T> completionHandle) {
       this.logger = logger;
       this.socket = socket;
       this.handshakeClient = SecureScuttlebuttHandshakeClient.create(keyPair, networkIdentifier, remotePublicKey);
@@ -182,19 +182,19 @@ public final class SecureScuttlebuttVertxClient {
    * @param handlerFactory the factory of handlers for connections
    * @return a handle to a new stream handler with the remote host
    */
-  public AsyncResult<ClientHandler> connectTo(
+  public <T extends ClientHandler> AsyncResult<T> connectTo(
       int port,
       String host,
       Signature.PublicKey remotePublicKey,
-      ClientHandlerFactory handlerFactory) {
+      ClientHandlerFactory<T> handlerFactory) {
     client = vertx.createNetClient(new NetClientOptions().setTcpKeepAlive(true));
-    CompletableAsyncResult<ClientHandler> completion = AsyncResult.incomplete();
+    CompletableAsyncResult<T> completion = AsyncResult.incomplete();
     client.connect(port, host, res -> {
       if (res.failed()) {
         completion.completeExceptionally(res.cause());
       } else {
         NetSocket socket = res.result();
-        new NetSocketClientHandler(
+        new NetSocketClientHandler<T>(
             loggerProvider.getLogger(host + ":" + port),
             socket,
             remotePublicKey,
diff --git a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
index abd8b82..1e82956 100644
--- a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
+++ b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
@@ -113,8 +113,8 @@ public final class SecureScuttlebuttVertxServer {
           }
         }
       } catch (HandshakeException | StreamException e) {
-        e.printStackTrace();
         netSocket.close();
+        throw e;
       }
     }
   }
diff --git a/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java b/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
index 526dba3..6b32dcb 100644
--- a/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
+++ b/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
@@ -120,8 +120,7 @@ class VertxIntegrationTest {
 
     SecureScuttlebuttVertxClient client =
         new SecureScuttlebuttVertxClient(provider, vertx, Signature.KeyPair.random(), networkIdentifier);
-    MyClientHandler handler =
-        (MyClientHandler) client.connectTo(20000, "0.0.0.0", serverKeyPair.publicKey(), MyClientHandler::new).get();
+    MyClientHandler handler = client.connectTo(20000, "0.0.0.0", serverKeyPair.publicKey(), MyClientHandler::new).get();
 
     Thread.sleep(1000);
     assertNotNull(handler);
diff --git a/scuttlebutt-rpc/build.gradle b/scuttlebutt-rpc/build.gradle
index b6f1339..cf71a72 100644
--- a/scuttlebutt-rpc/build.gradle
+++ b/scuttlebutt-rpc/build.gradle
@@ -5,6 +5,8 @@ dependencies {
   compile project(':concurrent')
   compile project(':crypto')
   compile project(':scuttlebutt')
+  compile project(':scuttlebutt-handshake')
+  compile 'org.logl:logl-api'
 
   compile 'com.fasterxml.jackson.core:jackson-databind'
 
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCAsyncRequest.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCAsyncRequest.java
new file mode 100644
index 0000000..f4281d7
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCAsyncRequest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc;
+
+import net.consensys.cava.bytes.Bytes;
+
+import java.util.List;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class RPCAsyncRequest {
+
+
+  private final RPCFunction function;
+  private final List<Object> arguments;
+
+  /**
+   *
+   * @param function the function to be in invoked. If the function is in a namespace, the first n-1 items in the array
+   *        are the namespace followed by the function name (e.g. 'blobs.get' becomes ['blobs', 'get']).
+   * @param arguments The arguments passed to the function being invoked. Each item can be any arbitrary object which is
+   *        JSON serializable (e.g. String, Int, list, object.)
+   *
+   */
+  public RPCAsyncRequest(RPCFunction function, List<Object> arguments) {
+    this.function = function;
+    this.arguments = arguments;
+  }
+
+  /**
+   * Encode the RPC request as bytes.
+   *
+   * @param objectMapper the object mapper to serialize the request with
+   * @return an RPC request serialized into bytes
+   * @throws JsonProcessingException thrown if there is an error while serializing the request to bytes
+   */
+  public Bytes toEncodedRpcMessage(ObjectMapper objectMapper) throws JsonProcessingException {
+    return RPCCodec.encodeRequest(
+        new RPCRequestBody(function.asList(), RPCRequestType.ASYNC, arguments).asBytes(objectMapper),
+        getRPCFlags());
+  }
+
+  public RPCFlag[] getRPCFlags() {
+    return new RPCFlag[] {RPCFlag.BodyType.JSON};
+  }
+
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCCodec.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCCodec.java
index ca7223d..750dfd0 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCCodec.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCCodec.java
@@ -18,6 +18,9 @@ import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 /**
  * Encoder responsible for encoding requests.
  * <p>
@@ -27,6 +30,8 @@ public final class RPCCodec {
 
   static final AtomicInteger counter = new AtomicInteger(1);
 
+  private static ObjectMapper mapper = new ObjectMapper();
+
   private static int nextRequestNumber() {
     int requestNumber = counter.getAndIncrement();
     if (requestNumber < 1) {
@@ -82,6 +87,19 @@ public final class RPCCodec {
   }
 
   /**
+   * Encode a message as an RPC request.
+   *
+   * @param body the body to encode as an RPC request
+   * @param requestNumber the request number
+   * @param flags the flags of the RPC request (already encoded.)
+   * @return the message encoded as an RPC request
+   */
+  public static Bytes encodeRequest(Bytes body, int requestNumber, byte flags) {
+    return Bytes
+        .concatenate(Bytes.of(flags), Bytes.ofUnsignedInt(body.size()), Bytes.ofUnsignedInt(requestNumber), body);
+  }
+
+  /**
    * Encode a message as a response to a RPC request.
    * 
    * @param body the body to encode as the body of the response
@@ -117,6 +135,18 @@ public final class RPCCodec {
   }
 
   /**
+   * Encodes a message with the body and headers set in the appropriate way to end a stream.
+   *
+   * @return the response encoded as an RPC request
+   * @throws JsonProcessingException
+   */
+  public static Bytes encodeStreamEndRequest(int requestNumber) throws JsonProcessingException {
+    Boolean bool = Boolean.TRUE;
+    byte[] bytes = mapper.writeValueAsBytes(bool);
+    return encodeRequest(Bytes.wrap(bytes), requestNumber, RPCFlag.EndOrError.END);
+  }
+
+  /**
    * Encode a message as a response to a RPC request.
    * 
    * @param body the body to encode as the body of the response
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCErrorBody.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCErrorBody.java
new file mode 100644
index 0000000..87fa5b6
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCErrorBody.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc;
+
+/**
+ * An RPC message response body which contains an error
+ */
+public class RPCErrorBody {
+
+  private String name;
+  private String message;
+  private String stack;
+
+  public RPCErrorBody() {
+
+  }
+
+  /**
+   * A description of an error that occurred while performing an RPC request.
+   *
+   * @param name the name of the error type
+   * @param message the message describing the error
+   * @param stack the stack trace from the error
+   */
+  public RPCErrorBody(String name, String message, String stack) {
+    this.name = name;
+    this.message = message;
+    this.stack = stack;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+  public String getStack() {
+    return stack;
+  }
+
+  public void setStack(String stack) {
+    this.stack = stack;
+  }
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFunction.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFunction.java
new file mode 100644
index 0000000..511a491
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFunction.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A scuttlebutt RPC function namespace and name representation.
+ */
+public class RPCFunction {
+
+  private final List<String> namespace;
+  private final String functionName;
+
+  /**
+   *
+   * @param namespace the namespace of the function (e.g. ['blobs']. May be empty if there is no namespace for the
+   *        function.
+   * @param functionName the function (e.g. 'add'.)
+   */
+  public RPCFunction(List<String> namespace, String functionName) {
+    this.namespace = namespace;
+    this.functionName = functionName;
+  }
+
+  public RPCFunction(String functionName) {
+    this.namespace = new ArrayList<>();
+    this.functionName = functionName;
+  }
+
+  /**
+   * @return The list representation of the namespace and function call.
+   */
+  public List<String> asList() {
+    List<String> list = new ArrayList<>();
+    list.addAll(namespace);
+    list.add(functionName);
+    return list;
+  }
+
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java
index a82f1fc..2f21645 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java
@@ -19,14 +19,13 @@ import org.apache.tuweni.bytes.Bytes;
 import java.io.IOException;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Optional;
 
 /**
  * Decoded RPC message, making elements of the message available directly.
  */
 public final class RPCMessage {
 
-  private static final ObjectMapper mapper = new ObjectMapper();
-
   private final byte rpcFlags;
   private final boolean stream;
   private final boolean lastMessageOrError;
@@ -82,6 +81,40 @@ public final class RPCMessage {
   }
 
   /**
+   *
+   * @return true if this is a last message in a stream, and it is not an error
+   */
+  public boolean isSuccessfulLastMessage() {
+    return lastMessageOrError() && asString().equals("true");
+  }
+
+  /**
+   *
+   * @return true if this is an error message response
+   */
+  public boolean isErrorMessage() {
+    return lastMessageOrError && !isSuccessfulLastMessage();
+  }
+
+  /**
+   * @param objectMapper the object mapper to deserialize with
+   * @return the RPC error response body, if this is an error response - nothing otherwise
+   */
+  public Optional<RPCErrorBody> getErrorBody(ObjectMapper objectMapper) {
+
+    if (!isErrorMessage()) {
+      // If the body of the response is 'true' or the error flag isn't set, it's a successful end condition
+      return Optional.absent();
+    } else {
+      try {
+        return Optional.of(asJSON(objectMapper, RPCErrorBody.class));
+      } catch (IOException e) {
+        return Optional.absent();
+      }
+    }
+  }
+
+  /**
    * Provides the type of the body of the message: a binary message, a UTF-8 string or a JSON message.
    * 
    * @return the type of the body: a binary message, a UTF-8 string or a JSON message
@@ -128,13 +161,14 @@ public final class RPCMessage {
 
   /**
    * Provides the body of the message, marshalled as a JSON object.
-   * 
+   *
+   * @param objectMapper the object mapper to deserialize with
    * @param clazz the JSON object class
    * @param <T> the matching JSON object class
    * @return a new instance of the JSON object class
    * @throws IOException if an error occurs during marshalling
    */
-  public <T> T asJSON(Class<T> clazz) throws IOException {
-    return mapper.readerFor(clazz).readValue(body().toArrayUnsafe());
+  public <T> T asJSON(ObjectMapper objectMapper, Class<T> clazz) throws IOException {
+    return objectMapper.readerFor(clazz).readValue(body().toArrayUnsafe());
   }
 }
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestBody.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestBody.java
new file mode 100644
index 0000000..70ad4e3
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestBody.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc;
+
+import net.consensys.cava.bytes.Bytes;
+
+import java.util.List;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * The request payload of an RPC request to another node. The fields are as specified in the scuttlebutt protocol docs
+ */
+public class RPCRequestBody {
+
+  private final List<String> name;
+  private final RPCRequestType type;
+  private final List<Object> args;
+
+  /**
+   *
+   * @param name the function to be in invoked. If the function is in a namespace, the first n-1 items in the array are
+   *        the namespace followed by the function name (e.g. 'blobs.get' becomes ['blobs', 'get']). If the function is
+   *        not in a namespace, it is an array with one item (e.g. ['createFeedStream'].
+   * @param type the type of the request (e.g. stream or async.)
+   * @param args The args passed to the function being invoked. Each item can be any arbitrary object which is JSON
+   *        serializable (e.g. String, Int, list, object.)
+   */
+  public RPCRequestBody(List<String> name, RPCRequestType type, List<Object> args) {
+    this.name = name;
+    this.type = type;
+    this.args = args;
+  }
+
+  public List<String> getName() {
+    return name;
+  }
+
+  public RPCRequestType getType() {
+    return type;
+  }
+
+  public List<Object> getArgs() {
+    return args;
+  }
+
+  /**
+   *
+   * @param objectMapper the object mapper to serialize to bytes with
+   * @return the bytes representation of this RPC request body. The request is first encoded into JSON, then from JSON
+   *         to a byte array
+   * @throws JsonProcessingException thrown if there is a problem transforming the object to JSON.
+   */
+  public Bytes asBytes(ObjectMapper objectMapper) throws JsonProcessingException {
+    byte[] bytes = objectMapper.writeValueAsBytes(this);
+    return Bytes.wrap(bytes);
+  }
+
+
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestType.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestType.java
new file mode 100644
index 0000000..9703da4
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestType.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * The available type of Scuttlebutt RPC requests
+ */
+public enum RPCRequestType {
+
+  /**
+   * An 'async' request, which returns one result some time in the future.
+   */
+  @JsonProperty("async")
+  ASYNC,
+
+  /**
+   * A 'source' type request, which begins a stream of results
+   */
+  @JsonProperty("source")
+  SOURCE
+
+
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCStreamRequest.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCStreamRequest.java
new file mode 100644
index 0000000..ff198da
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCStreamRequest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc;
+
+import net.consensys.cava.bytes.Bytes;
+
+import java.util.List;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * A request which returns a 'source' type result (e.g. opens up a stream that is followed by the request ID.)
+ */
+public class RPCStreamRequest {
+
+  private final RPCFunction function;
+  private final List<Object> arguments;
+
+  /**
+   * The details for the function (the name of the function and its arguments.)
+   * 
+   * @param function the function to be invoked
+   * @param arguments the arguments for the function (can be any arbitrary class which can be marshalled into JSON.)
+   */
+  public RPCStreamRequest(RPCFunction function, List<Object> arguments) {
+    this.function = function;
+    this.arguments = arguments;
+  }
+
+  /**
+   * @return The byte representation for the request after it is marshalled into a JSON string.
+   * @throws JsonProcessingException if an error was thrown while marshalling to JSON
+   */
+  public Bytes toEncodedRpcMessage(ObjectMapper mapper) throws JsonProcessingException {
+    RPCRequestBody body = new RPCRequestBody(function.asList(), RPCRequestType.SOURCE, arguments);
+    return RPCCodec.encodeRequest(body.asBytes(mapper), getRPCFlags());
+  }
+
+  /**
+   * @return The correct RPC flags for a stream request
+   */
+  public RPCFlag[] getRPCFlags() {
+    return new RPCFlag[] {RPCFlag.Stream.STREAM, RPCFlag.BodyType.JSON};
+  }
+
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/Multiplexer.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/Multiplexer.java
new file mode 100644
index 0000000..722dcbf
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/Multiplexer.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc.mux;
+
+import net.consensys.cava.concurrent.AsyncResult;
+import net.consensys.cava.scuttlebutt.rpc.RPCAsyncRequest;
+import net.consensys.cava.scuttlebutt.rpc.RPCMessage;
+import net.consensys.cava.scuttlebutt.rpc.RPCStreamRequest;
+import net.consensys.cava.scuttlebutt.rpc.mux.exceptions.ConnectionClosedException;
+
+import java.util.function.Function;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+/**
+ * Multiplexes asynchronous requests and streams across a connection to a node. Handles multiple active requests and
+ * streams across one connection.
+ */
+public interface Multiplexer {
+
+  /**
+   * Issue an 'async' type request to a node, which will eventually return a result from the node.
+   *
+   * @param request the request details
+   *
+   * @return an async result which will be completed with the result or an error if the request fails.
+   */
+  AsyncResult<RPCMessage> makeAsyncRequest(RPCAsyncRequest request);
+
+  /**
+   * Creates a request which opens a stream (e.g. a 'source' in the protocol docs.)
+   *
+   * @param request the request details
+   * @param streamFactory a function which takes a 'Runnable' which closes the stream when ran, and returns a stream
+   *        handler to pass messages to
+   *
+   * @throws JsonProcessingException
+   */
+  void openStream(RPCStreamRequest request, Function<Runnable, ScuttlebuttStreamHandler> streamFactory)
+      throws JsonProcessingException,
+      ConnectionClosedException;
+
+
+  /**
+   * Close the underlying connection
+   */
+  void close();
+
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/RPCHandler.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/RPCHandler.java
new file mode 100644
index 0000000..0ac4583
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/RPCHandler.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc.mux;
+
+import net.consensys.cava.bytes.Bytes;
+import net.consensys.cava.concurrent.AsyncResult;
+import net.consensys.cava.concurrent.CompletableAsyncResult;
+import net.consensys.cava.scuttlebutt.handshake.vertx.ClientHandler;
+import net.consensys.cava.scuttlebutt.rpc.RPCAsyncRequest;
+import net.consensys.cava.scuttlebutt.rpc.RPCCodec;
+import net.consensys.cava.scuttlebutt.rpc.RPCErrorBody;
+import net.consensys.cava.scuttlebutt.rpc.RPCFlag;
+import net.consensys.cava.scuttlebutt.rpc.RPCMessage;
+import net.consensys.cava.scuttlebutt.rpc.RPCStreamRequest;
+import net.consensys.cava.scuttlebutt.rpc.mux.exceptions.ConnectionClosedException;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Optional;
+import org.logl.Logger;
+import org.logl.LoggerProvider;
+
+/**
+ * Handles RPC requests and responses from an active connection to a scuttlebutt node
+ *
+ * Note: the public methods on this class are synchronized so that a request is rejected if the connection has been
+ * closed before it begins and any 'in flight' requests are ended exceptionally with a 'connection closed' error without
+ * new incoming requests being added to the maps by threads.
+ *
+ * In the future,we could perhaps be carefully more fine grained about the locking if we require a high degree of
+ * concurrency.
+ *
+ */
+public class RPCHandler implements Multiplexer, ClientHandler {
+
+  private final Consumer<Bytes> messageSender;
+  private final Logger logger;
+  private final Runnable connectionCloser;
+  private final ObjectMapper objectMapper;
+
+  private Map<Integer, CompletableAsyncResult<RPCMessage>> awaitingAsyncResponse = new HashMap<>();
+  private Map<Integer, ScuttlebuttStreamHandler> streams = new HashMap<>();
+
+  private boolean closed;
+
+  /**
+   * Makes RPC requests over a connection
+   *
+   * @param messageSender sends the request to the node
+   * @param terminationFn closes the connection
+   * @param objectMapper the objectMapper to serialize and deserialize message request and response bodies
+   * @param logger
+   */
+  public RPCHandler(
+      Consumer<Bytes> messageSender,
+      Runnable terminationFn,
+      ObjectMapper objectMapper,
+      LoggerProvider logger) {
+    this.messageSender = messageSender;
+    this.connectionCloser = terminationFn;
+    this.closed = false;
+    this.objectMapper = objectMapper;
+
+    this.logger = logger.getLogger("rpc handler");
+  }
+
+  @Override
+  public synchronized AsyncResult<RPCMessage> makeAsyncRequest(RPCAsyncRequest request) {
+
+    CompletableAsyncResult<RPCMessage> result = AsyncResult.incomplete();
+
+    if (closed) {
+      result.completeExceptionally(new ConnectionClosedException());
+    }
+
+    try {
+      RPCMessage message = new RPCMessage(request.toEncodedRpcMessage(objectMapper));
+      int requestNumber = message.requestNumber();
+      awaitingAsyncResponse.put(requestNumber, result);
+      Bytes bytes = RPCCodec.encodeRequest(message.body(), requestNumber, request.getRPCFlags());
+      messageSender.accept(bytes);
+
+    } catch (JsonProcessingException e) {
+      result.completeExceptionally(e);
+    }
+
+    return result;
+  }
+
+  @Override
+  public synchronized void openStream(
+      RPCStreamRequest request,
+      Function<Runnable, ScuttlebuttStreamHandler> responseSink) throws JsonProcessingException,
+      ConnectionClosedException {
+
+    if (closed) {
+      throw new ConnectionClosedException();
+    }
+
+    try {
+      RPCFlag[] rpcFlags = request.getRPCFlags();
+      RPCMessage message = new RPCMessage(request.toEncodedRpcMessage(objectMapper));
+      int requestNumber = message.requestNumber();
+
+      Bytes bytes = RPCCodec.encodeRequest(message.body(), requestNumber, rpcFlags);
+      messageSender.accept(bytes);
+
+      Runnable closeStreamHandler = new Runnable() {
+        @Override
+        public void run() {
+
+          try {
+            Bytes bytes = RPCCodec.encodeStreamEndRequest(requestNumber);
+            messageSender.accept(bytes);
+          } catch (JsonProcessingException e) {
+            logger.warn("Unexpectedly could not encode stream end message to JSON.");
+          }
+
+        }
+      };
+
+      ScuttlebuttStreamHandler scuttlebuttStreamHandler = responseSink.apply(closeStreamHandler);
+
+      streams.put(requestNumber, scuttlebuttStreamHandler);
+    } catch (JsonProcessingException ex) {
+      throw ex;
+    }
+  }
+
+  @Override
+  public synchronized void close() {
+    connectionCloser.run();
+  }
+
+  @Override
+  public synchronized void receivedMessage(Bytes message) {
+
+    RPCMessage rpcMessage = new RPCMessage(message);
+
+    // A negative request number indicates that this is a response, rather than a request that this node
+    // should service
+    if (rpcMessage.requestNumber() < 0) {
+      handleResponse(rpcMessage);
+    } else {
+      handleRequest(rpcMessage);
+    }
+
+  }
+
+  private void handleRequest(RPCMessage rpcMessage) {
+    // Not yet implemented
+    logger.warn("Received incoming request, but we do not yet handle any requests: " + rpcMessage.asString());
+
+  }
+
+  private void handleResponse(RPCMessage response) {
+    int requestNumber = response.requestNumber() * -1;
+
+    if (logger.isDebugEnabled()) {
+      logger.debug("Incoming response: " + response.asString());
+    }
+
+    byte rpcFlags = response.rpcFlags();
+
+    boolean isStream = RPCFlag.Stream.STREAM.isApplied(rpcFlags);
+
+    if (isStream) {
+      ScuttlebuttStreamHandler scuttlebuttStreamHandler = streams.get(requestNumber);
+
+      if (scuttlebuttStreamHandler != null) {
+
+        if (response.isSuccessfulLastMessage()) {
+          streams.remove(requestNumber);
+          scuttlebuttStreamHandler.onStreamEnd();
+        } else if (response.isErrorMessage()) {
+
+          Optional<RPCErrorBody> errorBody = response.getErrorBody(objectMapper);
+
+          if (errorBody.isPresent()) {
+            scuttlebuttStreamHandler.onStreamError(new Exception(errorBody.get().getMessage()));
+          } else {
+            // This shouldn't happen, but for safety we fall back to just writing the whole body in the exception message
+            // if we fail to marshall it for whatever reason
+            scuttlebuttStreamHandler.onStreamError(new Exception(response.asString()));
+          }
+
+        } else {
+          scuttlebuttStreamHandler.onMessage(response);
+        }
+      } else {
+        logger.warn(
+            "Couldn't find stream handler for RPC response with request number "
+                + requestNumber
+                + " "
+                + response.asString());
+      }
+
+    } else {
+
+      CompletableAsyncResult<RPCMessage> rpcMessageFuture = awaitingAsyncResponse.get(requestNumber);
+
+      if (rpcMessageFuture != null) {
+        rpcMessageFuture.complete(response);
+        awaitingAsyncResponse.remove(requestNumber);
+      } else {
+        logger.warn(
+            "Couldn't find async handler for RPC response with request number "
+                + requestNumber
+                + " "
+                + response.asString());
+      }
+    }
+
+  }
+
+  @Override
+  public void streamClosed() {
+    this.closed = true;
+
+    streams.forEach((key, streamHandler) -> {
+      streamHandler.onStreamError(new ConnectionClosedException());
+    });
+
+    streams.clear();
+
+    awaitingAsyncResponse.forEach((key, value) -> {
+      if (!value.isDone()) {
+        value.completeExceptionally(new ConnectionClosedException());
+      }
+
+    });
+
+
+  }
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/ScuttlebuttStreamHandler.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/ScuttlebuttStreamHandler.java
new file mode 100644
index 0000000..d108663
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/ScuttlebuttStreamHandler.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc.mux;
+
+import net.consensys.cava.scuttlebutt.rpc.RPCMessage;
+
+/**
+ * Handles incoming items from a result stream
+ */
+public interface ScuttlebuttStreamHandler {
+
+  /**
+   * Handles a new message from the result stream.
+   *
+   * @param message
+   */
+  void onMessage(RPCMessage message);
+
+  /**
+   * Invoked when the stream has been closed.
+   */
+  void onStreamEnd();
+
+  /**
+   * Invoked when there is an error in the stream.
+   *
+   * @param ex the underlying error
+   */
+  void onStreamError(Exception ex);
+
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/ConnectionClosedException.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/ConnectionClosedException.java
new file mode 100644
index 0000000..160946c
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/ConnectionClosedException.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc.mux.exceptions;
+
+public class ConnectionClosedException extends Exception {
+
+  public ConnectionClosedException() {
+    super("Connection is closed.");
+  }
+
+}
diff --git a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
index 63b64a8..3178fae 100644
--- a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
+++ b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
@@ -188,4 +188,5 @@ class PatchworkIntegrationTest {
 
     secureScuttlebuttVertxClient.stop().join();
   }
+
 }
diff --git a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/RPCEncodingTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/RPCEncodingTest.java
index 10966cf..912c1b5 100644
--- a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/RPCEncodingTest.java
+++ b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/RPCEncodingTest.java
@@ -21,6 +21,7 @@ import org.apache.tuweni.bytes.Bytes;
 
 import java.nio.charset.StandardCharsets;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.jupiter.api.Test;
 
 class RPCEncodingTest {
@@ -44,7 +45,7 @@ class RPCEncodingTest {
         RPCFlag.Stream.STREAM);
     RPCMessage decoded = new RPCMessage(message);
     assertTrue(decoded.stream());
-    assertEquals("some JSON string", decoded.asJSON(String.class));
+    assertEquals("some JSON string", decoded.asJSON(new ObjectMapper(), String.class));
     assertEquals(RPCFlag.BodyType.JSON, decoded.bodyType());
     assertEquals(RPCCodec.counter.get() - 1, decoded.requestNumber());
   }
diff --git a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/mux/PatchworkIntegrationTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/mux/PatchworkIntegrationTest.java
new file mode 100644
index 0000000..293ac92
--- /dev/null
+++ b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/mux/PatchworkIntegrationTest.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.scuttlebutt.rpc.mux;
+
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+import net.consensys.cava.bytes.Bytes;
+import net.consensys.cava.bytes.Bytes32;
+import net.consensys.cava.concurrent.AsyncResult;
+import net.consensys.cava.concurrent.CompletableAsyncResult;
+import net.consensys.cava.crypto.sodium.Signature;
+import net.consensys.cava.io.Base64;
+import net.consensys.cava.junit.VertxExtension;
+import net.consensys.cava.junit.VertxInstance;
+import net.consensys.cava.scuttlebutt.handshake.vertx.SecureScuttlebuttVertxClient;
+import net.consensys.cava.scuttlebutt.rpc.RPCAsyncRequest;
+import net.consensys.cava.scuttlebutt.rpc.RPCFunction;
+import net.consensys.cava.scuttlebutt.rpc.RPCMessage;
+import net.consensys.cava.scuttlebutt.rpc.RPCStreamRequest;
+import net.consensys.cava.scuttlebutt.rpc.mux.exceptions.ConnectionClosedException;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Scanner;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Optional;
+import io.vertx.core.Vertx;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.logl.Level;
+import org.logl.LoggerProvider;
+import org.logl.logl.SimpleLogger;
+import org.logl.vertx.LoglLogDelegateFactory;
+
+@ExtendWith(VertxExtension.class)
+public class PatchworkIntegrationTest {
+
+  LoggerProvider loggerProvider = SimpleLogger.withLogLevel(Level.DEBUG).toPrintWriter(
+      new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out, UTF_8))));
+
+  @Test
+  @Disabled
+  public void testWithPatchwork(@VertxInstance Vertx vertx) throws Exception {
+
+    RPCHandler rpcHandler = makeRPCHandler(vertx);
+
+    List<AsyncResult<RPCMessage>> results = new ArrayList<>();
+
+    for (int i = 0; i < 10; i++) {
+      RPCFunction function = new RPCFunction("whoami");
+      RPCAsyncRequest asyncRequest = new RPCAsyncRequest(function, new ArrayList<>());
+
+      AsyncResult<RPCMessage> res = rpcHandler.makeAsyncRequest(asyncRequest);
+
+      results.add(res);
+    }
+
+    AsyncResult<List<RPCMessage>> allResults = AsyncResult.combine(results);
+    List<RPCMessage> rpcMessages = allResults.get();
+
+    assertEquals(10, rpcMessages.size());
+
+    rpcMessages.forEach(msg -> {
+      assertFalse(msg.lastMessageOrError());
+
+    });
+
+  }
+
+
+  // TODO: Move this to a utility class that all the scuttlebutt modules' tests can use.
+  private Signature.KeyPair getLocalKeys() throws Exception {
+    Optional<String> ssbDir = Optional.fromNullable(System.getenv().get("ssb_dir"));
+    Optional<String> homePath =
+        Optional.fromNullable(System.getProperty("user.home")).transform(home -> home + "/.ssb");
+
+    Optional<String> path = ssbDir.or(homePath);
+
+    if (!path.isPresent()) {
+      throw new Exception("Cannot find ssb directory config value");
+    }
+
+    String secretPath = path.get() + "/secret";
+    File file = new File(secretPath);
+
+    if (!file.exists()) {
+      throw new Exception("Secret file does not exist");
+    }
+
+    Scanner s = new Scanner(file, UTF_8.name());
+    s.useDelimiter("\n");
+
+    ArrayList<String> list = new ArrayList<String>();
+    while (s.hasNext()) {
+      String next = s.next();
+
+      // Filter out the comment lines
+      if (!next.startsWith("#")) {
+        list.add(next);
+      }
+    }
+
+    String secretJSON = String.join("", list);
+
+    ObjectMapper mapper = new ObjectMapper();
+
+    HashMap<String, String> values = mapper.readValue(secretJSON, new TypeReference<Map<String, String>>() {});
+    String pubKey = values.get("public").replace(".ed25519", "");
+    String privateKey = values.get("private").replace(".ed25519", "");
+
+    Bytes pubKeyBytes = Base64.decode(pubKey);
+    Bytes privKeyBytes = Base64.decode(privateKey);
+
+    Signature.PublicKey pub = Signature.PublicKey.fromBytes(pubKeyBytes);
+    Signature.SecretKey secretKey = Signature.SecretKey.fromBytes(privKeyBytes);
+
+    return new Signature.KeyPair(pub, secretKey);
+  }
+
+  @Test
+  @Disabled
+  public void postMessageTest(@VertxInstance Vertx vertx) throws Exception {
+
+    RPCHandler rpcHandler = makeRPCHandler(vertx);
+
+
+    List<AsyncResult<RPCMessage>> results = new ArrayList<>();
+
+    for (int i = 0; i < 20; i++) {
+      // Note: in a real use case, this would more likely be a Java class with these fields
+      HashMap<String, String> params = new HashMap<>();
+      params.put("type", "post");
+      params.put("text", "test test " + i);
+
+      RPCAsyncRequest asyncRequest = new RPCAsyncRequest(new RPCFunction("publish"), Arrays.asList(params));
+
+      AsyncResult<RPCMessage> rpcMessageAsyncResult = rpcHandler.makeAsyncRequest(asyncRequest);
+
+      results.add(rpcMessageAsyncResult);
+
+    }
+
+    List<RPCMessage> rpcMessages = AsyncResult.combine(results).get();
+
+    rpcMessages.forEach(msg -> System.out.println(msg.asString()));
+  }
+
+  private RPCHandler makeRPCHandler(Vertx vertx) throws Exception {
+    Signature.KeyPair keyPair = getLocalKeys();
+    String networkKeyBase64 = "1KHLiKZvAvjbY1ziZEHMXawbCEIM6qwjCDm3VYRan/s=";
+    Bytes32 networkKeyBytes32 = Bytes32.wrap(Base64.decode(networkKeyBase64));
+
+    String host = "localhost";
+    int port = 8008;
+    LoggerProvider loggerProvider = SimpleLogger.withLogLevel(Level.DEBUG).toPrintWriter(
+        new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out, UTF_8))));
+    LoglLogDelegateFactory.setProvider(loggerProvider);
+
+    SecureScuttlebuttVertxClient secureScuttlebuttVertxClient =
+        new SecureScuttlebuttVertxClient(loggerProvider, vertx, keyPair, networkKeyBytes32);
+
+    AsyncResult<RPCHandler> onConnect =
+        secureScuttlebuttVertxClient.connectTo(port, host, keyPair.publicKey(), (sender, terminationFn) -> {
+
+          return new RPCHandler(sender, terminationFn, new ObjectMapper(), loggerProvider);
+        });
+
+    return onConnect.get();
+  }
+
+
+  @Test
+  @Disabled
+  public void streamTest(@VertxInstance Vertx vertx) throws Exception {
+
+    RPCHandler handler = makeRPCHandler(vertx);
+    Signature.PublicKey publicKey = getLocalKeys().publicKey();
+
+    String pubKey = "@" + Base64.encode(publicKey.bytes()) + ".ed25519";
+
+    Map<String, String> params = new HashMap<>();
+    params.put("id", pubKey);
+
+    CompletableAsyncResult<Void> streamEnded = AsyncResult.incomplete();
+
+    RPCStreamRequest streamRequest = new RPCStreamRequest(new RPCFunction("createUserStream"), Arrays.asList(params));
+
+    try {
+      handler.openStream(streamRequest, (closeStream) -> new ScuttlebuttStreamHandler() {
+        @Override
+        public void onMessage(RPCMessage message) {
+          System.out.print(message.asString());
+        }
+
+        @Override
+        public void onStreamEnd() {
+          streamEnded.complete(null);
+        }
+
+        @Override
+        public void onStreamError(Exception ex) {
+
+        }
+      });
+    } catch (ConnectionClosedException e) {
+      throw e;
+    }
+
+    // Wait until the stream is complete
+    streamEnded.get();
+
+  }
+
+
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 04/32: Change headers

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit b8d42bdf8eb5257a7dde201ee9af1c9abe2bf1ba
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Tue Apr 2 22:53:58 2019 -0700

    Change headers
---
 .../net/consensys/cava/bytes/AbstractBytes.java    |  8 ++++----
 .../consensys/cava/bytes/ArrayWrappingBytes.java   |  8 ++++----
 .../consensys/cava/bytes/ArrayWrappingBytes32.java |  8 ++++----
 .../consensys/cava/bytes/ArrayWrappingBytes48.java |  8 ++++----
 .../consensys/cava/bytes/BufferWrappingBytes.java  |  8 ++++----
 .../consensys/cava/bytes/ByteBufWrappingBytes.java |  8 ++++----
 .../cava/bytes/ByteBufferWrappingBytes.java        |  8 ++++----
 .../main/java/net/consensys/cava/bytes/Bytes.java  |  8 ++++----
 .../java/net/consensys/cava/bytes/Bytes32.java     |  8 ++++----
 .../java/net/consensys/cava/bytes/Bytes48.java     |  8 ++++----
 .../java/net/consensys/cava/bytes/BytesValues.java |  8 ++++----
 .../consensys/cava/bytes/ConcatenatedBytes.java    |  8 ++++----
 .../consensys/cava/bytes/DelegatingBytes32.java    |  8 ++++----
 .../consensys/cava/bytes/DelegatingBytes48.java    |  8 ++++----
 .../cava/bytes/DelegatingMutableBytes32.java       |  8 ++++----
 .../cava/bytes/DelegatingMutableBytes48.java       |  8 ++++----
 .../cava/bytes/MutableArrayWrappingBytes.java      |  8 ++++----
 .../cava/bytes/MutableArrayWrappingBytes32.java    |  8 ++++----
 .../cava/bytes/MutableArrayWrappingBytes48.java    |  8 ++++----
 .../cava/bytes/MutableBufferWrappingBytes.java     |  8 ++++----
 .../cava/bytes/MutableByteBufWrappingBytes.java    |  8 ++++----
 .../cava/bytes/MutableByteBufferWrappingBytes.java |  8 ++++----
 .../net/consensys/cava/bytes/MutableBytes.java     |  8 ++++----
 .../net/consensys/cava/bytes/MutableBytes32.java   |  8 ++++----
 .../net/consensys/cava/bytes/MutableBytes48.java   |  8 ++++----
 .../net/consensys/cava/bytes/BufferBytesTest.java  |  8 ++++----
 .../net/consensys/cava/bytes/ByteBufBytesTest.java |  8 ++++----
 .../consensys/cava/bytes/ByteBufferBytesTest.java  |  8 ++++----
 .../java/net/consensys/cava/bytes/Bytes32Test.java |  8 ++++----
 .../java/net/consensys/cava/bytes/Bytes48Test.java |  8 ++++----
 .../java/net/consensys/cava/bytes/BytesTest.java   |  8 ++++----
 .../net/consensys/cava/bytes/CommonBytesTests.java |  8 ++++----
 .../cava/bytes/ConcatenatedBytesTest.java          |  8 ++++----
 .../cava/concurrent/coroutines/AsyncCompletion.kt  | 20 ++++++++++++--------
 .../cava/concurrent/coroutines/AsyncResult.kt      | 20 ++++++++++++--------
 .../cava/concurrent/coroutines/CoroutineLatch.kt   | 20 ++++++++++++--------
 .../cava/concurrent/coroutines/Retryable.kt        | 20 ++++++++++++--------
 .../concurrent/coroutines/CoroutineLatchTest.kt    | 20 ++++++++++++--------
 .../cava/concurrent/coroutines/RetryableTest.kt    | 20 ++++++++++++--------
 .../consensys/cava/concurrent/AsyncCompletion.java |  8 ++++----
 .../net/consensys/cava/concurrent/AsyncResult.java |  8 ++++----
 .../consensys/cava/concurrent/AtomicSlotMap.java   |  8 ++++----
 .../concurrent/CompletableAsyncCompletion.java     |  8 ++++----
 .../cava/concurrent/CompletableAsyncResult.java    |  8 ++++----
 .../DefaultCompletableAsyncCompletion.java         |  8 ++++----
 .../concurrent/DefaultCompletableAsyncResult.java  |  8 ++++----
 .../net/consensys/cava/concurrent/ExpiringMap.java |  8 ++++----
 .../net/consensys/cava/concurrent/ExpiringSet.java |  8 ++++----
 .../cava/concurrent/AtomicSlotMapTest.java         |  8 ++++----
 .../DefaultCompletableAsyncCompletionTest.java     |  8 ++++----
 .../DefaultCompletableAsyncResultTest.java         |  8 ++++----
 .../consensys/cava/concurrent/ExpiringMapTest.java |  8 ++++----
 .../consensys/cava/concurrent/ExpiringSetTest.java |  8 ++++----
 .../net/consensys/cava/config/Configuration.java   |  8 ++++----
 .../consensys/cava/config/ConfigurationError.java  |  8 ++++----
 .../consensys/cava/config/ConfigurationErrors.java |  8 ++++----
 .../cava/config/ConfigurationValidator.java        |  8 ++++----
 .../consensys/cava/config/DocumentPosition.java    |  8 ++++----
 .../consensys/cava/config/EmptyConfiguration.java  |  8 ++++----
 .../InvalidConfigurationPropertyTypeException.java |  8 ++++----
 .../config/NoConfigurationPropertyException.java   |  8 ++++----
 .../consensys/cava/config/PropertyValidator.java   |  8 ++++----
 .../consensys/cava/config/PropertyValidators.java  |  8 ++++----
 .../java/net/consensys/cava/config/Schema.java     |  8 ++++----
 .../net/consensys/cava/config/SchemaBuilder.java   |  8 ++++----
 .../cava/config/TomlBackedConfiguration.java       |  8 ++++----
 .../net/consensys/cava/config/TomlSerializer.java  |  8 ++++----
 .../cava/config/PropertyValidatorTest.java         |  8 ++++----
 .../consensys/cava/config/SchemaBuilderTest.java   |  8 ++++----
 .../cava/config/TomlBackedConfigurationTest.java   |  8 ++++----
 .../main/java/net/consensys/cava/crypto/Hash.java  |  8 ++++----
 .../InvalidSEC256K1SecretKeyStoreException.java    |  8 ++++----
 .../java/net/consensys/cava/crypto/SECP256K1.java  |  8 ++++----
 .../consensys/cava/crypto/mikuli/AtePairing.java   |  8 ++++----
 .../net/consensys/cava/crypto/mikuli/BLS12381.java | 11 +++++------
 .../net/consensys/cava/crypto/mikuli/G1Point.java  | 13 ++++++-------
 .../net/consensys/cava/crypto/mikuli/G2Point.java  | 13 ++++++-------
 .../net/consensys/cava/crypto/mikuli/GTPoint.java  | 12 ++++++------
 .../net/consensys/cava/crypto/mikuli/Group.java    |  8 ++++----
 .../net/consensys/cava/crypto/mikuli/KeyPair.java  |  8 ++++----
 .../consensys/cava/crypto/mikuli/PublicKey.java    |  8 ++++----
 .../net/consensys/cava/crypto/mikuli/Scalar.java   | 12 ++++++------
 .../consensys/cava/crypto/mikuli/SecretKey.java    | 11 +++++------
 .../consensys/cava/crypto/mikuli/Signature.java    |  8 ++++----
 .../cava/crypto/mikuli/SignatureAndPublicKey.java  |  8 ++++----
 .../consensys/cava/crypto/sodium/AES256GCM.java    |  8 ++++----
 .../consensys/cava/crypto/sodium/Allocated.java    |  8 ++++----
 .../net/consensys/cava/crypto/sodium/Auth.java     |  8 ++++----
 .../java/net/consensys/cava/crypto/sodium/Box.java |  8 ++++----
 .../consensys/cava/crypto/sodium/Concatenate.java  |  8 ++++----
 .../sodium/DefaultDetachedEncryptionResult.java    |  8 ++++----
 .../crypto/sodium/DetachedEncryptionResult.java    |  8 ++++----
 .../consensys/cava/crypto/sodium/DiffieHelman.java |  8 ++++----
 .../consensys/cava/crypto/sodium/GenericHash.java  |  8 ++++----
 .../consensys/cava/crypto/sodium/HMACSHA256.java   |  8 ++++----
 .../consensys/cava/crypto/sodium/HMACSHA512.java   |  8 ++++----
 .../cava/crypto/sodium/HMACSHA512256.java          |  8 ++++----
 .../cava/crypto/sodium/KeyDerivation.java          |  8 ++++----
 .../consensys/cava/crypto/sodium/KeyExchange.java  |  8 ++++----
 .../consensys/cava/crypto/sodium/LibSodium.java    |  8 ++++----
 .../consensys/cava/crypto/sodium/PasswordHash.java |  8 ++++----
 .../consensys/cava/crypto/sodium/SHA256Hash.java   |  8 ++++----
 .../consensys/cava/crypto/sodium/SecretBox.java    |  8 ++++----
 .../cava/crypto/sodium/SecretDecryptionStream.java |  8 ++++----
 .../cava/crypto/sodium/SecretEncryptionStream.java |  8 ++++----
 .../consensys/cava/crypto/sodium/Signature.java    |  8 ++++----
 .../net/consensys/cava/crypto/sodium/Sodium.java   |  8 ++++----
 .../cava/crypto/sodium/SodiumException.java        |  8 ++++----
 .../cava/crypto/sodium/SodiumVersion.java          |  8 ++++----
 .../cava/crypto/sodium/XChaCha20Poly1305.java      |  8 ++++----
 .../java/net/consensys/cava/crypto/HashTest.java   |  8 ++++----
 .../net/consensys/cava/crypto/SECP256K1Test.java   |  8 ++++----
 .../cava/crypto/mikuli/SignatureTest.java          |  8 ++++----
 .../cava/crypto/sodium/AES256GCMTest.java          |  8 ++++----
 .../cava/crypto/sodium/AllocatedTest.java          |  8 ++++----
 .../net/consensys/cava/crypto/sodium/AuthTest.java |  8 ++++----
 .../net/consensys/cava/crypto/sodium/BoxTest.java  |  8 ++++----
 .../cava/crypto/sodium/ConcatenateTest.java        |  8 ++++----
 .../cava/crypto/sodium/DiffieHelmanTest.java       |  8 ++++----
 .../cava/crypto/sodium/GenericHashTest.java        |  8 ++++----
 .../cava/crypto/sodium/HMACSHA256Test.java         |  8 ++++----
 .../cava/crypto/sodium/HMACSHA512256Test.java      |  8 ++++----
 .../cava/crypto/sodium/HMACSHA512Test.java         |  8 ++++----
 .../cava/crypto/sodium/KeyDerivationTest.java      |  8 ++++----
 .../cava/crypto/sodium/PasswordHashTest.java       |  8 ++++----
 .../cava/crypto/sodium/SHA256HashTest.java         |  8 ++++----
 .../cava/crypto/sodium/SecretBoxTest.java          |  8 ++++----
 .../cava/crypto/sodium/SignatureTest.java          |  8 ++++----
 .../consensys/cava/crypto/sodium/SodiumTest.java   |  8 ++++----
 .../cava/crypto/sodium/XChaCha20Poly1305Test.java  |  8 ++++----
 .../consensys/cava/devp2p/AtomicLongProperty.kt    | 20 ++++++++++++--------
 .../net/consensys/cava/devp2p/DiscoveryService.kt  | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/devp2p/Endpoint.kt   | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/devp2p/EnodeUri.kt   | 20 ++++++++++++--------
 .../main/kotlin/net/consensys/cava/devp2p/Node.kt  | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/devp2p/Packet.kt     | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/devp2p/PacketType.kt | 20 ++++++++++++--------
 .../main/kotlin/net/consensys/cava/devp2p/Peer.kt  | 20 ++++++++++++--------
 .../net/consensys/cava/devp2p/PeerRepository.kt    | 20 ++++++++++++--------
 .../net/consensys/cava/devp2p/PeerRoutingTable.kt  | 20 ++++++++++++--------
 .../cava/devp2p/DiscoveryServiceJavaTest.java      |  8 ++++----
 .../consensys/cava/devp2p/DiscoveryServiceTest.kt  | 20 ++++++++++++--------
 .../net/consensys/cava/devp2p/EndpointTest.kt      | 20 ++++++++++++--------
 .../cava/devp2p/EphemeralPeerRepositoryTest.kt     | 20 ++++++++++++--------
 .../consensys/cava/devp2p/FindNodePacketTest.kt    | 20 ++++++++++++--------
 .../consensys/cava/devp2p/NeighborsPacketTest.kt   | 20 ++++++++++++--------
 .../net/consensys/cava/devp2p/PingPacketTest.kt    | 20 ++++++++++++--------
 .../net/consensys/cava/devp2p/PongPacketTest.kt    | 20 ++++++++++++--------
 .../cava/eth/reference/BlockRLPTestSuite.java      |  8 ++++----
 .../cava/eth/reference/MerkleTrieTestSuite.java    |  8 ++++----
 .../cava/eth/reference/RLPReferenceTestSuite.java  |  8 ++++----
 .../consensys/cava/eth/reference/SSZTestSuite.java |  8 ++++----
 .../cava/eth/reference/TransactionTestSuite.java   |  8 ++++----
 .../cava/eth/repository/BlockHeaderFields.kt       | 20 ++++++++++++--------
 .../cava/eth/repository/BlockchainIndex.kt         | 20 ++++++++++++--------
 .../cava/eth/repository/BlockchainRepository.kt    | 20 ++++++++++++--------
 .../eth/repository/TransactionReceiptFields.kt     | 20 ++++++++++++--------
 .../cava/eth/repository/BlockchainIndexTest.kt     | 20 ++++++++++++--------
 .../eth/repository/BlockchainRepositoryTest.kt     | 20 ++++++++++++--------
 .../main/java/net/consensys/cava/eth/Address.java  |  8 ++++----
 .../main/java/net/consensys/cava/eth/Block.java    |  8 ++++----
 .../java/net/consensys/cava/eth/BlockBody.java     |  8 ++++----
 .../java/net/consensys/cava/eth/BlockHeader.java   |  8 ++++----
 eth/src/main/java/net/consensys/cava/eth/Hash.java |  8 ++++----
 eth/src/main/java/net/consensys/cava/eth/Log.java  |  8 ++++----
 .../net/consensys/cava/eth/LogsBloomFilter.java    |  8 ++++----
 .../java/net/consensys/cava/eth/Transaction.java   |  8 ++++----
 .../net/consensys/cava/eth/TransactionReceipt.java |  8 ++++----
 .../java/net/consensys/cava/eth/BlockBodyTest.java |  8 ++++----
 .../net/consensys/cava/eth/BlockHeaderTest.java    |  8 ++++----
 .../java/net/consensys/cava/eth/BlockTest.java     |  8 ++++----
 .../test/java/net/consensys/cava/eth/LogTest.java  |  8 ++++----
 .../consensys/cava/eth/LogsBloomFilterTest.java    |  8 ++++----
 .../consensys/cava/eth/TransactionReceiptTest.java |  8 ++++----
 .../net/consensys/cava/eth/TransactionTest.java    |  8 ++++----
 gradle/spotless.license.java                       | 22 +++++++++++++---------
 io/src/main/java/net/consensys/cava/io/Base64.java |  8 ++++----
 .../java/net/consensys/cava/io/IOConsumer.java     |  8 ++++----
 .../net/consensys/cava/io/NullOutputStream.java    |  8 ++++----
 .../main/java/net/consensys/cava/io/Resources.java |  8 ++++----
 .../main/java/net/consensys/cava/io/Streams.java   |  8 ++++----
 .../java/net/consensys/cava/io/file/Files.java     |  8 ++++----
 .../java/net/consensys/cava/io/Base64Test.java     |  8 ++++----
 .../java/net/consensys/cava/io/ResourcesTest.java  |  8 ++++----
 .../java/net/consensys/cava/io/StreamsTest.java    |  8 ++++----
 .../java/net/consensys/cava/io/file/FilesTest.java |  8 ++++----
 .../cava/junit/BouncyCastleExtension.java          |  8 ++++----
 .../java/net/consensys/cava/junit/LuceneIndex.java |  8 ++++----
 .../consensys/cava/junit/LuceneIndexWriter.java    |  8 ++++----
 .../cava/junit/LuceneIndexWriterExtension.java     | 15 ++++++++-------
 .../java/net/consensys/cava/junit/RedisPort.java   |  8 ++++----
 .../consensys/cava/junit/RedisServerExtension.java |  8 ++++----
 .../net/consensys/cava/junit/TempDirectory.java    |  8 ++++----
 .../cava/junit/TempDirectoryExtension.java         |  8 ++++----
 .../net/consensys/cava/junit/VertxExtension.java   |  8 ++++----
 .../net/consensys/cava/junit/VertxInstance.java    |  8 ++++----
 .../cava/junit/LuceneIndexWriterExtensionTest.java |  9 +++++----
 .../cava/junit/RedisServerExtensionTest.java       |  8 ++++----
 .../cava/junit/TempDirectoryExtensionTest.java     |  8 ++++----
 .../cava/kademlia/KademliaRoutingTable.kt          | 20 ++++++++++++--------
 .../cava/kademlia/KademliaRoutingTableTest.kt      | 20 ++++++++++++--------
 .../cava/kademlia/LogarithmicDistanceTest.kt       | 20 ++++++++++++--------
 .../consensys/cava/kademlia/OrderedInsertTest.kt   | 20 ++++++++++++--------
 .../net/consensys/cava/kv/RedisBytesCodec.java     |  8 ++++----
 .../consensys/cava/kv/InfinispanKeyValueStore.kt   | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/kv/KeyValueStore.kt  | 20 ++++++++++++--------
 .../net/consensys/cava/kv/LevelDBKeyValueStore.kt  | 20 ++++++++++++--------
 .../net/consensys/cava/kv/MapDBKeyValueStore.kt    | 20 ++++++++++++--------
 .../net/consensys/cava/kv/MapKeyValueStore.kt      | 20 ++++++++++++--------
 .../net/consensys/cava/kv/RedisKeyValueStore.kt    | 20 ++++++++++++--------
 .../net/consensys/cava/kv/RocksDBKeyValueStore.kt  | 20 ++++++++++++--------
 .../net/consensys/cava/kv/SQLKeyValueStore.kt      | 20 ++++++++++++--------
 .../net/consensys/cava/kv/KeyValueStoreTest.java   |  8 ++++----
 .../consensys/cava/kv/RedisKeyValueStoreTest.java  |  8 ++++----
 .../net/consensys/cava/kv/KeyValueStoreSpec.kt     | 20 ++++++++++++--------
 .../net/consensys/cava/les/BlockBodiesMessage.kt   | 20 ++++++++++++--------
 .../net/consensys/cava/les/BlockHeadersMessage.kt  | 20 ++++++++++++--------
 .../consensys/cava/les/GetBlockBodiesMessage.kt    | 20 ++++++++++++--------
 .../consensys/cava/les/GetBlockHeadersMessage.kt   | 20 ++++++++++++--------
 .../net/consensys/cava/les/GetReceiptsMessage.kt   | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/les/LESPeerState.kt  | 20 ++++++++++++--------
 .../consensys/cava/les/LESSubProtocolHandler.kt    | 20 ++++++++++++--------
 .../net/consensys/cava/les/LESSubprotocol.kt       | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/les/LightClient.kt   | 20 ++++++++++++--------
 .../net/consensys/cava/les/ReceiptsMessage.kt      | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/les/StatusMessage.kt | 20 ++++++++++++--------
 .../cava/les/LESSubProtocolHandlerTest.kt          | 20 ++++++++++++--------
 .../net/consensys/cava/les/LESSubprotocolTest.kt   | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/les/MessagesTest.kt  | 20 ++++++++++++--------
 .../net/consensys/cava/trie/CompactEncoding.java   |  8 ++++----
 .../kotlin/net/consensys/cava/trie/BranchNode.kt   | 20 ++++++++++++--------
 .../net/consensys/cava/trie/DefaultNodeFactory.kt  | 20 ++++++++++++--------
 .../net/consensys/cava/trie/ExtensionNode.kt       | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/trie/GetVisitor.kt   | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/trie/LeafNode.kt     | 20 ++++++++++++--------
 .../net/consensys/cava/trie/MerklePatriciaTrie.kt  | 20 ++++++++++++--------
 .../net/consensys/cava/trie/MerkleStorage.kt       | 20 ++++++++++++--------
 .../consensys/cava/trie/MerkleStorageException.kt  | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/trie/MerkleTrie.kt   | 20 ++++++++++++--------
 .../main/kotlin/net/consensys/cava/trie/Node.kt    | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/trie/NodeFactory.kt  | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/trie/NodeVisitor.kt  | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/trie/NullNode.kt     | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/trie/PutVisitor.kt   | 20 ++++++++++++--------
 .../net/consensys/cava/trie/RemoveVisitor.kt       | 20 ++++++++++++--------
 .../cava/trie/StoredMerklePatriciaTrie.kt          | 20 ++++++++++++--------
 .../kotlin/net/consensys/cava/trie/StoredNode.kt   | 20 ++++++++++++--------
 .../net/consensys/cava/trie/StoredNodeFactory.kt   | 20 ++++++++++++--------
 .../consensys/cava/trie/CompactEncodingTest.java   |  8 ++++----
 .../cava/trie/MerklePatriciaTrieJavaTest.java      |  8 ++++----
 .../trie/MerklePatriciaTriePerformanceTest.java    |  8 ++++----
 .../trie/StoredMerklePatriciaTrieJavaTest.java     |  8 ++++----
 .../cava/trie/MerklePatriciaTrieKotlinTest.kt      | 20 ++++++++++++--------
 .../trie/StoredMerklePatriciaTrieKotlinTest.kt     | 20 ++++++++++++--------
 .../cava/net/coroutines/CoroutineByteChannel.kt    | 20 ++++++++++++--------
 .../cava/net/coroutines/CoroutineChannelGroup.kt   | 20 ++++++++++++--------
 .../net/coroutines/CoroutineDatagramChannel.kt     | 20 ++++++++++++--------
 .../cava/net/coroutines/CoroutineNetworkChannel.kt | 20 ++++++++++++--------
 .../cava/net/coroutines/CoroutineSelector.kt       | 20 ++++++++++++--------
 .../net/coroutines/CoroutineServerSocketChannel.kt | 20 ++++++++++++--------
 .../cava/net/coroutines/CoroutineSocketChannel.kt  | 20 ++++++++++++--------
 .../cava/net/coroutines/SelectorTest.java          |  8 ++++----
 .../net/coroutines/CoroutineChannelGroupTest.kt    | 20 ++++++++++++--------
 .../net/coroutines/CoroutineDatagramChannelTest.kt | 20 ++++++++++++--------
 .../cava/net/coroutines/CoroutineSelectorTest.kt   | 20 ++++++++++++--------
 .../net/coroutines/CoroutineSocketChannelTest.kt   | 20 ++++++++++++--------
 .../net/tls/ClientFingerprintTrustManager.java     |  8 ++++----
 .../net/tls/DelegatingTrustManagerFactory.java     |  8 ++++----
 .../net/tls/FileBackedFingerprintRepository.java   |  8 ++++----
 .../cava/net/tls/FingerprintRepository.java        |  8 ++++----
 .../net/tls/ServerFingerprintTrustManager.java     |  8 ++++----
 .../cava/net/tls/SingleTrustManagerFactory.java    |  8 ++++----
 .../main/java/net/consensys/cava/net/tls/TLS.java  |  8 ++++----
 .../cava/net/tls/TLSEnvironmentException.java      |  8 ++++----
 .../cava/net/tls/TrustManagerFactories.java        |  8 ++++----
 .../cava/net/tls/TrustManagerFactoryWrapper.java   |  8 ++++----
 .../consensys/cava/net/tls/VertxTrustOptions.java  |  8 ++++----
 .../cava/net/tls/ClientCaOrRecordTest.java         |  8 ++++----
 .../consensys/cava/net/tls/ClientCaOrTofuTest.java |  8 ++++----
 .../cava/net/tls/ClientCaOrWhitelistTest.java      |  8 ++++----
 .../consensys/cava/net/tls/ClientRecordTest.java   |  8 ++++----
 .../net/consensys/cava/net/tls/ClientTofuTest.java |  8 ++++----
 .../cava/net/tls/ClientWhitelistTest.java          |  8 ++++----
 .../tls/FileBackedFingerprintRepositoryTest.java   |  8 ++++----
 .../cava/net/tls/InsecureTrustOptions.java         |  8 ++++----
 .../consensys/cava/net/tls/SecurityTestUtils.java  |  8 ++++----
 .../cava/net/tls/ServerCaOrRecordTest.java         |  8 ++++----
 .../consensys/cava/net/tls/ServerCaOrTofaTest.java |  8 ++++----
 .../cava/net/tls/ServerCaOrWhitelistTest.java      |  8 ++++----
 .../consensys/cava/net/tls/ServerRecordTest.java   |  8 ++++----
 .../net/consensys/cava/net/tls/ServerTofaTest.java |  8 ++++----
 .../cava/net/tls/ServerWhitelistTest.java          |  8 ++++----
 .../java/net/consensys/cava/net/tls/TLSTest.java   |  8 ++++----
 .../cava/plumtree/EphemeralPeerRepository.java     |  8 ++++----
 .../consensys/cava/plumtree/MessageHashing.java    |  8 ++++----
 .../net/consensys/cava/plumtree/MessageSender.java |  8 ++++----
 .../java/net/consensys/cava/plumtree/Peer.java     |  8 ++++----
 .../consensys/cava/plumtree/PeerRepository.java    |  8 ++++----
 .../java/net/consensys/cava/plumtree/State.java    |  8 ++++----
 .../net/consensys/cava/plumtree/StateActor.java    |  8 ++++----
 .../consensys/cava/plumtree/StateActorFactory.java |  8 ++++----
 .../net/consensys/cava/plumtree/StateTest.java     |  8 ++++----
 .../consensys/cava/rlp/AccumulatingRLPWriter.java  |  8 ++++----
 .../consensys/cava/rlp/ByteBufferRLPWriter.java    |  8 ++++----
 .../net/consensys/cava/rlp/BytesRLPReader.java     |  8 ++++----
 .../net/consensys/cava/rlp/BytesRLPWriter.java     |  8 ++++----
 .../consensys/cava/rlp/DelegatingRLPWriter.java    |  8 ++++----
 .../net/consensys/cava/rlp/EndOfRLPException.java  |  8 ++++----
 .../cava/rlp/InvalidRLPEncodingException.java      |  8 ++++----
 .../cava/rlp/InvalidRLPTypeException.java          |  8 ++++----
 rlp/src/main/java/net/consensys/cava/rlp/RLP.java  |  8 ++++----
 .../java/net/consensys/cava/rlp/RLPException.java  |  8 ++++----
 .../java/net/consensys/cava/rlp/RLPReader.java     |  8 ++++----
 .../java/net/consensys/cava/rlp/RLPWriter.java     |  8 ++++----
 .../consensys/cava/rlp/ByteBufferWriterTest.java   |  8 ++++----
 .../net/consensys/cava/rlp/BytesRLPReaderTest.java |  8 ++++----
 .../net/consensys/cava/rlp/BytesRLPWriterTest.java |  8 ++++----
 .../cava/rlpx/EthereumIESEncryptionEngine.java     |  8 ++++----
 .../net/consensys/cava/rlpx/HandshakeMessage.java  |  8 ++++----
 .../cava/rlpx/InitiatorHandshakeMessage.java       |  8 ++++----
 .../consensys/cava/rlpx/InvalidMACException.java   |  8 ++++----
 .../cava/rlpx/MemoryWireConnectionsRepository.java |  8 ++++----
 .../net/consensys/cava/rlpx/RLPxConnection.java    |  8 ++++----
 .../consensys/cava/rlpx/RLPxConnectionFactory.java |  8 ++++----
 .../java/net/consensys/cava/rlpx/RLPxMessage.java  |  8 ++++----
 .../java/net/consensys/cava/rlpx/RLPxService.java  |  8 ++++----
 .../cava/rlpx/ResponderHandshakeMessage.java       |  8 ++++----
 .../cava/rlpx/WireConnectionRepository.java        |  8 ++++----
 .../cava/rlpx/vertx/VertxRLPxService.java          |  8 ++++----
 .../net/consensys/cava/rlpx/wire/Capability.java   |  8 ++++----
 .../rlpx/wire/DefaultSubProtocolIdentifier.java    |  8 ++++----
 .../cava/rlpx/wire/DefaultWireConnection.java      |  8 ++++----
 .../cava/rlpx/wire/DisconnectMessage.java          |  8 ++++----
 .../consensys/cava/rlpx/wire/DisconnectReason.java |  8 ++++----
 .../net/consensys/cava/rlpx/wire/HelloMessage.java |  8 ++++----
 .../net/consensys/cava/rlpx/wire/PingMessage.java  |  8 ++++----
 .../net/consensys/cava/rlpx/wire/PongMessage.java  |  8 ++++----
 .../net/consensys/cava/rlpx/wire/SubProtocol.java  |  8 ++++----
 .../cava/rlpx/wire/SubProtocolHandler.java         |  8 ++++----
 .../cava/rlpx/wire/SubProtocolIdentifier.java      |  8 ++++----
 .../consensys/cava/rlpx/wire/WireConnection.java   |  8 ++++----
 .../cava/rlpx/wire/WireProtocolMessage.java        |  8 ++++----
 .../cava/rlpx/RLPxConnectionFactoryTest.java       |  8 ++++----
 .../cava/rlpx/vertx/VertxAcceptanceTest.java       |  8 ++++----
 .../cava/rlpx/vertx/VertxRLPxServiceTest.java      |  8 ++++----
 .../cava/rlpx/wire/DefaultWireConnectionTest.java  |  8 ++++----
 .../cava/rlpx/wire/DisconnectMessageTest.java      |  8 ++++----
 .../consensys/cava/rlpx/wire/HelloMessageTest.java |  8 ++++----
 .../net/consensys/cava/rlpx/wire/PingPongTest.java |  8 ++++----
 .../wire/RLPxConnectionMessageExchangeTest.java    |  8 ++++----
 .../cava/scuttlebutt/discovery/LocalIdentity.java  |  8 ++++----
 .../ScuttlebuttLocalDiscoveryService.java          |  8 ++++----
 .../scuttlebutt/discovery/LocalIdentityTest.java   |  8 ++++----
 .../ScuttlebuttLocalDiscoveryServiceTest.java      |  8 ++++----
 .../scuttlebutt/handshake/HandshakeException.java  |  8 ++++----
 .../SecureScuttlebuttHandshakeClient.java          |  8 ++++----
 .../SecureScuttlebuttHandshakeServer.java          |  8 ++++----
 .../handshake/SecureScuttlebuttStream.java         |  8 ++++----
 .../handshake/SecureScuttlebuttStreamClient.java   |  8 ++++----
 .../handshake/SecureScuttlebuttStreamServer.java   |  8 ++++----
 .../scuttlebutt/handshake/StreamException.java     |  8 ++++----
 .../scuttlebutt/handshake/vertx/ClientHandler.java |  8 ++++----
 .../handshake/vertx/ClientHandlerFactory.java      |  8 ++++----
 .../vertx/SecureScuttlebuttVertxClient.java        |  8 ++++----
 .../vertx/SecureScuttlebuttVertxServer.java        |  8 ++++----
 .../scuttlebutt/handshake/vertx/ServerHandler.java |  8 ++++----
 .../handshake/vertx/ServerHandlerFactory.java      |  8 ++++----
 .../SecureScuttlebuttHandshakeClientTest.java      |  8 ++++----
 .../handshake/SecureScuttlebuttStreamTest.java     |  8 ++++----
 .../handshake/vertx/VertxIntegrationTest.java      |  8 ++++----
 .../consensys/cava/scuttlebutt/rpc/RPCCodec.java   |  8 ++++----
 .../consensys/cava/scuttlebutt/rpc/RPCFlag.java    |  8 ++++----
 .../consensys/cava/scuttlebutt/rpc/RPCMessage.java |  8 ++++----
 .../scuttlebutt/rpc/PatchworkIntegrationTest.java  |  8 ++++----
 .../cava/scuttlebutt/rpc/RPCEncodingTest.java      |  8 ++++----
 .../cava/scuttlebutt/rpc/RPCFlagTest.java          |  8 ++++----
 .../cava/scuttlebutt/Ed25519KeyPairIdentity.java   |  8 ++++----
 .../cava/scuttlebutt/Ed25519PublicKeyIdentity.java |  8 ++++----
 .../net/consensys/cava/scuttlebutt/Identity.java   |  8 ++++----
 .../net/consensys/cava/scuttlebutt/Invite.java     |  8 ++++----
 .../cava/scuttlebutt/SECP256K1KeyPairIdentity.java |  8 ++++----
 .../scuttlebutt/SECP256K1PublicKeyIdentity.java    |  8 ++++----
 .../consensys/cava/scuttlebutt/IdentityTest.java   |  8 ++++----
 .../net/consensys/cava/scuttlebutt/InviteTest.java |  8 ++++----
 .../consensys/cava/ssz/ByteBufferSSZWriter.java    |  8 ++++----
 .../net/consensys/cava/ssz/BytesSSZReader.java     |  8 ++++----
 .../net/consensys/cava/ssz/BytesSSZWriter.java     |  8 ++++----
 .../net/consensys/cava/ssz/EndOfSSZException.java  |  8 ++++----
 .../cava/ssz/InvalidSSZTypeException.java          |  8 ++++----
 ssz/src/main/java/net/consensys/cava/ssz/SSZ.java  |  8 ++++----
 .../java/net/consensys/cava/ssz/SSZException.java  |  8 ++++----
 .../java/net/consensys/cava/ssz/SSZReader.java     |  8 ++++----
 .../java/net/consensys/cava/ssz/SSZWriter.java     |  8 ++++----
 .../cava/ssz/experimental/BytesSSZReader.kt        | 20 ++++++++++++--------
 .../cava/ssz/experimental/BytesSSZWriter.kt        | 20 ++++++++++++--------
 .../net/consensys/cava/ssz/experimental/SSZ.kt     | 20 ++++++++++++--------
 .../consensys/cava/ssz/experimental/SSZReader.kt   | 20 ++++++++++++--------
 .../consensys/cava/ssz/experimental/SSZWriter.kt   | 20 ++++++++++++--------
 .../consensys/cava/ssz/ByteBufferWriterTest.java   |  8 ++++----
 .../net/consensys/cava/ssz/BytesSSZReaderTest.java |  8 ++++----
 .../net/consensys/cava/ssz/BytesSSZWriterTest.java |  8 ++++----
 .../net/consensys/cava/ssz/HashTreeRootTest.java   |  8 ++++----
 .../net/consensys/cava/ssz/experimental/SSZTest.kt | 20 ++++++++++++--------
 .../cava/toml/AccumulatingErrorListener.java       |  8 ++++----
 .../java/net/consensys/cava/toml/ArrayVisitor.java |  8 ++++----
 .../net/consensys/cava/toml/ErrorReporter.java     |  8 ++++----
 .../consensys/cava/toml/InlineTableVisitor.java    |  8 ++++----
 .../net/consensys/cava/toml/JsonSerializer.java    |  8 ++++----
 .../java/net/consensys/cava/toml/KeyVisitor.java   |  8 ++++----
 .../java/net/consensys/cava/toml/LineVisitor.java  |  8 ++++----
 .../net/consensys/cava/toml/LocalDateVisitor.java  |  8 ++++----
 .../net/consensys/cava/toml/LocalTimeVisitor.java  |  8 ++++----
 .../net/consensys/cava/toml/MutableTomlArray.java  |  8 ++++----
 .../net/consensys/cava/toml/MutableTomlTable.java  |  8 ++++----
 .../main/java/net/consensys/cava/toml/Parser.java  |  8 ++++----
 .../consensys/cava/toml/QuotedStringVisitor.java   |  8 ++++----
 .../java/net/consensys/cava/toml/TokenName.java    |  8 ++++----
 .../main/java/net/consensys/cava/toml/Toml.java    |  8 ++++----
 .../java/net/consensys/cava/toml/TomlArray.java    |  8 ++++----
 .../cava/toml/TomlInvalidTypeException.java        |  8 ++++----
 .../net/consensys/cava/toml/TomlParseError.java    |  8 ++++----
 .../net/consensys/cava/toml/TomlParseResult.java   |  8 ++++----
 .../java/net/consensys/cava/toml/TomlPosition.java |  8 ++++----
 .../java/net/consensys/cava/toml/TomlTable.java    |  8 ++++----
 .../java/net/consensys/cava/toml/TomlType.java     |  8 ++++----
 .../java/net/consensys/cava/toml/TomlVersion.java  |  8 ++++----
 .../java/net/consensys/cava/toml/ValueVisitor.java |  8 ++++----
 .../net/consensys/cava/toml/ZoneOffsetVisitor.java |  8 ++++----
 .../consensys/cava/toml/MutableTomlArrayTest.java  |  8 ++++----
 .../consensys/cava/toml/MutableTomlTableTest.java  |  8 ++++----
 .../net/consensys/cava/toml/TokenNameTest.java     |  8 ++++----
 .../java/net/consensys/cava/toml/TomlTest.java     |  8 ++++----
 .../cava/units/bigints/BaseUInt256Value.java       |  8 ++++----
 .../cava/units/bigints/BaseUInt384Value.java       |  8 ++++----
 .../cava/units/bigints/BaseUInt64Value.java        |  8 ++++----
 .../net/consensys/cava/units/bigints/UInt256.java  |  8 ++++----
 .../cava/units/bigints/UInt256Domain.java          |  8 ++++----
 .../consensys/cava/units/bigints/UInt256Value.java |  8 ++++----
 .../cava/units/bigints/UInt256ValueDomain.java     |  8 ++++----
 .../net/consensys/cava/units/bigints/UInt256s.java |  8 ++++----
 .../net/consensys/cava/units/bigints/UInt384.java  |  8 ++++----
 .../cava/units/bigints/UInt384Domain.java          |  8 ++++----
 .../consensys/cava/units/bigints/UInt384Value.java |  8 ++++----
 .../cava/units/bigints/UInt384ValueDomain.java     |  8 ++++----
 .../net/consensys/cava/units/bigints/UInt384s.java |  8 ++++----
 .../net/consensys/cava/units/bigints/UInt64.java   |  8 ++++----
 .../consensys/cava/units/bigints/UInt64Domain.java |  8 ++++----
 .../consensys/cava/units/bigints/UInt64Value.java  |  8 ++++----
 .../cava/units/bigints/UInt64ValueDomain.java      |  8 ++++----
 .../net/consensys/cava/units/bigints/UInt64s.java  |  8 ++++----
 .../net/consensys/cava/units/ethereum/Gas.java     |  8 ++++----
 .../net/consensys/cava/units/ethereum/Wei.java     |  8 ++++----
 .../cava/units/bigints/BaseUInt256ValueTest.java   |  8 ++++----
 .../cava/units/bigints/BaseUInt384ValueTest.java   |  8 ++++----
 .../cava/units/bigints/BaseUInt64ValueTest.java    |  8 ++++----
 .../consensys/cava/units/bigints/UInt256Test.java  |  8 ++++----
 .../consensys/cava/units/bigints/UInt384Test.java  |  8 ++++----
 .../consensys/cava/units/bigints/UInt64Test.java   |  8 ++++----
 .../net/consensys/cava/units/ethereum/GasTest.java |  8 ++++----
 .../net/consensys/cava/units/ethereum/WeiTest.java |  8 ++++----
 460 files changed, 2608 insertions(+), 2234 deletions(-)

diff --git a/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
index 25c186e..7c19c7a 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
index 1fa0439..0255817 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
index babc70c..e609f41 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
index 6f64a17..4ec8dbe 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
index 2563cc3..6020c82 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
index f2be78f..0d4ec47 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
index 26607b4..c1b02b0 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
index 91c1df9..23561bc 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
index da6a6ef..571ac90 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
index ae00c9b..518e5cf 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java b/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
index 13b78f9..6a14bd7 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
index b678ce9..39cd362 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
index 061fddc..c29a60a 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
index 62dcaeb..9f3198d 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
index 278414f..dbfec11 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
index 7e8dfe7..0086494 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
index 8474e0d..a932521 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
index d5ead47..0cf5096 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
index a716e06..25bbaeb 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
index 5fbb600..7c5cac8 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
index e2f6e4d..b190ef4 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
index 2d6e521..0067529 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
index e9717cf..e2363c6 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
index 4b5f891..19b0058 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
index 801e94c..fc90de4 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
index f7b2a20..945f017 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
index 1057610..744590a 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
index 83fce73..db43f22 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java b/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
index 28f2ab6..c42aa9c 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java b/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
index bde9bdb..e3114a8 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
index 7236b88..3ccd344 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java b/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
index 993135b..b387ba5 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
index 38d26fd..b4489b1 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
index 2033576..4969918 100644
--- a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.concurrent.coroutines
 
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
index 9508d69..f3b324c 100644
--- a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.concurrent.coroutines
 
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
index 1723644..0dfd10d 100644
--- a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.concurrent.coroutines
 
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
index 49d92a2..941bfe6 100644
--- a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.concurrent.coroutines
 
diff --git a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
index 07899fb..61ab68c 100644
--- a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
+++ b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.concurrent.coroutines
 
diff --git a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
index c6f71f8..d231fac 100644
--- a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
+++ b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.concurrent.coroutines
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
index 77b2471..c495ce6 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java
index d3214e3..afef9f4 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java b/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java
index 6b6eba2..65682bf 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java b/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java
index 49fe75e..5b0cb90 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java b/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java
index 0665519..f1a7b06 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java b/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java
index e4ae055..8d17b8e 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java b/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java
index 37bc55c..1faf6bc 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java b/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java
index 2e4cbbd..950c8d7 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java b/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java
index 5163714..0c5e02e 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java
index ee08bb2..4019b10 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java
index 17fbb89..ff67695 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java
index 002c6bf..9680b8f 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java
index 2a58b53..83881b9 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java
index 99837ae..e190859 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/Configuration.java b/config/src/main/java/net/consensys/cava/config/Configuration.java
index 83aed67..46a64c9 100644
--- a/config/src/main/java/net/consensys/cava/config/Configuration.java
+++ b/config/src/main/java/net/consensys/cava/config/Configuration.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationError.java b/config/src/main/java/net/consensys/cava/config/ConfigurationError.java
index 646b8b1..1d81a9d 100644
--- a/config/src/main/java/net/consensys/cava/config/ConfigurationError.java
+++ b/config/src/main/java/net/consensys/cava/config/ConfigurationError.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java b/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java
index 5fce1c8..75a0f28 100644
--- a/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java
+++ b/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java b/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java
index 4b2a70e..9de3ac3 100644
--- a/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java
+++ b/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/DocumentPosition.java b/config/src/main/java/net/consensys/cava/config/DocumentPosition.java
index e7ccfbf..aca2edf 100644
--- a/config/src/main/java/net/consensys/cava/config/DocumentPosition.java
+++ b/config/src/main/java/net/consensys/cava/config/DocumentPosition.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java b/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java
index 020152b..6f1bb6b 100644
--- a/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java
+++ b/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java b/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java
index d81e5ec..5e2fe46 100644
--- a/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java
+++ b/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java b/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java
index 6ed89ff..69558b6 100644
--- a/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java
+++ b/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/PropertyValidator.java b/config/src/main/java/net/consensys/cava/config/PropertyValidator.java
index fa03b17..c09e1d4 100644
--- a/config/src/main/java/net/consensys/cava/config/PropertyValidator.java
+++ b/config/src/main/java/net/consensys/cava/config/PropertyValidator.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/PropertyValidators.java b/config/src/main/java/net/consensys/cava/config/PropertyValidators.java
index e576e6b..4bb1d1f 100644
--- a/config/src/main/java/net/consensys/cava/config/PropertyValidators.java
+++ b/config/src/main/java/net/consensys/cava/config/PropertyValidators.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/Schema.java b/config/src/main/java/net/consensys/cava/config/Schema.java
index 309df3a..a63e165 100644
--- a/config/src/main/java/net/consensys/cava/config/Schema.java
+++ b/config/src/main/java/net/consensys/cava/config/Schema.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java b/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java
index 5fe2f69..0e0d9e6 100644
--- a/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java
+++ b/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java b/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java
index 5db73b4..622f20d 100644
--- a/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java
+++ b/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/main/java/net/consensys/cava/config/TomlSerializer.java b/config/src/main/java/net/consensys/cava/config/TomlSerializer.java
index 68f17ec..72c9e5c 100644
--- a/config/src/main/java/net/consensys/cava/config/TomlSerializer.java
+++ b/config/src/main/java/net/consensys/cava/config/TomlSerializer.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java b/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java
index b32e06a..17e44cf 100644
--- a/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java
+++ b/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java b/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java
index 438cfab..e5ad482 100644
--- a/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java
+++ b/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java b/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java
index 3b46833..a5acb3f 100644
--- a/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java
+++ b/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/Hash.java b/crypto/src/main/java/net/consensys/cava/crypto/Hash.java
index e660343..27970f9 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/Hash.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/Hash.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java b/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java
index 641b297..5fe6c31 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java b/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java
index 3d0b0ee..42a2758 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java
index f5e84b0..ab5d4f4 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java
index a867f60..e1841b7 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -12,11 +12,10 @@
  */
 package org.apache.tuweni.crypto.mikuli;
 
-import org.apache.tuweni.bytes.Bytes;
-
 import org.apache.milagro.amcl.BLS381.ECP;
 import org.apache.milagro.amcl.BLS381.ECP2;
 import org.apache.milagro.amcl.BLS381.MPIN;
+import org.apache.tuweni.bytes.Bytes;
 
 /*
  * Adapted from the ConsenSys/mikuli (Apache 2 License) implementation:
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java
index e472f83..550bc29 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -12,13 +12,12 @@
  */
 package org.apache.tuweni.crypto.mikuli;
 
+import org.apache.milagro.amcl.BLS381.BIG;
+import org.apache.milagro.amcl.BLS381.ECP;
 import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 
-import org.apache.milagro.amcl.BLS381.BIG;
-import org.apache.milagro.amcl.BLS381.ECP;
-
 /**
  * G1 is a subgroup of an elliptic curve whose points are elements of the finite field Fp - simple numbers mod some
  * prime p. The curve is defined by: y^2 = x^3 + 4
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java
index fafb509..c8c7f8f 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -12,13 +12,12 @@
  */
 package org.apache.tuweni.crypto.mikuli;
 
+import org.apache.milagro.amcl.BLS381.BIG;
+import org.apache.milagro.amcl.BLS381.ECP2;
 import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 
-import org.apache.milagro.amcl.BLS381.BIG;
-import org.apache.milagro.amcl.BLS381.ECP2;
-
 /**
  * G2 is the subgroup of elliptic curve similar to G1 and the points are identical except for where they are elements of
  * the extension field Fq12.
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java
index e19bf37..a7ef341 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -12,10 +12,10 @@
  */
 package org.apache.tuweni.crypto.mikuli;
 
-import java.util.Objects;
-
 import org.apache.milagro.amcl.BLS381.FP12;
 
+import java.util.Objects;
+
 /**
  * GT is the object that holds the result of the pairing operation. Points in GT are elements of Fq12.
  */
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java
index 30a67f2..b98fd20 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java
index 6ea890b..a87359a 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java
index 5ba81ff..7362b88 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java
index ae2de0a..9a437b9 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -12,10 +12,10 @@
  */
 package org.apache.tuweni.crypto.mikuli;
 
-import java.util.Objects;
-
 import org.apache.milagro.amcl.BLS381.BIG;
 
+import java.util.Objects;
+
 /**
  * This class represents an ordinary scalar value.
  */
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java
index 2bbb86c..1ef2b94 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -14,12 +14,11 @@ package org.apache.tuweni.crypto.mikuli;
 
 import static org.apache.milagro.amcl.BLS381.BIG.MODBYTES;
 
+import org.apache.milagro.amcl.BLS381.BIG;
 import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 
-import org.apache.milagro.amcl.BLS381.BIG;
-
 /**
  * This class represents a BLS12-381 private key.
  */
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java
index 0a37427..ed7e2ec 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java
index 14d66a9..8146b80 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java
index 1ce47c2..c5b58fd 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java
index ed28dd6..7d5c37e 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java
index eb21f25..d163376 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java
index bbabb8e..9df2dc8 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java
index e1cba0c..2ec36b2 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java
index 4ae6ff0..535a997 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java
index d06512a..4a57ee6 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java
index 16d8e35..3ee9ddb 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java
index 4930efb..a6005b2 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java
index 531618a..bc4aec4 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java
index 9c7c3eb..7d655ec 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java
index 25437ef..f4ca923 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java
index 117c931..71439fd 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java
index 1890d74..e604ec2 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java
index 54471a1..7496fb3 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java
index 9c92401..e912296 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java
index 952c1ca..39f16f6 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java
index 4583d79..6f595e9 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java
index 2b14fcf..95b12a7 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java
index 1da6361..c294e0c 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java
index b443b14..ac0a0bd 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java
index 163b7e3..e76d587 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java
index 87800dd..f34d422 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java
index 982c437..8b54098 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java
index 4af499b..e63e5fe 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java b/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java
index 7bcd54a..87afe6e 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java b/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java
index 3cc61af..f8e3729 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java b/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java
index 266731c..82b4265 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java
index b84da6e..f63f006 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java
index b47c550..2a0e01d 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java
index 2053b73..35a8da3 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java
index d6e0217..950e9ae 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java
index 84dec45..5feb6c3 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java
index 591ae07..cc053c5 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java
index 2e6947a..9e5193e 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java
index 597bd70..eb54da1 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java
index 9107aa2..07c3791 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java
index b6a1f6c..243cb25 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java
index edf0fc5..6fcddb1 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java
index 899c6df..7895533 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java
index 46e542f..4006cb6 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java
index 79d6a56..c1de822 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java
index bb79c0a..2245316 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java
index 42761cc..25715b5 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java
index 672c5e1..4ffadeb 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt
index aeac65f..8f42bed 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt
index 446b689..793eb91 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt
index 82d312b..a5effb5 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt
index f57b129..225a534 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt
index a316be2..f5e38d1 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt
index 89e354a..a46bad1 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt
index 6a569dd..55b91af 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt
index 4b81fa6..d281558 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt
index 464a3d3..1271efc 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt
index 4c5a771..a6dc884 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java b/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java
index 512a6d8..bcaae43 100644
--- a/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java
+++ b/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt
index a32e2cc..cd0c7dc 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt
index b142a48..174c608 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt
index 6da2e40..9340006 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt
index 87d3d2f..bd538e3 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt
index bcb222c..7d9e567 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt
index 32705b4..5334cca 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt
index f5ac011..82b0f73 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.devp2p
 
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java
index 036bec8..86798f8 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java
index 1d0739c..4988b83 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java
index 69aee9d..0843529 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java
index 11ae68f..3925f28 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java
index e9abadc..6f68edc 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt
index afe6279..a1c4ca5 100644
--- a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt
+++ b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.eth.repository
 
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt
index 7ab7f7e..93067d6 100644
--- a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt
+++ b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.eth.repository
 
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt
index a899b62..1012256 100644
--- a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt
+++ b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.eth.repository
 
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt
index b574096..513c688 100644
--- a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt
+++ b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.eth.repository
 
diff --git a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt b/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt
index fa9b3d3..e2a1dc3 100644
--- a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt
+++ b/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.eth.repository
 
diff --git a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt b/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt
index 0ab22ee..1b0caf3 100644
--- a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt
+++ b/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.eth.repository
 
diff --git a/eth/src/main/java/net/consensys/cava/eth/Address.java b/eth/src/main/java/net/consensys/cava/eth/Address.java
index ce9ece3..4e9d37f 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Address.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Address.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/main/java/net/consensys/cava/eth/Block.java b/eth/src/main/java/net/consensys/cava/eth/Block.java
index 3629d7e..d399370 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Block.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Block.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/main/java/net/consensys/cava/eth/BlockBody.java b/eth/src/main/java/net/consensys/cava/eth/BlockBody.java
index 418f4c7..77cf839 100644
--- a/eth/src/main/java/net/consensys/cava/eth/BlockBody.java
+++ b/eth/src/main/java/net/consensys/cava/eth/BlockBody.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java b/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java
index 03436fe..118d3de 100644
--- a/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java
+++ b/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/main/java/net/consensys/cava/eth/Hash.java b/eth/src/main/java/net/consensys/cava/eth/Hash.java
index 774a44c..236bf58 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Hash.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Hash.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/main/java/net/consensys/cava/eth/Log.java b/eth/src/main/java/net/consensys/cava/eth/Log.java
index a89d91f..9f3ee0e 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Log.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Log.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java b/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java
index 47e8dad..4779357 100644
--- a/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java
+++ b/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/main/java/net/consensys/cava/eth/Transaction.java b/eth/src/main/java/net/consensys/cava/eth/Transaction.java
index 7058444..c9f0de2 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Transaction.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Transaction.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java b/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java
index d37bbe0..b79f9be 100644
--- a/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java
+++ b/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java b/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java
index 9c43640..b1aba5a 100644
--- a/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java b/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java
index cc56aae..9cd6753 100644
--- a/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockTest.java b/eth/src/test/java/net/consensys/cava/eth/BlockTest.java
index 232a007..210bf53 100644
--- a/eth/src/test/java/net/consensys/cava/eth/BlockTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/BlockTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/test/java/net/consensys/cava/eth/LogTest.java b/eth/src/test/java/net/consensys/cava/eth/LogTest.java
index 9ceab83..fe53172 100644
--- a/eth/src/test/java/net/consensys/cava/eth/LogTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/LogTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java b/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java
index ee5c3d0..2f35dc6 100644
--- a/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java b/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java
index 299154e..ad03f57 100644
--- a/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java b/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java
index 3962550..4a0d189 100644
--- a/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/gradle/spotless.license.java b/gradle/spotless.license.java
index c894c92..f974c9a 100644
--- a/gradle/spotless.license.java
+++ b/gradle/spotless.license.java
@@ -1,12 +1,16 @@
 /*
- * Copyright $YEAR ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
\ No newline at end of file
diff --git a/io/src/main/java/net/consensys/cava/io/Base64.java b/io/src/main/java/net/consensys/cava/io/Base64.java
index 521a61b..4419634 100644
--- a/io/src/main/java/net/consensys/cava/io/Base64.java
+++ b/io/src/main/java/net/consensys/cava/io/Base64.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/main/java/net/consensys/cava/io/IOConsumer.java b/io/src/main/java/net/consensys/cava/io/IOConsumer.java
index 3ba9bbc..282590d 100644
--- a/io/src/main/java/net/consensys/cava/io/IOConsumer.java
+++ b/io/src/main/java/net/consensys/cava/io/IOConsumer.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/main/java/net/consensys/cava/io/NullOutputStream.java b/io/src/main/java/net/consensys/cava/io/NullOutputStream.java
index c4254b6..e9ea1ec 100644
--- a/io/src/main/java/net/consensys/cava/io/NullOutputStream.java
+++ b/io/src/main/java/net/consensys/cava/io/NullOutputStream.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/main/java/net/consensys/cava/io/Resources.java b/io/src/main/java/net/consensys/cava/io/Resources.java
index 8c37c82..4f92651 100644
--- a/io/src/main/java/net/consensys/cava/io/Resources.java
+++ b/io/src/main/java/net/consensys/cava/io/Resources.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/main/java/net/consensys/cava/io/Streams.java b/io/src/main/java/net/consensys/cava/io/Streams.java
index d8f3726..3dc17c7 100644
--- a/io/src/main/java/net/consensys/cava/io/Streams.java
+++ b/io/src/main/java/net/consensys/cava/io/Streams.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/main/java/net/consensys/cava/io/file/Files.java b/io/src/main/java/net/consensys/cava/io/file/Files.java
index d342054..f65a81e 100644
--- a/io/src/main/java/net/consensys/cava/io/file/Files.java
+++ b/io/src/main/java/net/consensys/cava/io/file/Files.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/test/java/net/consensys/cava/io/Base64Test.java b/io/src/test/java/net/consensys/cava/io/Base64Test.java
index 3e277d4..01a925d 100644
--- a/io/src/test/java/net/consensys/cava/io/Base64Test.java
+++ b/io/src/test/java/net/consensys/cava/io/Base64Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/test/java/net/consensys/cava/io/ResourcesTest.java b/io/src/test/java/net/consensys/cava/io/ResourcesTest.java
index 551481f..1bf6644 100644
--- a/io/src/test/java/net/consensys/cava/io/ResourcesTest.java
+++ b/io/src/test/java/net/consensys/cava/io/ResourcesTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/test/java/net/consensys/cava/io/StreamsTest.java b/io/src/test/java/net/consensys/cava/io/StreamsTest.java
index 662255c..1b767e2 100644
--- a/io/src/test/java/net/consensys/cava/io/StreamsTest.java
+++ b/io/src/test/java/net/consensys/cava/io/StreamsTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/io/src/test/java/net/consensys/cava/io/file/FilesTest.java b/io/src/test/java/net/consensys/cava/io/file/FilesTest.java
index 611ee30..26b63a1 100644
--- a/io/src/test/java/net/consensys/cava/io/file/FilesTest.java
+++ b/io/src/test/java/net/consensys/cava/io/file/FilesTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java b/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java
index af88b86..f86eeb6 100644
--- a/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java b/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java
index 3aacea4..6db7ab5 100644
--- a/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java
+++ b/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java b/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java
index 3576a1a..f852d24 100644
--- a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java
+++ b/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java b/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java
index d9a4dc6..6048793 100644
--- a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -12,14 +12,15 @@
  */
 package org.apache.tuweni.junit;
 
-import java.io.IOException;
-import java.io.UncheckedIOException;
-
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.store.ByteBuffersDirectory;
 import org.apache.lucene.store.Directory;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+
 import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.api.extension.ParameterContext;
diff --git a/junit/src/main/java/net/consensys/cava/junit/RedisPort.java b/junit/src/main/java/net/consensys/cava/junit/RedisPort.java
index e80deb2..51e24bf 100644
--- a/junit/src/main/java/net/consensys/cava/junit/RedisPort.java
+++ b/junit/src/main/java/net/consensys/cava/junit/RedisPort.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java b/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java
index 198f228..fab43e7 100644
--- a/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java b/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java
index 96b88c3..90f4a8d 100644
--- a/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java
+++ b/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java b/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java
index 5a09cea..4ea6aaf 100644
--- a/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java b/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java
index fc6f133..65ef8ef 100644
--- a/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java b/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java
index 6414404..d447aa6 100644
--- a/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java
+++ b/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java b/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java
index beb9298..4615bd4 100644
--- a/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java
+++ b/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -18,6 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.store.Directory;
+
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
diff --git a/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java b/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java
index e94e228..03e4d84 100644
--- a/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java
+++ b/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java b/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java
index ef7e31e..c86a1ed 100644
--- a/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java
+++ b/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt b/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt
index 6efd83f..2299bb1 100644
--- a/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt
+++ b/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kademlia
 
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt
index 862dbdd..4d5f10b 100644
--- a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt
+++ b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kademlia
 
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt
index 9d3c02d..0780695 100644
--- a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt
+++ b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kademlia
 
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt
index e915abb..3571cd8 100644
--- a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt
+++ b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kademlia
 
diff --git a/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java b/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java
index 000fafc..ae611e2 100644
--- a/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java
+++ b/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt
index 4dca781..0a8eab4 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt
index 7a447e5..2ca24e0 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt
index b3d76cc..4513dd0 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt
index 44862da..d7934be 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt
index 7989ee7..bf0f622 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt
index 3636199..3724d1c 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt
index 21d0bbc..a3dac84 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt
index fa2e035..6f5b2ed 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java b/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java
index f1671ee..202d58b 100644
--- a/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java
+++ b/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java b/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java
index c31e8e9..c218a65 100644
--- a/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java
+++ b/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt b/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt
index 585c7ca..1c46165 100644
--- a/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt
+++ b/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.kv
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt
index 44fc7cf..3136b20 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt
index 81402cc..7ea34cd 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt
index f009c45..0ae3d73 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt
index 532b330..5383deb 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt
index 4d4a3ff..d6a9b5f 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt b/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt
index b865026..fe1935d 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt b/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt
index fdc25b9..1548573 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt b/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt
index 9b2b643..28eb42c 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt b/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt
index 11d544f..75394aa 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt
index e0c2a07..cc6c601 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt
index ade38b2..e36931a 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt b/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt
index ffda803..0c40377 100644
--- a/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt
+++ b/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt b/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt
index ed7283d..a3438b9 100644
--- a/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt
+++ b/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt b/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt
index 5ef5f99..27e68fb 100644
--- a/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt
+++ b/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2019 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.les
 
diff --git a/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java b/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java
index 863bbcd..f606b1f 100644
--- a/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java
+++ b/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt
index 8433ec5..223fe39 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt
index c01fb3d..a9342cb 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt
index fac849d..597a02c 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt
index b5787d8..7bc5df3 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt
index 9f739f6..81e82d3 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt
index fb7a617..2a46d60 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt
index e1da35d..1f5ad30 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt
index 26eb23f..ae6fc4c 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt
index 25317c0..6696bf7 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt
index 39e746a..42209b2 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt
index 138067c..48be691 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt
index 1ebd1f3..c874f54 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt
index f1f54b4..c0961db 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt
index 9f4bbec..c466dc6 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt
index fc78951..b5e50c9 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt
index 5932bf7..216d1a2 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt
index 3567e89..6d6868c 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt
index 8fadf86..c313395 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java b/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java
index 05c95e2..2ab0446 100644
--- a/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java
+++ b/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java b/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java
index 0191945..b752ffb 100644
--- a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java
+++ b/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java b/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java
index bcacfac..cc6dbdd 100644
--- a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java
+++ b/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java b/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java
index b75fd2b..5e3daf6 100644
--- a/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java
+++ b/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt b/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt
index 1573044..45c5902 100644
--- a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt
+++ b/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt b/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt
index ccd64c1..3b510f5 100644
--- a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt
+++ b/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.trie
 
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt
index 55766d2..41d87f6 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt
index c4ac4f3..f0bb475 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt
index 73eba14..7563cac 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt
index ff82a42..9a6788f 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt
index 82acf44..13cb285 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt
index 3ee3dd6..6eb24e6 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt
index 11141c4..41ed43a 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java b/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java
index 3e2ed10..7df159c 100644
--- a/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java
+++ b/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt
index 630087b..a25b8b4 100644
--- a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt
+++ b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt
index 3a8d0a7..b8acdaa 100644
--- a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt
+++ b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt
index e1a948e..63c533e 100644
--- a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt
+++ b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt
index 7764abf..559059a 100644
--- a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt
+++ b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.net.coroutines
 
diff --git a/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java b/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java
index dc8f365..d701b51 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java b/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java
index 68bf5ab..2f5e0ed 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java b/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java
index fb75c77..3f39bf4 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java b/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java
index 952b26c..927a585 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java b/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java
index c1270da..174d04c 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java b/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java
index 2f9c820..e6f633b 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TLS.java b/net/src/main/java/net/consensys/cava/net/tls/TLS.java
index d81b7dd..b90fadf 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/TLS.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/TLS.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java b/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java
index 91d0202..d84cc06 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java b/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java
index ccb22cf..2062f1d 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java b/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java
index 642a9fd..cede1e4 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java b/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java
index 35156c1..cc64b02 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java
index 9d8b0a8..8026ff6 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java
index 421ca68..d7bbfc4 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java
index 21c0ce0..26f42de 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java
index b34d1fd..6f46429 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java
index 12ab3cc..b0764f5 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java
index e436d37..9067fba 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java b/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java
index 9edf535..b9731d5 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java b/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java
index 04a434f..18cdfb9 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java b/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java
index 40e60e0..6057e62 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java
index ffb87d2..312e36b 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java
index eca35f1..2776d96 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java
index ac54cf7..9c44c04 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java
index d0a919a..b9ba0c9 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java
index 7ba3124..d268ab8 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java
index 72c9e75..3cd226d 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java b/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java
index e583819..52288e5 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java b/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java
index 529ea63..f75c2d8 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java b/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java
index 1026507..3257c61 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java b/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java
index bd3a100..01aac1a 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java b/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java
index 652daa7..bf42d86 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java b/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java
index 057e8a6..9f0419c 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/State.java b/plumtree/src/main/java/net/consensys/cava/plumtree/State.java
index 0e5e569..36ecd37 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/State.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/State.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java b/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java
index b4c4350..dc5029d 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java b/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java
index d83ed72..61d076b 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java b/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java
index a70b91f..ef4cade 100644
--- a/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java
+++ b/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java
index a63985b..3c903c9 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java
index 6d8b9a5..9a646ab 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java b/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java
index 2158dd4..d96b012 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java
index be80f68..ed658b5 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java
index 4d8fb68..252c258 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java b/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java
index 8874067..88648e6 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java b/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java
index 4963021..9d872d7 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java b/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java
index fc832b6..dc512e4 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLP.java b/rlp/src/main/java/net/consensys/cava/rlp/RLP.java
index 593f2c8..39b0e92 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/RLP.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/RLP.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java b/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java
index 956b890..ce22a59 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java b/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java
index 259b0df..f9cc643 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java
index 0a3fb43..b7675af 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java b/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java
index 226177c..3597317 100644
--- a/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java
+++ b/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java b/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java
index 5df20a4..dfed5e0 100644
--- a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java
+++ b/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java b/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java
index cf6cc72..24b6a0b 100644
--- a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java
+++ b/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java b/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java
index bb7afe2..20c59cf 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java
index 29c9d9a..253244a 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java
index ef5e601..63ea49b 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java b/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java
index 20fd4a5..d488bde 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java b/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java
index 7c2ba46..d80cd52 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java
index 0bba653..1cb7a47 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java
index 2c7ab36..2b4be34 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java
index 5e47aed..dc87eaf 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java
index 72d2603..f4ecce9 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java
index b0343e1..fceafb0 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java b/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java
index 45827be..beb9240 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java b/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java
index 2ecb989..a5bb2f8 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java
index e763418..b82b5df 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java
index adaa68f..c67447d 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java
index 1c64e26..628d5b5 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java
index 2d3b2ad..fdb1f0f 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java
index fe1b959..b44b446 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java
index 06b9f2a..823763d 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java
index 5edd7e3..5b01c6b 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java
index 3b955b1..1239ef1 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java
index aea446b..535a478 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java
index 4018c75..b9fe122 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java
index 7d11c67..0daf1d9 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java
index f9376af..3efeda7 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java
index e5e87e4..532100f 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java
index ec38ae6..adf3d9a 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java
index 501a53f..4486bf6 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java
index c715afe..2725f03 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java
index eb271da..0e0617a 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java
index 780fc7e..762bb8f 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java
index 8ce6bbe..2e02635 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java
index 10a2000..fc9a3d0 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java
index 548cd90..d37baba 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java
index 65a9691..e10fc86 100644
--- a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java
+++ b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
index c04e2cc..0a696cb 100644
--- a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
+++ b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java b/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java
index 65bdbe7..2838827 100644
--- a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java
+++ b/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java b/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
index f5af1a5..e399cfb 100644
--- a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
+++ b/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java
index 4f1ac41..81725d5 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
index c4b3bc3..f07a428 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
index 1d5df38..5362971 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java
index 91632d6..f28080d 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
index 3db0ad8..ab5d006 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
index 07cd41b..fe8dae8 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java
index e70179a..49056ca 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java
index c0e0cc8..ba3c95a 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
index 048bd2b..e947f49 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
index ffc1492..c7f69e5 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
index fce6768..abd8b82 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java
index b5a9277..b51bfe5 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
index e50baa8..cf9aaf8 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
index 3870ee6..f79b0af 100644
--- a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
+++ b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
index 93b052c..cbcffab 100644
--- a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
+++ b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
index 84f8780..754477e 100644
--- a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
+++ b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java
index bf63217..ca7223d 100644
--- a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java
+++ b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java
index 3ab2088..574a9d8 100644
--- a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java
+++ b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java
index 3cb7553..a82f1fc 100644
--- a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java
+++ b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java
index 4e8ef97..8495d2c 100644
--- a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java
+++ b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java
index 872118b..10966cf 100644
--- a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java
+++ b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java
index 4a50ec1..dd5efde 100644
--- a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java
+++ b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java
index fcc9173..e9c7948 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java
index 300e51a..72a58e3 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java
index 5bcdcce..ecdc1d3 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java
index 2b17fcd..6857d55 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java
index 9b11bee..18a563c 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java
index 1868bd9..86aa066 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java b/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java
index 036138f..b3f0b36 100644
--- a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java
+++ b/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java b/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java
index ef7a7c6..b745b9b 100644
--- a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java
+++ b/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java b/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java
index 9de08a1..9540973 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java b/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java
index 6516d64..58fa3f5 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java b/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java
index 397b358..4ccda97 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java b/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java
index d40bbb8..51534d4 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java b/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java
index c6fdc72..5460cdb 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java b/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java
index f1a62af..fd93aa5 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java b/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java
index bdc876f..49d0656 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java b/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java
index f82722b..436f77e 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java b/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java
index 0ee7e82..bf5f9f9 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt
index 23a5310..92a662c 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.ssz.experimental
 
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt
index 218786c..9622e2d 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.ssz.experimental
 
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt
index 28ef22d..7fefddc 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.ssz.experimental
 
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt
index 7c0954b..def15c3 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.ssz.experimental
 
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt
index 11b9e9c..d103592 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.ssz.experimental
 
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java b/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java
index ae9392f..5e84ff0 100644
--- a/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java
+++ b/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java b/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java
index c2eec4f..ac3f7d5 100644
--- a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java
+++ b/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java b/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java
index e0ddf3b..758cc0c 100644
--- a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java
+++ b/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java b/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java
index 1ea9ea8..f414c07 100644
--- a/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java
+++ b/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt b/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt
index 6ec0115..8d5f64f 100644
--- a/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt
+++ b/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt
@@ -1,14 +1,18 @@
 /*
- * Copyright 2018 ConsenSys AG.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tuweni.ssz.experimental
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java b/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java
index 05dc52b..35b1b28 100644
--- a/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java
+++ b/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java b/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java
index bd9cb0d..cff43bd 100644
--- a/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java b/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java
index 458e000..feff860 100644
--- a/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java
+++ b/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java b/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java
index 22de053..300a2b9 100644
--- a/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java b/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java
index 1b1d59f..8865c2e 100644
--- a/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java
+++ b/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java b/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java
index 2cc1d33..9bb1a88 100644
--- a/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java b/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java
index 71cffc0..895f0ab 100644
--- a/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java b/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java
index 3dcab41..5751771 100644
--- a/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java b/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java
index 7a38523..a1ef470 100644
--- a/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java b/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java
index 72a9cdb..3fe1941 100644
--- a/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java
+++ b/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java b/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java
index b3e1f4d..19eebdb 100644
--- a/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java
+++ b/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/Parser.java b/toml/src/main/java/net/consensys/cava/toml/Parser.java
index 24de490..cc5e5b2 100644
--- a/toml/src/main/java/net/consensys/cava/toml/Parser.java
+++ b/toml/src/main/java/net/consensys/cava/toml/Parser.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java b/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java
index ff55658..389b2bb 100644
--- a/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TokenName.java b/toml/src/main/java/net/consensys/cava/toml/TokenName.java
index 744a8fd..bdf22e0 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TokenName.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TokenName.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/Toml.java b/toml/src/main/java/net/consensys/cava/toml/Toml.java
index d4b2def..5f76343 100644
--- a/toml/src/main/java/net/consensys/cava/toml/Toml.java
+++ b/toml/src/main/java/net/consensys/cava/toml/Toml.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlArray.java b/toml/src/main/java/net/consensys/cava/toml/TomlArray.java
index 94c92c5..d5d8368 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlArray.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlArray.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java b/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java
index d62e685..f7aaa2a 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java b/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java
index 933872a..d1d2530 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java b/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java
index 30c0449..4d92124 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java b/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java
index 3f8d796..12d6b84 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlTable.java b/toml/src/main/java/net/consensys/cava/toml/TomlTable.java
index 72e482c..e6fd2c2 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlTable.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlTable.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlType.java b/toml/src/main/java/net/consensys/cava/toml/TomlType.java
index a77071e..0f01697 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlType.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlType.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java b/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java
index d360aa9..940a207 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java b/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java
index 3a51f68..027efc3 100644
--- a/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java b/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java
index 882ee1f..3024134 100644
--- a/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java b/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java
index a8c4726..4e91ad7 100644
--- a/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java
+++ b/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java b/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java
index e99908c..562bbde 100644
--- a/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java
+++ b/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java b/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java
index 2150abf..6b4d0c3 100644
--- a/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java
+++ b/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/toml/src/test/java/net/consensys/cava/toml/TomlTest.java b/toml/src/test/java/net/consensys/cava/toml/TomlTest.java
index a240af3..a29a819 100644
--- a/toml/src/test/java/net/consensys/cava/toml/TomlTest.java
+++ b/toml/src/test/java/net/consensys/cava/toml/TomlTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java
index f5720d2..208db08 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java
index ff27cde..5dd53c7 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java
index 39afc45..ba11019 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java
index 476c0fd..57799a1 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java
index 10800f5..8d8c188 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java
index cf1bad0..af993cc 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java
index 47f88b3..79166b6 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java
index 2173390..53a26ad 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java
index 62b0983..9707844 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java
index 5c2287f..fe08115 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java
index b0b74a8..b788ff0 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java
index a5fb1bb..ae3d5d7 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java
index 828ce45..c5e8d3e 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java
index 9577e08..0d2dda4 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java
index 6734fc6..ccdeb69 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java
index d8b71e9..159a3dd 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java
index 3025494..c0ede0a 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java
index b1648e1..692e1a1 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java b/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java
index 3c6d335..8e0aa66 100644
--- a/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java
+++ b/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java b/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java
index 03331ed..e430561 100644
--- a/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java
+++ b/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt256ValueTest.java b/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt256ValueTest.java
index 26b97f5..b00c464 100644
--- a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt256ValueTest.java
+++ b/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt256ValueTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt384ValueTest.java b/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt384ValueTest.java
index 3e99c86..757ab9f 100644
--- a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt384ValueTest.java
+++ b/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt384ValueTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt64ValueTest.java b/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt64ValueTest.java
index b912a1b..6960a74 100644
--- a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt64ValueTest.java
+++ b/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt64ValueTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/UInt256Test.java b/units/src/test/java/net/consensys/cava/units/bigints/UInt256Test.java
index db16eec..36eb1d1 100644
--- a/units/src/test/java/net/consensys/cava/units/bigints/UInt256Test.java
+++ b/units/src/test/java/net/consensys/cava/units/bigints/UInt256Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/UInt384Test.java b/units/src/test/java/net/consensys/cava/units/bigints/UInt384Test.java
index 2033ca5..9c26313 100644
--- a/units/src/test/java/net/consensys/cava/units/bigints/UInt384Test.java
+++ b/units/src/test/java/net/consensys/cava/units/bigints/UInt384Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/UInt64Test.java b/units/src/test/java/net/consensys/cava/units/bigints/UInt64Test.java
index a3a8534..3f8caa3 100644
--- a/units/src/test/java/net/consensys/cava/units/bigints/UInt64Test.java
+++ b/units/src/test/java/net/consensys/cava/units/bigints/UInt64Test.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/test/java/net/consensys/cava/units/ethereum/GasTest.java b/units/src/test/java/net/consensys/cava/units/ethereum/GasTest.java
index 2203463..f09abcd 100644
--- a/units/src/test/java/net/consensys/cava/units/ethereum/GasTest.java
+++ b/units/src/test/java/net/consensys/cava/units/ethereum/GasTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
diff --git a/units/src/test/java/net/consensys/cava/units/ethereum/WeiTest.java b/units/src/test/java/net/consensys/cava/units/ethereum/WeiTest.java
index 6ad0d8b..bfdb1ed 100644
--- a/units/src/test/java/net/consensys/cava/units/ethereum/WeiTest.java
+++ b/units/src/test/java/net/consensys/cava/units/ethereum/WeiTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2018 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 20/32: Update README.md

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit beba7fe0bf840cc895e9014c892376d525825e99
Author: Jonny Rhea <jo...@gmail.com>
AuthorDate: Tue Apr 16 16:38:35 2019 -0500

    Update README.md
    
    Changed obvious stuff to tuweni from cava.  i left things like:
    -links to online documentation, Stack-Overflow, bintray, etc alone
---
 README.md | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/README.md b/README.md
index fdf8286..3251d49 100644
--- a/README.md
+++ b/README.md
@@ -1,33 +1,33 @@
-# Cava: ConsenSys Core Libraries for Java (& Kotlin)
+# Tuweni: ConsenSys Core Libraries for Java (& Kotlin)
 
 [![Build Status](https://circleci.com/gh/ConsenSys/cava.svg?style=shield&circle-token=440c81af8cae3c059b516a8e375471258d7e0229)](https://circleci.com/gh/ConsenSys/cava)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/ConsenSys/cava/blob/master/LICENSE)
 [![Download](https://api.bintray.com/packages/consensys/consensys/cava/images/download.svg?version=0.6.0) ](https://bintray.com/consensys/consensys/cava/0.6.0)
 
-In the spirit of [Google Guava](https://github.com/google/guava/), Cava is a set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages.
+In the spirit of [Google Guava](https://github.com/google/guava/), Tuweni is a set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages.
 
 It includes a low-level bytes library, serialization and deserialization codecs (e.g. [RLP](https://github.com/ethereum/wiki/wiki/RLP)), various cryptography functions and primatives, and lots of other helpful utilities.
 
-Cava is developed for JDK 1.8 or higher, and depends on various other FOSS libraries, including Guava.
+Tuweni is developed for JDK 1.8 or higher, and depends on various other FOSS libraries, including Guava.
 
-## Getting cava
+## Getting tuweni
 
 > Note that these libraries are experimental and are subject to change.
 
 The libraries are published to [ConsenSys bintray repository](https://consensys.bintray.com/consensys/), synced to JCenter and Maven Central.
 
-You can import all modules using the cava jar.
+You can import all modules using the tuweni jar.
 
 With Maven:
 ```xml
 <dependency>
   <groupId>org.apache.tuweni</groupId>
-  <artifactId>cava</artifactId>
+  <artifactId>tuweni</artifactId>
   <version>0.6.0</version>
 </dependency>
 ```
 
-With Gradle: `compile 'org.apache.tuweni:cava:0.6.0'`
+With Gradle: `compile 'org.apache.tuweni:tuweni:0.6.0'`
 
 [PACKAGES.md](PACKAGES.md) contains the list of modules and instructions to import them separately.
 
@@ -36,8 +36,8 @@ With Gradle: `compile 'org.apache.tuweni:cava:0.6.0'`
 To build, clone this repo and run with `./gradlew` like so:
 
 ```sh
-git clone --recursive https://github.com/ConsenSys/cava
-cd cava
+git clone --recursive https://github.com/apache/incubator-tuweni
+cd incubator-tuweni
 ./gradlew
 ```
 
@@ -45,9 +45,9 @@ After a successful build, libraries will be available in `build/libs`.
 
 ## Links
 
-- [GitHub project](https://github.com/ConsenSys/cava)
+- [GitHub project](https://github.com/apache/incubator-tuweni)
 - [Online Kotlin documentation](https://consensys.github.io/cava/docs/kotlin/0.6.0/cava)
 - [Online Java documentation](https://consensys.github.io/cava/docs/java/0.6.0)
-- [Issue tracker: Report a defect or feature request](https://github.com/ConsenSys/cava/issues/new)
+- [Issue tracker: Report a defect or feature request](https://github.com/apache/incubator-tuweni/issues/new)
 - [StackOverflow: Ask "how-to" and "why-didn't-it-work" questions](https://stackoverflow.com/questions/ask?tags=cava+java)
 - [cava-discuss: For open-ended questions and discussion](http://groups.google.com/group/cava-discuss)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 32/32: Bring over latest changes on scuttlebutt

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit ec647af92a1ba8537b2723e7f3d0b690eb1dc2d3
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Mon Apr 22 14:11:23 2019 -0700

    Bring over latest changes on scuttlebutt
---
 scuttlebutt-rpc/build.gradle                       |   3 +-
 .../tuweni/scuttlebutt/rpc/RPCAsyncRequest.java    |  12 +-
 .../tuweni/scuttlebutt/rpc/RPCErrorBody.java       |  10 +-
 .../apache/tuweni/scuttlebutt/rpc/RPCFunction.java |  10 +-
 .../apache/tuweni/scuttlebutt/rpc/RPCMessage.java  |  31 ++-
 .../tuweni/scuttlebutt/rpc/RPCRequestBody.java     |  12 +-
 .../tuweni/scuttlebutt/rpc/RPCRequestType.java     |  10 +-
 .../apache/tuweni/scuttlebutt/rpc/RPCResponse.java |  80 +++++++
 .../tuweni/scuttlebutt/rpc/RPCStreamRequest.java   |  12 +-
 .../tuweni/scuttlebutt/rpc/mux/Multiplexer.java    |  22 +-
 .../tuweni/scuttlebutt/rpc/mux/RPCHandler.java     | 243 +++++++++++----------
 .../rpc/mux/ScuttlebuttStreamHandler.java          |  14 +-
 .../mux/exceptions/ConnectionClosedException.java  |  10 +-
 .../mux/exceptions/RPCRequestFailedException.java  |  20 ++
 .../scuttlebutt/rpc/PatchworkIntegrationTest.java  |   8 -
 .../rpc/mux/PatchworkIntegrationTest.java          |  99 ++++-----
 16 files changed, 361 insertions(+), 235 deletions(-)

diff --git a/scuttlebutt-rpc/build.gradle b/scuttlebutt-rpc/build.gradle
index cf71a72..1c04ff4 100644
--- a/scuttlebutt-rpc/build.gradle
+++ b/scuttlebutt-rpc/build.gradle
@@ -1,9 +1,10 @@
-description = 'Scuttlebutt Handshake library'
+description = 'Scuttlebutt RPC library'
 
 dependencies {
   compile project(':bytes')
   compile project(':concurrent')
   compile project(':crypto')
+  compileOnly 'io.vertx:vertx-core'
   compile project(':scuttlebutt')
   compile project(':scuttlebutt-handshake')
   compile 'org.logl:logl-api'
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCAsyncRequest.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCAsyncRequest.java
index f4281d7..b94c224 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCAsyncRequest.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCAsyncRequest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.List;
 
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCErrorBody.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCErrorBody.java
index 87fa5b6..bd1e888 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCErrorBody.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCErrorBody.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
 /**
  * An RPC message response body which contains an error
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFunction.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFunction.java
index 511a491..cef5071 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFunction.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFunction.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java
index 2f21645..7dade5d 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java
@@ -15,11 +15,12 @@ package org.apache.tuweni.scuttlebutt.rpc;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.scuttlebutt.rpc.mux.exceptions.RPCRequestFailedException;
 
 import java.io.IOException;
+import java.util.Optional;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Optional;
 
 /**
  * Decoded RPC message, making elements of the message available directly.
@@ -104,17 +105,41 @@ public final class RPCMessage {
 
     if (!isErrorMessage()) {
       // If the body of the response is 'true' or the error flag isn't set, it's a successful end condition
-      return Optional.absent();
+      return Optional.empty();
     } else {
       try {
         return Optional.of(asJSON(objectMapper, RPCErrorBody.class));
       } catch (IOException e) {
-        return Optional.absent();
+        return Optional.empty();
       }
     }
   }
 
   /**
+   *
+   * @param objectMapper the objectmatter to deserialize the error with.
+   *
+   * @return an exception if this represents an error RPC response, otherwise nothing
+   */
+  public Optional<RPCRequestFailedException> getException(ObjectMapper objectMapper) {
+    if (isErrorMessage()) {
+      Optional<RPCRequestFailedException> exception =
+          getErrorBody(objectMapper).map(errorBody -> new RPCRequestFailedException(errorBody.getMessage()));
+
+      if (!exception.isPresent()) {
+        // If we failed to deserialize into the RPCErrorBody type there may be a bug in the server implementation
+        // which prevented it returning the correct type, so we just print whatever it returned
+        return Optional.of(new RPCRequestFailedException(this.asString()));
+      } else {
+        return exception;
+      }
+
+    } else {
+      return Optional.empty();
+    }
+  }
+
+  /**
    * Provides the type of the body of the message: a binary message, a UTF-8 string or a JSON message.
    * 
    * @return the type of the body: a binary message, a UTF-8 string or a JSON message
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestBody.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestBody.java
index 70ad4e3..471d5b9 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestBody.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestBody.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.List;
 
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestType.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestType.java
index 9703da4..85a18b2 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestType.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCRequestType.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCResponse.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCResponse.java
new file mode 100644
index 0000000..73c6e86
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCResponse.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.tuweni.scuttlebutt.rpc;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.scuttlebutt.rpc.RPCFlag.BodyType;
+
+import java.io.IOException;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * A successful RPC response.
+ */
+public class RPCResponse {
+
+  private final Bytes body;
+  private final BodyType bodyType;
+
+  /**
+   * A successful RPC response.
+   *
+   * @param body the body of the response in bytes
+   * @param bodyType the type of the response (e.g. JSON, UTF-8 or binary.)
+   */
+  public RPCResponse(Bytes body, BodyType bodyType) {
+
+    this.body = body;
+    this.bodyType = bodyType;
+  }
+
+  /**
+   * @return the RPC response body
+   */
+  public Bytes body() {
+    return body;
+  }
+
+  /**
+   * @return The type of the data contained in the body.
+   */
+  public BodyType bodyType() {
+    return bodyType;
+  }
+
+  /**
+   * Provides the body of the message as a UTF-8 string.
+   *
+   * @return the body of the message as a UTF-8 string
+   */
+  public String asString() {
+    return new String(body().toArrayUnsafe(), UTF_8);
+  }
+
+  /**
+   * Provides the body of the message, marshalled as a JSON object.
+   *
+   * @param objectMapper the object mapper to deserialize with
+   * @param clazz the JSON object class
+   * @param <T> the matching JSON object class
+   * @return a new instance of the JSON object class
+   * @throws IOException if an error occurs during marshalling
+   */
+  public <T> T asJSON(ObjectMapper objectMapper, Class<T> clazz) throws IOException {
+    return objectMapper.readerFor(clazz).readValue(body().toArrayUnsafe());
+  }
+
+}
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCStreamRequest.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCStreamRequest.java
index ff198da..1249182 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCStreamRequest.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCStreamRequest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.List;
 
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/Multiplexer.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/Multiplexer.java
index 722dcbf..66b7d74 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/Multiplexer.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/Multiplexer.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc.mux;
+package org.apache.tuweni.scuttlebutt.rpc.mux;
 
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.scuttlebutt.rpc.RPCAsyncRequest;
-import net.consensys.cava.scuttlebutt.rpc.RPCMessage;
-import net.consensys.cava.scuttlebutt.rpc.RPCStreamRequest;
-import net.consensys.cava.scuttlebutt.rpc.mux.exceptions.ConnectionClosedException;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.scuttlebutt.rpc.RPCAsyncRequest;
+import org.apache.tuweni.scuttlebutt.rpc.RPCResponse;
+import org.apache.tuweni.scuttlebutt.rpc.RPCStreamRequest;
+import org.apache.tuweni.scuttlebutt.rpc.mux.exceptions.ConnectionClosedException;
 
 import java.util.function.Function;
 
@@ -35,7 +35,7 @@ public interface Multiplexer {
    *
    * @return an async result which will be completed with the result or an error if the request fails.
    */
-  AsyncResult<RPCMessage> makeAsyncRequest(RPCAsyncRequest request);
+  AsyncResult<RPCResponse> makeAsyncRequest(RPCAsyncRequest request) throws JsonProcessingException;
 
   /**
    * Creates a request which opens a stream (e.g. a 'source' in the protocol docs.)
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/RPCHandler.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/RPCHandler.java
index 0ac4583..4655862 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/RPCHandler.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/RPCHandler.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,41 +10,36 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc.mux;
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.concurrent.CompletableAsyncResult;
-import net.consensys.cava.scuttlebutt.handshake.vertx.ClientHandler;
-import net.consensys.cava.scuttlebutt.rpc.RPCAsyncRequest;
-import net.consensys.cava.scuttlebutt.rpc.RPCCodec;
-import net.consensys.cava.scuttlebutt.rpc.RPCErrorBody;
-import net.consensys.cava.scuttlebutt.rpc.RPCFlag;
-import net.consensys.cava.scuttlebutt.rpc.RPCMessage;
-import net.consensys.cava.scuttlebutt.rpc.RPCStreamRequest;
-import net.consensys.cava.scuttlebutt.rpc.mux.exceptions.ConnectionClosedException;
+package org.apache.tuweni.scuttlebutt.rpc.mux;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.concurrent.CompletableAsyncResult;
+import org.apache.tuweni.scuttlebutt.handshake.vertx.ClientHandler;
+import org.apache.tuweni.scuttlebutt.rpc.RPCAsyncRequest;
+import org.apache.tuweni.scuttlebutt.rpc.RPCCodec;
+import org.apache.tuweni.scuttlebutt.rpc.RPCFlag;
+import org.apache.tuweni.scuttlebutt.rpc.RPCMessage;
+import org.apache.tuweni.scuttlebutt.rpc.RPCResponse;
+import org.apache.tuweni.scuttlebutt.rpc.RPCStreamRequest;
+import org.apache.tuweni.scuttlebutt.rpc.mux.exceptions.ConnectionClosedException;
+import org.apache.tuweni.scuttlebutt.rpc.mux.exceptions.RPCRequestFailedException;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Optional;
+import io.vertx.core.Handler;
+import io.vertx.core.Vertx;
 import org.logl.Logger;
 import org.logl.LoggerProvider;
 
 /**
- * Handles RPC requests and responses from an active connection to a scuttlebutt node
- *
- * Note: the public methods on this class are synchronized so that a request is rejected if the connection has been
- * closed before it begins and any 'in flight' requests are ended exceptionally with a 'connection closed' error without
- * new incoming requests being added to the maps by threads.
- *
- * In the future,we could perhaps be carefully more fine grained about the locking if we require a high degree of
- * concurrency.
- *
+ * Handles RPC requests and responses from an active connection to a scuttlebutt node.
  */
 public class RPCHandler implements Multiplexer, ClientHandler {
 
@@ -53,7 +48,13 @@ public class RPCHandler implements Multiplexer, ClientHandler {
   private final Runnable connectionCloser;
   private final ObjectMapper objectMapper;
 
-  private Map<Integer, CompletableAsyncResult<RPCMessage>> awaitingAsyncResponse = new HashMap<>();
+  /**
+   * We run each each update on the vertx event loop to update the request state synchronously, and to handle the
+   * underlying connection closing by failing the in progress requests and not accepting future requests
+   */
+  private final Vertx vertx;
+
+  private Map<Integer, CompletableAsyncResult<RPCResponse>> awaitingAsyncResponse = new HashMap<>();
   private Map<Integer, ScuttlebuttStreamHandler> streams = new HashMap<>();
 
   private boolean closed;
@@ -61,16 +62,19 @@ public class RPCHandler implements Multiplexer, ClientHandler {
   /**
    * Makes RPC requests over a connection
    *
+   * @param vertx The vertx instance to queue requests with
    * @param messageSender sends the request to the node
    * @param terminationFn closes the connection
    * @param objectMapper the objectMapper to serialize and deserialize message request and response bodies
    * @param logger
    */
   public RPCHandler(
+      Vertx vertx,
       Consumer<Bytes> messageSender,
       Runnable terminationFn,
       ObjectMapper objectMapper,
       LoggerProvider logger) {
+    this.vertx = vertx;
     this.messageSender = messageSender;
     this.connectionCloser = terminationFn;
     this.closed = false;
@@ -80,86 +84,116 @@ public class RPCHandler implements Multiplexer, ClientHandler {
   }
 
   @Override
-  public synchronized AsyncResult<RPCMessage> makeAsyncRequest(RPCAsyncRequest request) {
+  public AsyncResult<RPCResponse> makeAsyncRequest(RPCAsyncRequest request) throws JsonProcessingException {
 
-    CompletableAsyncResult<RPCMessage> result = AsyncResult.incomplete();
+    Bytes bodyBytes = request.toEncodedRpcMessage(objectMapper);
 
-    if (closed) {
-      result.completeExceptionally(new ConnectionClosedException());
-    }
+    CompletableAsyncResult<RPCResponse> result = AsyncResult.incomplete();
 
-    try {
-      RPCMessage message = new RPCMessage(request.toEncodedRpcMessage(objectMapper));
-      int requestNumber = message.requestNumber();
-      awaitingAsyncResponse.put(requestNumber, result);
-      Bytes bytes = RPCCodec.encodeRequest(message.body(), requestNumber, request.getRPCFlags());
-      messageSender.accept(bytes);
+    Handler<Void> synchronizedAddRequest = (event) -> {
+      if (closed) {
+        result.completeExceptionally(new ConnectionClosedException());
+      } else {
+        RPCMessage message = new RPCMessage(bodyBytes);
+        int requestNumber = message.requestNumber();
 
-    } catch (JsonProcessingException e) {
-      result.completeExceptionally(e);
-    }
+        awaitingAsyncResponse.put(requestNumber, result);
+        Bytes bytes = RPCCodec.encodeRequest(message.body(), requestNumber, request.getRPCFlags());
+        sendBytes(bytes);
+      }
+    };
 
+    vertx.runOnContext(synchronizedAddRequest);
     return result;
   }
 
   @Override
-  public synchronized void openStream(
-      RPCStreamRequest request,
-      Function<Runnable, ScuttlebuttStreamHandler> responseSink) throws JsonProcessingException,
-      ConnectionClosedException {
+  public void openStream(RPCStreamRequest request, Function<Runnable, ScuttlebuttStreamHandler> responseSink)
+      throws JsonProcessingException {
 
-    if (closed) {
-      throw new ConnectionClosedException();
-    }
+    Bytes bodyBytes = request.toEncodedRpcMessage(objectMapper);
+
+    Handler<Void> synchronizedRequest = (event) -> {
 
-    try {
       RPCFlag[] rpcFlags = request.getRPCFlags();
-      RPCMessage message = new RPCMessage(request.toEncodedRpcMessage(objectMapper));
+      RPCMessage message = new RPCMessage(bodyBytes);
       int requestNumber = message.requestNumber();
 
-      Bytes bytes = RPCCodec.encodeRequest(message.body(), requestNumber, rpcFlags);
-      messageSender.accept(bytes);
-
-      Runnable closeStreamHandler = new Runnable() {
-        @Override
-        public void run() {
+      Bytes requestBytes = RPCCodec.encodeRequest(message.body(), requestNumber, rpcFlags);
 
-          try {
-            Bytes bytes = RPCCodec.encodeStreamEndRequest(requestNumber);
-            messageSender.accept(bytes);
-          } catch (JsonProcessingException e) {
-            logger.warn("Unexpectedly could not encode stream end message to JSON.");
-          }
+      Runnable closeStreamHandler = () -> {
 
+        try {
+          Bytes streamEnd = RPCCodec.encodeStreamEndRequest(requestNumber);
+          sendBytes(streamEnd);
+        } catch (JsonProcessingException e) {
+          logger.warn("Unexpectedly could not encode stream end message to JSON.");
         }
+
       };
 
       ScuttlebuttStreamHandler scuttlebuttStreamHandler = responseSink.apply(closeStreamHandler);
 
-      streams.put(requestNumber, scuttlebuttStreamHandler);
-    } catch (JsonProcessingException ex) {
-      throw ex;
-    }
+      if (closed) {
+        scuttlebuttStreamHandler.onStreamError(new ConnectionClosedException());
+      } else {
+        streams.put(requestNumber, scuttlebuttStreamHandler);
+        sendBytes(requestBytes);
+      }
+
+
+    };
+
+    vertx.runOnContext(synchronizedRequest);
   }
 
   @Override
-  public synchronized void close() {
-    connectionCloser.run();
+  public void close() {
+    vertx.runOnContext((event) -> {
+      connectionCloser.run();
+    });
   }
 
   @Override
-  public synchronized void receivedMessage(Bytes message) {
+  public void receivedMessage(Bytes message) {
 
-    RPCMessage rpcMessage = new RPCMessage(message);
+    Handler<Void> synchronizedHandleMessage = (event) -> {
+      RPCMessage rpcMessage = new RPCMessage(message);
 
-    // A negative request number indicates that this is a response, rather than a request that this node
-    // should service
-    if (rpcMessage.requestNumber() < 0) {
-      handleResponse(rpcMessage);
-    } else {
-      handleRequest(rpcMessage);
-    }
+      // A negative request number indicates that this is a response, rather than a request that this node
+      // should service
+      if (rpcMessage.requestNumber() < 0) {
+        handleResponse(rpcMessage);
+      } else {
+        handleRequest(rpcMessage);
+      }
+    };
 
+    vertx.runOnContext(synchronizedHandleMessage);
+  }
+
+  @Override
+  public void streamClosed() {
+
+    Handler<Void> synchronizedCloseStream = (event) -> {
+      closed = true;
+
+      streams.forEach((key, streamHandler) -> {
+        streamHandler.onStreamError(new ConnectionClosedException());
+      });
+
+      streams.clear();
+
+      awaitingAsyncResponse.forEach((key, value) -> {
+        if (!value.isDone()) {
+          value.completeExceptionally(new ConnectionClosedException());
+        }
+      });
+
+      awaitingAsyncResponse.clear();
+    };
+
+    vertx.runOnContext(synchronizedCloseStream);
   }
 
   private void handleRequest(RPCMessage rpcMessage) {
@@ -179,6 +213,8 @@ public class RPCHandler implements Multiplexer, ClientHandler {
 
     boolean isStream = RPCFlag.Stream.STREAM.isApplied(rpcFlags);
 
+    Optional<RPCRequestFailedException> exception = response.getException(objectMapper);
+
     if (isStream) {
       ScuttlebuttStreamHandler scuttlebuttStreamHandler = streams.get(requestNumber);
 
@@ -187,20 +223,11 @@ public class RPCHandler implements Multiplexer, ClientHandler {
         if (response.isSuccessfulLastMessage()) {
           streams.remove(requestNumber);
           scuttlebuttStreamHandler.onStreamEnd();
-        } else if (response.isErrorMessage()) {
-
-          Optional<RPCErrorBody> errorBody = response.getErrorBody(objectMapper);
-
-          if (errorBody.isPresent()) {
-            scuttlebuttStreamHandler.onStreamError(new Exception(errorBody.get().getMessage()));
-          } else {
-            // This shouldn't happen, but for safety we fall back to just writing the whole body in the exception message
-            // if we fail to marshall it for whatever reason
-            scuttlebuttStreamHandler.onStreamError(new Exception(response.asString()));
-          }
-
+        } else if (exception.isPresent()) {
+          scuttlebuttStreamHandler.onStreamError(exception.get());
         } else {
-          scuttlebuttStreamHandler.onMessage(response);
+          RPCResponse successfulResponse = new RPCResponse(response.body(), response.bodyType());
+          scuttlebuttStreamHandler.onMessage(successfulResponse);
         }
       } else {
         logger.warn(
@@ -212,11 +239,18 @@ public class RPCHandler implements Multiplexer, ClientHandler {
 
     } else {
 
-      CompletableAsyncResult<RPCMessage> rpcMessageFuture = awaitingAsyncResponse.get(requestNumber);
+      CompletableAsyncResult<RPCResponse> rpcMessageFuture = awaitingAsyncResponse.remove(requestNumber);
 
       if (rpcMessageFuture != null) {
-        rpcMessageFuture.complete(response);
-        awaitingAsyncResponse.remove(requestNumber);
+
+        if (exception.isPresent()) {
+          rpcMessageFuture.completeExceptionally(exception.get());
+        } else {
+          RPCResponse successfulResponse = new RPCResponse(response.body(), response.bodyType());
+
+          rpcMessageFuture.complete(successfulResponse);
+        }
+
       } else {
         logger.warn(
             "Couldn't find async handler for RPC response with request number "
@@ -228,23 +262,8 @@ public class RPCHandler implements Multiplexer, ClientHandler {
 
   }
 
-  @Override
-  public void streamClosed() {
-    this.closed = true;
-
-    streams.forEach((key, streamHandler) -> {
-      streamHandler.onStreamError(new ConnectionClosedException());
-    });
-
-    streams.clear();
-
-    awaitingAsyncResponse.forEach((key, value) -> {
-      if (!value.isDone()) {
-        value.completeExceptionally(new ConnectionClosedException());
-      }
-
-    });
-
-
+  private void sendBytes(Bytes bytes) {
+    messageSender.accept(bytes);
   }
+
 }
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/ScuttlebuttStreamHandler.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/ScuttlebuttStreamHandler.java
index d108663..d64b54a 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/ScuttlebuttStreamHandler.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/ScuttlebuttStreamHandler.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc.mux;
+package org.apache.tuweni.scuttlebutt.rpc.mux;
 
-import net.consensys.cava.scuttlebutt.rpc.RPCMessage;
+import org.apache.tuweni.scuttlebutt.rpc.RPCResponse;
 
 /**
  * Handles incoming items from a result stream
@@ -24,7 +24,7 @@ public interface ScuttlebuttStreamHandler {
    *
    * @param message
    */
-  void onMessage(RPCMessage message);
+  void onMessage(RPCResponse message);
 
   /**
    * Invoked when the stream has been closed.
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/ConnectionClosedException.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/ConnectionClosedException.java
index 160946c..a3c269c 100644
--- a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/ConnectionClosedException.java
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/ConnectionClosedException.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc.mux.exceptions;
+package org.apache.tuweni.scuttlebutt.rpc.mux.exceptions;
 
 public class ConnectionClosedException extends Exception {
 
diff --git a/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/RPCRequestFailedException.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/RPCRequestFailedException.java
new file mode 100644
index 0000000..5baefca
--- /dev/null
+++ b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/mux/exceptions/RPCRequestFailedException.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.tuweni.scuttlebutt.rpc.mux.exceptions;
+
+public final class RPCRequestFailedException extends RuntimeException {
+
+  public RPCRequestFailedException(String errorMessage) {
+    super(errorMessage);
+  }
+}
diff --git a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
index 3178fae..9d8527d 100644
--- a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
+++ b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
@@ -16,13 +16,11 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import org.apache.tuweni.bytes.Bytes;
 import org.apache.tuweni.bytes.Bytes32;
 import org.apache.tuweni.concurrent.AsyncResult;
 import org.apache.tuweni.crypto.sodium.Signature;
-import org.apache.tuweni.crypto.sodium.Sodium;
 import org.apache.tuweni.io.Base64;
 import org.apache.tuweni.junit.VertxExtension;
 import org.apache.tuweni.junit.VertxInstance;
@@ -43,7 +41,6 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Optional;
 import io.vertx.core.Vertx;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -60,11 +57,6 @@ import org.logl.vertx.LoglLogDelegateFactory;
 @ExtendWith(VertxExtension.class)
 class PatchworkIntegrationTest {
 
-  @BeforeAll
-  static void checkAvailable() {
-    assumeTrue(Sodium.isAvailable(), "Sodium native library is not available");
-  }
-
   public static class MyClientHandler implements ClientHandler {
 
     private final Consumer<Bytes> sender;
diff --git a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/mux/PatchworkIntegrationTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/mux/PatchworkIntegrationTest.java
index 293ac92..6581b40 100644
--- a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/mux/PatchworkIntegrationTest.java
+++ b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/mux/PatchworkIntegrationTest.java
@@ -1,8 +1,8 @@
 /*
- * Copyright 2019 ConsenSys AG.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc.mux;
+package org.apache.tuweni.scuttlebutt.rpc.mux;
 
 /*
  * Copyright 2019 ConsenSys AG.
@@ -26,22 +26,20 @@ package net.consensys.cava.scuttlebutt.rpc.mux;
  */
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.concurrent.CompletableAsyncResult;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.io.Base64;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
-import net.consensys.cava.scuttlebutt.handshake.vertx.SecureScuttlebuttVertxClient;
-import net.consensys.cava.scuttlebutt.rpc.RPCAsyncRequest;
-import net.consensys.cava.scuttlebutt.rpc.RPCFunction;
-import net.consensys.cava.scuttlebutt.rpc.RPCMessage;
-import net.consensys.cava.scuttlebutt.rpc.RPCStreamRequest;
-import net.consensys.cava.scuttlebutt.rpc.mux.exceptions.ConnectionClosedException;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.concurrent.CompletableAsyncResult;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.io.Base64;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
+import org.apache.tuweni.scuttlebutt.handshake.vertx.SecureScuttlebuttVertxClient;
+import org.apache.tuweni.scuttlebutt.rpc.RPCAsyncRequest;
+import org.apache.tuweni.scuttlebutt.rpc.RPCFunction;
+import org.apache.tuweni.scuttlebutt.rpc.RPCResponse;
+import org.apache.tuweni.scuttlebutt.rpc.RPCStreamRequest;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -78,27 +76,21 @@ public class PatchworkIntegrationTest {
 
     RPCHandler rpcHandler = makeRPCHandler(vertx);
 
-    List<AsyncResult<RPCMessage>> results = new ArrayList<>();
+    List<AsyncResult<RPCResponse>> results = new ArrayList<>();
 
     for (int i = 0; i < 10; i++) {
       RPCFunction function = new RPCFunction("whoami");
       RPCAsyncRequest asyncRequest = new RPCAsyncRequest(function, new ArrayList<>());
 
-      AsyncResult<RPCMessage> res = rpcHandler.makeAsyncRequest(asyncRequest);
+      AsyncResult<RPCResponse> res = rpcHandler.makeAsyncRequest(asyncRequest);
 
       results.add(res);
     }
 
-    AsyncResult<List<RPCMessage>> allResults = AsyncResult.combine(results);
-    List<RPCMessage> rpcMessages = allResults.get();
+    AsyncResult<List<RPCResponse>> allResults = AsyncResult.combine(results);
+    List<RPCResponse> rpcMessages = allResults.get();
 
     assertEquals(10, rpcMessages.size());
-
-    rpcMessages.forEach(msg -> {
-      assertFalse(msg.lastMessageOrError());
-
-    });
-
   }
 
 
@@ -158,7 +150,7 @@ public class PatchworkIntegrationTest {
     RPCHandler rpcHandler = makeRPCHandler(vertx);
 
 
-    List<AsyncResult<RPCMessage>> results = new ArrayList<>();
+    List<AsyncResult<RPCResponse>> results = new ArrayList<>();
 
     for (int i = 0; i < 20; i++) {
       // Note: in a real use case, this would more likely be a Java class with these fields
@@ -168,13 +160,13 @@ public class PatchworkIntegrationTest {
 
       RPCAsyncRequest asyncRequest = new RPCAsyncRequest(new RPCFunction("publish"), Arrays.asList(params));
 
-      AsyncResult<RPCMessage> rpcMessageAsyncResult = rpcHandler.makeAsyncRequest(asyncRequest);
+      AsyncResult<RPCResponse> rpcMessageAsyncResult = rpcHandler.makeAsyncRequest(asyncRequest);
 
       results.add(rpcMessageAsyncResult);
 
     }
 
-    List<RPCMessage> rpcMessages = AsyncResult.combine(results).get();
+    List<RPCResponse> rpcMessages = AsyncResult.combine(results).get();
 
     rpcMessages.forEach(msg -> System.out.println(msg.asString()));
   }
@@ -196,7 +188,7 @@ public class PatchworkIntegrationTest {
     AsyncResult<RPCHandler> onConnect =
         secureScuttlebuttVertxClient.connectTo(port, host, keyPair.publicKey(), (sender, terminationFn) -> {
 
-          return new RPCHandler(sender, terminationFn, new ObjectMapper(), loggerProvider);
+          return new RPCHandler(vertx, sender, terminationFn, new ObjectMapper(), loggerProvider);
         });
 
     return onConnect.get();
@@ -219,26 +211,23 @@ public class PatchworkIntegrationTest {
 
     RPCStreamRequest streamRequest = new RPCStreamRequest(new RPCFunction("createUserStream"), Arrays.asList(params));
 
-    try {
-      handler.openStream(streamRequest, (closeStream) -> new ScuttlebuttStreamHandler() {
-        @Override
-        public void onMessage(RPCMessage message) {
-          System.out.print(message.asString());
-        }
-
-        @Override
-        public void onStreamEnd() {
-          streamEnded.complete(null);
-        }
-
-        @Override
-        public void onStreamError(Exception ex) {
-
-        }
-      });
-    } catch (ConnectionClosedException e) {
-      throw e;
-    }
+    handler.openStream(streamRequest, (closeStream) -> new ScuttlebuttStreamHandler() {
+      @Override
+      public void onMessage(RPCResponse message) {
+        System.out.print(message.asString());
+      }
+
+      @Override
+      public void onStreamEnd() {
+        streamEnded.complete(null);
+      }
+
+      @Override
+      public void onStreamError(Exception ex) {
+
+        streamEnded.completeExceptionally(ex);
+      }
+    });
 
     // Wait until the stream is complete
     streamEnded.get();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 19/32: Make sure you don't receive a message you sent

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit b7588a8c450c8a2ca4f845c5afd1db7da5067990
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Mon Apr 8 23:05:08 2019 -0700

    Make sure you don't receive a message you sent
---
 plumtree/src/main/java/org/apache/tuweni/plumtree/State.java          | 4 +++-
 .../java/org/apache/tuweni/plumtree/vertx/VertxGossipServerTest.java  | 2 ++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
index bb71818..b65fdbe 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
@@ -90,7 +90,9 @@ public final class State {
                   .filter(p -> !lazyPeers.contains(p))
                   .map(peer -> (Runnable) (() -> messageSender.sendMessage(MessageSender.Verb.IHAVE, peer, hash, null)))
                   .collect(Collectors.toList()));
-          messageListener.accept(message);
+          if (sender != null) {
+            messageListener.accept(message);
+          }
         }
       } else {
         if (sender != null) {
diff --git a/plumtree/src/test/java/org/apache/tuweni/plumtree/vertx/VertxGossipServerTest.java b/plumtree/src/test/java/org/apache/tuweni/plumtree/vertx/VertxGossipServerTest.java
index f465afb..d6e6106 100644
--- a/plumtree/src/test/java/org/apache/tuweni/plumtree/vertx/VertxGossipServerTest.java
+++ b/plumtree/src/test/java/org/apache/tuweni/plumtree/vertx/VertxGossipServerTest.java
@@ -13,6 +13,7 @@
 package org.apache.tuweni.plumtree.vertx;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.tuweni.bytes.Bytes;
@@ -106,6 +107,7 @@ class VertxGossipServerTest {
     Thread.sleep(1000);
     assertEquals(Bytes.fromHexString("deadbeef"), messageReceived2.get());
     assertEquals(Bytes.fromHexString("deadbeef"), messageReceived3.get());
+    assertNull(messageReceived1.get());
 
     server1.stop().join();
     server2.stop().join();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 29/32: Add a logging statement with the username

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 74de3836e89cab4f35431014e0396825cdba7fb1
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Mon Apr 22 06:06:29 2019 -0700

    Add a logging statement with the username
---
 build.gradle | 1 +
 1 file changed, 1 insertion(+)

diff --git a/build.gradle b/build.gradle
index 13baa85..4f74202 100644
--- a/build.gradle
+++ b/build.gradle
@@ -306,6 +306,7 @@ allprojects {
 
           if (!credentialsFound) {
             project.logger.info('Reading credentials from environment')
+            project.logger.info('Username ' + project.findProperty('asfNexusUsername') ?: System.getenv('NEXUS_USER'))
             credentials {
               username project.findProperty('asfNexusUsername') ?: System.getenv('NEXUS_USER')
               password project.findProperty('asfNexusPassword') ?: System.getenv('NEXUS_PASSWORD')


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 18/32: Merge pull request #3 from jrhea/returnMessageHash

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 6d444cab27da05c06372b563603d033859a8f707
Merge: b6df939 a3f1f7f
Author: Antoine Toulme <at...@users.noreply.github.com>
AuthorDate: Mon Apr 8 22:59:48 2019 -0700

    Merge pull request #3 from jrhea/returnMessageHash
    
    Return message hash from sendGossipMessage in Plumtree

 plumtree/src/main/java/org/apache/tuweni/plumtree/State.java | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 30/32: Use simpler logic to get properties

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit d0ae6825d2e73003ea705dad5a8311ade1aa3f6e
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Mon Apr 22 06:20:48 2019 -0700

    Use simpler logic to get properties
---
 build.gradle      | 6 +++---
 gradle.properties | 2 ++
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/build.gradle b/build.gradle
index 4f74202..6c4d57c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -306,10 +306,10 @@ allprojects {
 
           if (!credentialsFound) {
             project.logger.info('Reading credentials from environment')
-            project.logger.info('Username ' + project.findProperty('asfNexusUsername') ?: System.getenv('NEXUS_USER'))
+            project.logger.info('Username ' + asfNexusUsername)
             credentials {
-              username project.findProperty('asfNexusUsername') ?: System.getenv('NEXUS_USER')
-              password project.findProperty('asfNexusPassword') ?: System.getenv('NEXUS_PASSWORD')
+              username asfNexusUsername
+              password asfNexusPassword
             }
           }
         }
diff --git a/gradle.properties b/gradle.properties
index 7fc6f1f..1b96edc 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1 +1,3 @@
 kotlin.code.style=official
+asfNexusUsername=none
+asfNexusPassword=


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 07/32: Update documentation with tuweni name

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit d853e999baa290c0bd482d0201c876905e47d1bc
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Wed Apr 3 00:06:10 2019 -0700

    Update documentation with tuweni name
---
 PACKAGES.md                                        | 38 +++++++++++-----------
 .../java/org/apache/tuweni/bytes/package-info.java |  4 +--
 concurrent-coroutines/build.gradle                 |  2 +-
 .../org/apache/tuweni/concurrent/package-info.java |  4 +--
 .../org/apache/tuweni/config/package-info.java     |  4 +--
 .../apache/tuweni/crypto/mikuli/package-info.java  |  4 +--
 .../org/apache/tuweni/crypto/package-info.java     |  4 +--
 .../java/org/apache/tuweni/eth/package-info.java   |  4 +--
 .../org/apache/tuweni/io/file/package-info.java    |  4 +--
 .../java/org/apache/tuweni/io/package-info.java    |  4 +--
 .../java/org/apache/tuweni/junit/package-info.java |  4 +--
 .../java/org/apache/tuweni/kv/package-info.java    |  4 +--
 .../org/apache/tuweni/kv/RedisKeyValueStore.kt     |  4 +--
 .../java/org/apache/tuweni/trie/package-info.java  |  4 +--
 .../java/org/apache/tuweni/net/package-info.java   |  4 +--
 .../org/apache/tuweni/plumtree/package-info.java   |  4 +--
 .../java/org/apache/tuweni/rlp/package-info.java   |  4 +--
 .../java/org/apache/tuweni/rlpx/package-info.java  |  4 +--
 .../org/apache/tuweni/rlpx/vertx/package-info.java |  4 +--
 .../org/apache/tuweni/rlpx/wire/package-info.java  |  4 +--
 .../tuweni/scuttlebutt/discovery/package-info.java |  4 +--
 .../tuweni/scuttlebutt/handshake/package-info.java |  4 +--
 .../scuttlebutt/handshake/vertx/package-info.java  |  4 +--
 .../apache/tuweni/scuttlebutt/package-info.java    |  4 +--
 settings.gradle                                    |  2 +-
 .../java/org/apache/tuweni/ssz/package-info.java   |  4 +--
 toml/README.md                                     | 30 ++---------------
 .../java/org/apache/tuweni/toml/package-info.java  |  4 +--
 .../java/org/apache/tuweni/units/package-info.java |  4 +--
 29 files changed, 73 insertions(+), 99 deletions(-)

diff --git a/PACKAGES.md b/PACKAGES.md
index 5b874f6..35365cf 100644
--- a/PACKAGES.md
+++ b/PACKAGES.md
@@ -1,18 +1,18 @@
-# Module cava
+# Module tuweni
 
-In the spirit of [Google Guava](https://github.com/google/guava/), Cava is a set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages.
+In the spirit of [Google Guava](https://github.com/google/guava/), Tuweni is a set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages.
 
 # Package org.apache.tuweni.bytes
 
 Classes and utilities for working with byte arrays.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-bytes` (`cava-bytes.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-bytes` (`tuweni-bytes.jar`).
 
 # Package org.apache.tuweni.concurrent
 
 Classes and utilities for working with concurrency.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-concurrent` (`cava-concurrent.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-concurrent` (`tuweni-concurrent.jar`).
 
 # Package org.apache.tuweni.concurrent.coroutines
 
@@ -22,13 +22,13 @@ Extensions for mapping [AsyncResult][org.apache.tuweni.concurrent.AsyncResult] a
 
 A general-purpose library for managing configuration data.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-config` (`cava-config.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-config` (`tuweni-config.jar`).
 
 # Package org.apache.tuweni.crypto
 
 Classes and utilities for working with cryptography.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-crypto` (`cava-crypto.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-crypto` (`tuweni-crypto.jar`).
 
 # Package org.apache.tuweni.crypto.sodium
 
@@ -36,25 +36,25 @@ Classes and utilities for working with the sodium native library.
 
 Classes and utilities in this package provide an interface to the native Sodium crypto library (https://www.libsodium.org/), which must be installed on the same system as the JVM. It will be searched for in common library locations, or its it can be loaded explicitly using [org.apache.tuweni.crypto.sodium.Sodium.loadLibrary].
 
-Classes in this package depend upon the JNR-FFI library, which is not automatically included when using the complete Cava distribution. See https://github.com/jnr/jnr-ffi. JNR-FFI can be included using the gradle dependency `com.github.jnr:jnr-ffi`.
+Classes in this package depend upon the JNR-FFI library, which is not automatically included when using the complete Tuweni distribution. See https://github.com/jnr/jnr-ffi. JNR-FFI can be included using the gradle dependency `com.github.jnr:jnr-ffi`.
 
 # Package org.apache.tuweni.devp2p
 
 Kotlin coroutine based implementation of the Ethereum ÐΞVp2p protocol.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-devp2p` (`cava-devp2p.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-devp2p` (`tuweni-devp2p.jar`).
 
 # Package org.apache.tuweni.eth
 
 Classes and utilities for working in the Ethereum domain.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-eth` (`cava-eth.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-eth` (`tuweni-eth.jar`).
 
 # Package org.apache.tuweni.io
 
 Classes and utilities for handling file and network IO.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-io` (`cava-io.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-io` (`tuweni-io.jar`).
 
 # Package org.apache.tuweni.io.file
 
@@ -64,31 +64,31 @@ General utilities for working with files and the filesystem.
 
 Utilities for better junit testing.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-junit` (`cava-junit.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-junit` (`tuweni-junit.jar`).
 
 # Package org.apache.tuweni.kademlia
 
 An implementation of the kademlia distributed hash (routing) table.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-kademlia` (`cava-kademlia.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-kademlia` (`tuweni-kademlia.jar`).
 
 # Package org.apache.tuweni.kv
 
 Classes and utilities for working with key/value stores.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-kv` (`cava-kv.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-kv` (`tuweni-kv.jar`).
 
 # Package org.apache.tuweni.net
 
 Classes and utilities for working with networking.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-net` (`cava-net.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-net` (`tuweni-net.jar`).
 
 # Package org.apache.tuweni.net.coroutines
 
 Classes and utilities for coroutine based networking.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-net-coroutines` (`cava-net-coroutines.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-net-coroutines` (`tuweni-net-coroutines.jar`).
 
 # Package org.apache.tuweni.net.tls
 
@@ -100,7 +100,7 @@ Recursive Length Prefix (RLP) encoding and decoding.
 
 An implementation of the Ethereum Recursive Length Prefix (RLP) algorithm, as described at https://github.com/ethereum/wiki/wiki/RLP.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-rlp` (`cava-rlp.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-rlp` (`tuweni-rlp.jar`).
 
 # Package org.apache.tuweni.toml
 
@@ -108,7 +108,7 @@ A parser for Tom's Obvious, Minimal Language (TOML).
 
 A parser and semantic checker for Tom's Obvious, Minimal Language (TOML), as described at https://github.com/toml-lang/toml/.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-toml` (cava-toml.jar).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-toml` (tuweni-toml.jar).
 
 # Package org.apache.tuweni.trie
 
@@ -116,7 +116,7 @@ Merkle Trie implementations.
 
 Implementations of the Ethereum Patricia Trie, as described at https://github.com/ethereum/wiki/wiki/Patricia-Tree.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-merkle-trie` (`cava-merkle-trie.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-merkle-trie` (`tuweni-merkle-trie.jar`).
 
 # Package org.apache.tuweni.trie
 
@@ -126,7 +126,7 @@ Merkle Trie implementations using Kotlin coroutines.
 
 Classes and utilities for working with 256 bit integers and Ethereum units.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-units` (`cava-units.jar`).
+These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency `org.apache.tuweni:tuweni-units` (`tuweni-units.jar`).
 
 # Package org.apache.tuweni.units.bigints
 
diff --git a/bytes/src/main/java/org/apache/tuweni/bytes/package-info.java b/bytes/src/main/java/org/apache/tuweni/bytes/package-info.java
index b357932..9044590 100644
--- a/bytes/src/main/java/org/apache/tuweni/bytes/package-info.java
+++ b/bytes/src/main/java/org/apache/tuweni/bytes/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for working with byte arrays.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-bytes' (cava-bytes.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-bytes' (tuweni-bytes.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.bytes;
diff --git a/concurrent-coroutines/build.gradle b/concurrent-coroutines/build.gradle
index f686a8d..6a2bc8f 100644
--- a/concurrent-coroutines/build.gradle
+++ b/concurrent-coroutines/build.gradle
@@ -1,4 +1,4 @@
-description = 'Kotlin coroutine extensions for cava concurrency primitives.'
+description = 'Kotlin coroutine extensions for tuweni concurrency primitives.'
 
 dependencies {
   compile project(':concurrent')
diff --git a/concurrent/src/main/java/org/apache/tuweni/concurrent/package-info.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/package-info.java
index c0f9c47..e91c569 100644
--- a/concurrent/src/main/java/org/apache/tuweni/concurrent/package-info.java
+++ b/concurrent/src/main/java/org/apache/tuweni/concurrent/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for working with concurrency.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-concurrent' (cava-concurrent.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-concurrent' (tuweni-concurrent.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.concurrent;
diff --git a/config/src/main/java/org/apache/tuweni/config/package-info.java b/config/src/main/java/org/apache/tuweni/config/package-info.java
index 96dd6ce..73f32d3 100644
--- a/config/src/main/java/org/apache/tuweni/config/package-info.java
+++ b/config/src/main/java/org/apache/tuweni/config/package-info.java
@@ -1,8 +1,8 @@
 /**
  * A general-purpose library for managing configuration data.
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-config' (cava-config.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-config' (tuweni-config.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.config;
diff --git a/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/package-info.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/package-info.java
index a299598..c0e1bd1 100644
--- a/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/package-info.java
+++ b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for working with cryptography.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-crypto' (cava-crypto.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-crypto' (tuweni-crypto.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.crypto.mikuli;
diff --git a/crypto/src/main/java/org/apache/tuweni/crypto/package-info.java b/crypto/src/main/java/org/apache/tuweni/crypto/package-info.java
index ba26899..3679659 100644
--- a/crypto/src/main/java/org/apache/tuweni/crypto/package-info.java
+++ b/crypto/src/main/java/org/apache/tuweni/crypto/package-info.java
@@ -2,7 +2,7 @@
  * Classes and utilities for working with cryptography.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-crypto' (cava-crypto.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-crypto' (tuweni-crypto.jar).
  */
 package org.apache.tuweni.crypto;
diff --git a/eth/src/main/java/org/apache/tuweni/eth/package-info.java b/eth/src/main/java/org/apache/tuweni/eth/package-info.java
index d53aa08..47af392 100644
--- a/eth/src/main/java/org/apache/tuweni/eth/package-info.java
+++ b/eth/src/main/java/org/apache/tuweni/eth/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for working in the Ethereum domain.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-eth' (cava-eth.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-eth' (tuweni-eth.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.eth;
diff --git a/io/src/main/java/org/apache/tuweni/io/file/package-info.java b/io/src/main/java/org/apache/tuweni/io/file/package-info.java
index a074b93..ff6e1ae 100644
--- a/io/src/main/java/org/apache/tuweni/io/file/package-info.java
+++ b/io/src/main/java/org/apache/tuweni/io/file/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for handling file IO.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-io' (cava-io.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-io' (tuweni-io.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.io.file;
diff --git a/io/src/main/java/org/apache/tuweni/io/package-info.java b/io/src/main/java/org/apache/tuweni/io/package-info.java
index 7786a7a..c93184c 100644
--- a/io/src/main/java/org/apache/tuweni/io/package-info.java
+++ b/io/src/main/java/org/apache/tuweni/io/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for handling file and network IO.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-io' (cava-io.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-io' (tuweni-io.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.io;
diff --git a/junit/src/main/java/org/apache/tuweni/junit/package-info.java b/junit/src/main/java/org/apache/tuweni/junit/package-info.java
index 2281450..c260f24 100644
--- a/junit/src/main/java/org/apache/tuweni/junit/package-info.java
+++ b/junit/src/main/java/org/apache/tuweni/junit/package-info.java
@@ -2,7 +2,7 @@
  * Utilities for better junit testing.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-junit' (cava-junit.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-junit' (tuweni-junit.jar).
  */
 package org.apache.tuweni.junit;
diff --git a/kv/src/main/java/org/apache/tuweni/kv/package-info.java b/kv/src/main/java/org/apache/tuweni/kv/package-info.java
index 14cac5a..f0db056 100644
--- a/kv/src/main/java/org/apache/tuweni/kv/package-info.java
+++ b/kv/src/main/java/org/apache/tuweni/kv/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for working with key/value stores.
  *
  * <p>
- * These classes are included in the complete Cava distribution, or separately when using the gradle dependency
- * `org.apache.tuweni:cava-kv` (`cava-kv.jar`).
+ * These classes are included in the complete Tuweni distribution, or separately when using the gradle dependency
+ * `org.apache.tuweni:tuweni-kv` (`tuweni-kv.jar`).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.kv;
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
index 3724d1c..74c4516 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
@@ -73,9 +73,9 @@ class RedisKeyValueStore(uri: String) : KeyValueStore {
     fun open(port: Int, address: InetAddress) = RedisKeyValueStore(port, address)
 
     /**
-     * A [RedisCodec] for working with cava Bytes classes.
+     * A [RedisCodec] for working with Bytes classes.
      *
-     * @return A [RedisCodec] for working with cava Bytes classes.
+     * @return A [RedisCodec] for working with Bytes classes.
      */
     @JvmStatic
     fun codec(): RedisCodec<Bytes, Bytes> = RedisBytesCodec()
diff --git a/merkle-trie/src/main/java/org/apache/tuweni/trie/package-info.java b/merkle-trie/src/main/java/org/apache/tuweni/trie/package-info.java
index f689298..724502d 100644
--- a/merkle-trie/src/main/java/org/apache/tuweni/trie/package-info.java
+++ b/merkle-trie/src/main/java/org/apache/tuweni/trie/package-info.java
@@ -5,8 +5,8 @@
  * "https://github.com/ethereum/wiki/wiki/Patricia-Tree">https://github.com/ethereum/wiki/wiki/Patricia-Tree</a>.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-merkle-trie' (cava-merkle-trie.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-merkle-trie' (tuweni-merkle-trie.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.trie;
diff --git a/net/src/main/java/org/apache/tuweni/net/package-info.java b/net/src/main/java/org/apache/tuweni/net/package-info.java
index 6184ac4..a57e3dc 100644
--- a/net/src/main/java/org/apache/tuweni/net/package-info.java
+++ b/net/src/main/java/org/apache/tuweni/net/package-info.java
@@ -2,7 +2,7 @@
  * Classes and utilities for working with networking.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-net' (cava-net.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-net' (tuweni-net.jar).
  */
 package org.apache.tuweni.net;
diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/package-info.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/package-info.java
index cfcfbb4..cc10f0d 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/package-info.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/package-info.java
@@ -2,8 +2,8 @@
  * Library for Plumtree - Push-Lazy-pUsh Multicast TREE, an implementation of Epidemic Broadcast Tree
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-plumtree' (cava-plumtree.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-plumtree' (tuweni-plumtree.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.plumtree;
diff --git a/rlp/src/main/java/org/apache/tuweni/rlp/package-info.java b/rlp/src/main/java/org/apache/tuweni/rlp/package-info.java
index 8859488..1b691e5 100644
--- a/rlp/src/main/java/org/apache/tuweni/rlp/package-info.java
+++ b/rlp/src/main/java/org/apache/tuweni/rlp/package-info.java
@@ -4,8 +4,8 @@
  * An implementation of the Ethereum Recursive Length Prefix (RLP) algorithm, as described at
  * <a href="https://github.com/ethereum/wiki/wiki/RLP">https://github.com/ethereum/wiki/wiki/RLP</a>.
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-rlp' (cava-rlp.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-rlp' (tuweni-rlp.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.rlp;
diff --git a/rlpx/src/main/java/org/apache/tuweni/rlpx/package-info.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/package-info.java
index e574b4a..a9f8d1f 100644
--- a/rlpx/src/main/java/org/apache/tuweni/rlpx/package-info.java
+++ b/rlpx/src/main/java/org/apache/tuweni/rlpx/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for working with the RLPx wire protocol.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-rlpx' (cava-rlpx.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-rlpx' (tuweni-rlpx.jar).
  */
 @ParametersAreNonnullByDefault
 
diff --git a/rlpx/src/main/java/org/apache/tuweni/rlpx/vertx/package-info.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/vertx/package-info.java
index fd4aa85..d738cfd 100644
--- a/rlpx/src/main/java/org/apache/tuweni/rlpx/vertx/package-info.java
+++ b/rlpx/src/main/java/org/apache/tuweni/rlpx/vertx/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for working with the RLPx wire protocol.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-rlpx' (cava-rlpx.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-rlpx' (tuweni-rlpx.jar).
  */
 @ParametersAreNonnullByDefault
 
diff --git a/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/package-info.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/package-info.java
index 1c37089..de436bb 100644
--- a/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/package-info.java
+++ b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/package-info.java
@@ -2,8 +2,8 @@
  * Classes and utilities for working with the RLPx wire protocol.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-rlpx' (cava-rlpx.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-rlpx' (tuweni-rlpx.jar).
  */
 @ParametersAreNonnullByDefault
 
diff --git a/scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/package-info.java b/scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/package-info.java
index 96415e1..1264034 100644
--- a/scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/package-info.java
+++ b/scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/package-info.java
@@ -5,8 +5,8 @@
  * <a href="https://ssbc.github.io/scuttlebutt-protocol-guide/">the Scuttlebutt protocol guide</a>.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-scuttlebutt-discovery' (cava-scuttlebutt-discovery.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-scuttlebutt-discovery' (tuweni-scuttlebutt-discovery.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.scuttlebutt.discovery;
diff --git a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/package-info.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/package-info.java
index e219a8e..a90b10e 100644
--- a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/package-info.java
+++ b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/package-info.java
@@ -5,8 +5,8 @@
  * <a href="https://ssbc.github.io/scuttlebutt-protocol-guide/">the Scuttlebutt protocol guide</a>.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-scuttlebutt-handshake' (cava-scuttlebutt-handshake.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-scuttlebutt-handshake' (tuweni-scuttlebutt-handshake.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.scuttlebutt.handshake;
diff --git a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/package-info.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/package-info.java
index ba15361..e09f228 100644
--- a/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/package-info.java
+++ b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/package-info.java
@@ -5,8 +5,8 @@
  * <a href="https://ssbc.github.io/scuttlebutt-protocol-guide/">the Scuttlebutt protocol guide</a>.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-scuttlebutt-handshake' (cava-scuttlebutt-handshake.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-scuttlebutt-handshake' (tuweni-scuttlebutt-handshake.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.scuttlebutt.handshake.vertx;
diff --git a/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/package-info.java b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/package-info.java
index d440d98..2214bf6 100644
--- a/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/package-info.java
+++ b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/package-info.java
@@ -5,8 +5,8 @@
  * <a href="https://ssbc.github.io/scuttlebutt-protocol-guide/">the Scuttlebutt protocol guide</a>.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-scuttlebutt' (cava-scuttlebutt.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-scuttlebutt' (tuweni-scuttlebutt.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.scuttlebutt;
diff --git a/settings.gradle b/settings.gradle
index 7f92a2d..f6e1850 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,4 +1,4 @@
-rootProject.name='cava'
+rootProject.name='tuweni'
 include 'bytes'
 include 'concurrent'
 include 'concurrent-coroutines'
diff --git a/ssz/src/main/java/org/apache/tuweni/ssz/package-info.java b/ssz/src/main/java/org/apache/tuweni/ssz/package-info.java
index 74c66a9..bb0e5d1 100644
--- a/ssz/src/main/java/org/apache/tuweni/ssz/package-info.java
+++ b/ssz/src/main/java/org/apache/tuweni/ssz/package-info.java
@@ -4,8 +4,8 @@
  * An implementation of the Ethereum Simple Serialize (SSZ) algorithm, as described at <a href=
  * "https://github.com/ethereum/eth2.0-specs/blob/master/specs/simple-serialize.md">https://github.com/ethereum/eth2.0-specs/blob/master/specs/simple-serialize.md</a>.
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-ssz' (cava-ssz.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-ssz' (tuweni-ssz.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.ssz;
diff --git a/toml/README.md b/toml/README.md
index 9d59977..13bc81c 100644
--- a/toml/README.md
+++ b/toml/README.md
@@ -1,6 +1,6 @@
-# Cava-Toml: TOML parser for Java/Kotlin (by ConsenSys)
+# Tuweni-Toml: TOML parser for Java/Kotlin
 
-Cava-Toml is a complete TOML parser with the following attributes:
+Tuweni-Toml is a complete TOML parser with the following attributes:
 
 * Supports the latest TOML specification version (0.5.0).
 * Provides detailed error reporting, including error position.
@@ -20,29 +20,3 @@ result.errors().forEach(error -> System.err.println(error.toString()));
 
 String value = result.getString("a. dotted . key");
 ```
-
-## Getting Cava-Toml
-
-Cava-Toml is part of the [ConsenSys Cava](https://github.com/ConsenSys/cava) project, and is available whenever cava is included in a project.
-
-It can also be included independently, using the cava-toml jar, which is published to [ConsenSys bintray repository](https://bintray.com/consensys/consensys/cava) and linked to JCenter.
-
-With Maven:
-```
-<dependency>
-  <groupId>org.apache.tuweni</groupId>
-  <artifactId>cava-toml</artifactId>
-  <version>0.6.0</version>
-</dependency>
-```
-
-With Gradle: `compile 'org.apache.tuweni:cava-toml:0.6.0'`
-
-## Links
-
-- [GitHub project](https://github.com/consensys/cava)
-- [Online Java documentation](https://consensys.github.io/cava/docs/java/latest/net/consensys/cava/toml/package-summary.html)
-- [Online Kotlin documentation](https://consensys.github.io/cava/docs/kotlin/latest/cava/org.apache.tuweni.toml/index.html)
-- [Issue tracker: Report a defect or feature request](https://github.com/google/cava/issues/new)
-- [StackOverflow: Ask "how-to" and "why-didn't-it-work" questions](https://stackoverflow.com/questions/ask?tags=cava+toml+java)
-- [cava-discuss: For open-ended questions and discussion](http://groups.google.com/group/cava-discuss)
diff --git a/toml/src/main/java/org/apache/tuweni/toml/package-info.java b/toml/src/main/java/org/apache/tuweni/toml/package-info.java
index cf51f82..17caa06 100644
--- a/toml/src/main/java/org/apache/tuweni/toml/package-info.java
+++ b/toml/src/main/java/org/apache/tuweni/toml/package-info.java
@@ -4,8 +4,8 @@
  * A parser and semantic checker for Tom's Obvious, Minimal Language (TOML), as described at
  * <a href="https://github.com/toml-lang/toml/">https://github.com/toml-lang/toml/</a>.
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-toml' (cava-toml.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-toml' (tuweni-toml.jar).
  */
 @ParametersAreNonnullByDefault
 package org.apache.tuweni.toml;
diff --git a/units/src/main/java/org/apache/tuweni/units/package-info.java b/units/src/main/java/org/apache/tuweni/units/package-info.java
index d1a42f7..8cee8a9 100644
--- a/units/src/main/java/org/apache/tuweni/units/package-info.java
+++ b/units/src/main/java/org/apache/tuweni/units/package-info.java
@@ -2,7 +2,7 @@
  * Classes and utilities for working with 256 bit integers and Ethereum units.
  *
  * <p>
- * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'org.apache.tuweni:cava-units' (cava-units.jar).
+ * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
+ * 'org.apache.tuweni:tuweni-units' (tuweni-units.jar).
  */
 package org.apache.tuweni.units;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 05/32: Move files to new packages

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit a80c0f3bf0311c449873217939e5bfa8d06e293b
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Tue Apr 2 23:24:52 2019 -0700

    Move files to new packages
---
 .../{net/consensys/cava => org/apache/tuweni}/bytes/AbstractBytes.java    | 0
 .../consensys/cava => org/apache/tuweni}/bytes/ArrayWrappingBytes.java    | 0
 .../consensys/cava => org/apache/tuweni}/bytes/ArrayWrappingBytes32.java  | 0
 .../consensys/cava => org/apache/tuweni}/bytes/ArrayWrappingBytes48.java  | 0
 .../consensys/cava => org/apache/tuweni}/bytes/BufferWrappingBytes.java   | 0
 .../consensys/cava => org/apache/tuweni}/bytes/ByteBufWrappingBytes.java  | 0
 .../cava => org/apache/tuweni}/bytes/ByteBufferWrappingBytes.java         | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/bytes/Bytes.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/bytes/Bytes32.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/bytes/Bytes48.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/bytes/BytesValues.java | 0
 .../consensys/cava => org/apache/tuweni}/bytes/ConcatenatedBytes.java     | 0
 .../consensys/cava => org/apache/tuweni}/bytes/DelegatingBytes32.java     | 0
 .../consensys/cava => org/apache/tuweni}/bytes/DelegatingBytes48.java     | 0
 .../cava => org/apache/tuweni}/bytes/DelegatingMutableBytes32.java        | 0
 .../cava => org/apache/tuweni}/bytes/DelegatingMutableBytes48.java        | 0
 .../cava => org/apache/tuweni}/bytes/MutableArrayWrappingBytes.java       | 0
 .../cava => org/apache/tuweni}/bytes/MutableArrayWrappingBytes32.java     | 0
 .../cava => org/apache/tuweni}/bytes/MutableArrayWrappingBytes48.java     | 0
 .../cava => org/apache/tuweni}/bytes/MutableBufferWrappingBytes.java      | 0
 .../cava => org/apache/tuweni}/bytes/MutableByteBufWrappingBytes.java     | 0
 .../cava => org/apache/tuweni}/bytes/MutableByteBufferWrappingBytes.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/bytes/MutableBytes.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/bytes/MutableBytes32.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/bytes/MutableBytes48.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/bytes/package-info.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/bytes/BufferBytesTest.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/bytes/ByteBufBytesTest.java | 0
 .../consensys/cava => org/apache/tuweni}/bytes/ByteBufferBytesTest.java   | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/bytes/Bytes32Test.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/bytes/Bytes48Test.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/bytes/BytesTest.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/bytes/CommonBytesTests.java | 0
 .../consensys/cava => org/apache/tuweni}/bytes/ConcatenatedBytesTest.java | 0
 .../cava => org/apache/tuweni}/concurrent/coroutines/AsyncCompletion.kt   | 0
 .../cava => org/apache/tuweni}/concurrent/coroutines/AsyncResult.kt       | 0
 .../cava => org/apache/tuweni}/concurrent/coroutines/CoroutineLatch.kt    | 0
 .../cava => org/apache/tuweni}/concurrent/coroutines/Retryable.kt         | 0
 .../apache/tuweni}/concurrent/coroutines/CoroutineLatchTest.kt            | 0
 .../cava => org/apache/tuweni}/concurrent/coroutines/RetryableTest.kt     | 0
 .../consensys/cava => org/apache/tuweni}/concurrent/AsyncCompletion.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/concurrent/AsyncResult.java | 0
 .../consensys/cava => org/apache/tuweni}/concurrent/AtomicSlotMap.java    | 0
 .../cava => org/apache/tuweni}/concurrent/CompletableAsyncCompletion.java | 0
 .../cava => org/apache/tuweni}/concurrent/CompletableAsyncResult.java     | 0
 .../apache/tuweni}/concurrent/DefaultCompletableAsyncCompletion.java      | 0
 .../apache/tuweni}/concurrent/DefaultCompletableAsyncResult.java          | 0
 .../{net/consensys/cava => org/apache/tuweni}/concurrent/ExpiringMap.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/concurrent/ExpiringSet.java | 0
 .../consensys/cava => org/apache/tuweni}/concurrent/package-info.java     | 0
 .../cava => org/apache/tuweni}/concurrent/AtomicSlotMapTest.java          | 0
 .../apache/tuweni}/concurrent/DefaultCompletableAsyncCompletionTest.java  | 0
 .../apache/tuweni}/concurrent/DefaultCompletableAsyncResultTest.java      | 0
 .../consensys/cava => org/apache/tuweni}/concurrent/ExpiringMapTest.java  | 0
 .../consensys/cava => org/apache/tuweni}/concurrent/ExpiringSetTest.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/config/Configuration.java   | 0
 .../consensys/cava => org/apache/tuweni}/config/ConfigurationError.java   | 0
 .../consensys/cava => org/apache/tuweni}/config/ConfigurationErrors.java  | 0
 .../cava => org/apache/tuweni}/config/ConfigurationValidator.java         | 0
 .../consensys/cava => org/apache/tuweni}/config/DocumentPosition.java     | 0
 .../consensys/cava => org/apache/tuweni}/config/EmptyConfiguration.java   | 0
 .../apache/tuweni}/config/InvalidConfigurationPropertyTypeException.java  | 0
 .../apache/tuweni}/config/NoConfigurationPropertyException.java           | 0
 .../consensys/cava => org/apache/tuweni}/config/PropertyValidator.java    | 0
 .../consensys/cava => org/apache/tuweni}/config/PropertyValidators.java   | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/config/Schema.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/config/SchemaBuilder.java   | 0
 .../cava => org/apache/tuweni}/config/TomlBackedConfiguration.java        | 0
 .../{net/consensys/cava => org/apache/tuweni}/config/TomlSerializer.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/config/package-info.java    | 0
 .../cava => org/apache/tuweni}/config/PropertyValidatorTest.java          | 0
 .../consensys/cava => org/apache/tuweni}/config/SchemaBuilderTest.java    | 0
 .../cava => org/apache/tuweni}/config/TomlBackedConfigurationTest.java    | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/crypto/Hash.java  | 0
 .../apache/tuweni}/crypto/InvalidSEC256K1SecretKeyStoreException.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/crypto/SECP256K1.java  | 0
 .../consensys/cava => org/apache/tuweni}/crypto/mikuli/AtePairing.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/mikuli/BLS12381.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/mikuli/G1Point.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/mikuli/G2Point.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/mikuli/GTPoint.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/mikuli/Group.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/mikuli/KeyPair.java  | 0
 .../consensys/cava => org/apache/tuweni}/crypto/mikuli/PublicKey.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/mikuli/Scalar.java   | 0
 .../consensys/cava => org/apache/tuweni}/crypto/mikuli/SecretKey.java     | 0
 .../consensys/cava => org/apache/tuweni}/crypto/mikuli/Signature.java     | 0
 .../cava => org/apache/tuweni}/crypto/mikuli/SignatureAndPublicKey.java   | 0
 .../consensys/cava => org/apache/tuweni}/crypto/mikuli/package-info.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/package-info.java    | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/AES256GCM.java     | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/Allocated.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/sodium/Auth.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/crypto/sodium/Box.java | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/Concatenate.java   | 0
 .../apache/tuweni}/crypto/sodium/DefaultDetachedEncryptionResult.java     | 0
 .../apache/tuweni}/crypto/sodium/DetachedEncryptionResult.java            | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/DiffieHelman.java  | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/GenericHash.java   | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/HMACSHA256.java    | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/HMACSHA512.java    | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/HMACSHA512256.java | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/KeyDerivation.java | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/KeyExchange.java   | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/LibSodium.java     | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/PasswordHash.java  | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/SHA256Hash.java    | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/SecretBox.java     | 0
 .../cava => org/apache/tuweni}/crypto/sodium/SecretDecryptionStream.java  | 0
 .../cava => org/apache/tuweni}/crypto/sodium/SecretEncryptionStream.java  | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/Signature.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/sodium/Sodium.java   | 0
 .../cava => org/apache/tuweni}/crypto/sodium/SodiumException.java         | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/SodiumVersion.java | 0
 .../cava => org/apache/tuweni}/crypto/sodium/XChaCha20Poly1305.java       | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/package-info.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/crypto/HashTest.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/SECP256K1Test.java   | 0
 .../consensys/cava => org/apache/tuweni}/crypto/mikuli/SignatureTest.java | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/AES256GCMTest.java | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/AllocatedTest.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/sodium/AuthTest.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/crypto/sodium/BoxTest.java  | 0
 .../cava => org/apache/tuweni}/crypto/sodium/ConcatenateTest.java         | 0
 .../cava => org/apache/tuweni}/crypto/sodium/DiffieHelmanTest.java        | 0
 .../cava => org/apache/tuweni}/crypto/sodium/GenericHashTest.java         | 0
 .../cava => org/apache/tuweni}/crypto/sodium/HMACSHA256Test.java          | 0
 .../cava => org/apache/tuweni}/crypto/sodium/HMACSHA512256Test.java       | 0
 .../cava => org/apache/tuweni}/crypto/sodium/HMACSHA512Test.java          | 0
 .../cava => org/apache/tuweni}/crypto/sodium/KeyDerivationTest.java       | 0
 .../cava => org/apache/tuweni}/crypto/sodium/PasswordHashTest.java        | 0
 .../cava => org/apache/tuweni}/crypto/sodium/SHA256HashTest.java          | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/SecretBoxTest.java | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/SignatureTest.java | 0
 .../consensys/cava => org/apache/tuweni}/crypto/sodium/SodiumTest.java    | 0
 .../cava => org/apache/tuweni}/crypto/sodium/XChaCha20Poly1305Test.java   | 0
 .../consensys/cava => org/apache/tuweni}/devp2p/AtomicLongProperty.kt     | 0
 .../{net/consensys/cava => org/apache/tuweni}/devp2p/DiscoveryService.kt  | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/devp2p/Endpoint.kt   | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/devp2p/EnodeUri.kt   | 0
 .../main/kotlin/{net/consensys/cava => org/apache/tuweni}/devp2p/Node.kt  | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/devp2p/Packet.kt     | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/devp2p/PacketType.kt | 0
 .../main/kotlin/{net/consensys/cava => org/apache/tuweni}/devp2p/Peer.kt  | 0
 .../{net/consensys/cava => org/apache/tuweni}/devp2p/PeerRepository.kt    | 0
 .../{net/consensys/cava => org/apache/tuweni}/devp2p/PeerRoutingTable.kt  | 0
 .../cava => org/apache/tuweni}/devp2p/DiscoveryServiceJavaTest.java       | 0
 .../consensys/cava => org/apache/tuweni}/devp2p/DiscoveryServiceTest.kt   | 0
 .../{net/consensys/cava => org/apache/tuweni}/devp2p/EndpointTest.kt      | 0
 .../cava => org/apache/tuweni}/devp2p/EphemeralPeerRepositoryTest.kt      | 0
 .../consensys/cava => org/apache/tuweni}/devp2p/FindNodePacketTest.kt     | 0
 .../consensys/cava => org/apache/tuweni}/devp2p/NeighborsPacketTest.kt    | 0
 .../{net/consensys/cava => org/apache/tuweni}/devp2p/PingPacketTest.kt    | 0
 .../{net/consensys/cava => org/apache/tuweni}/devp2p/PongPacketTest.kt    | 0
 .../cava => org/apache/tuweni}/eth/reference/BlockRLPTestSuite.java       | 0
 .../cava => org/apache/tuweni}/eth/reference/MerkleTrieTestSuite.java     | 0
 .../cava => org/apache/tuweni}/eth/reference/RLPReferenceTestSuite.java   | 0
 .../consensys/cava => org/apache/tuweni}/eth/reference/SSZTestSuite.java  | 0
 .../cava => org/apache/tuweni}/eth/reference/TransactionTestSuite.java    | 0
 .../cava => org/apache/tuweni}/eth/repository/BlockHeaderFields.kt        | 0
 .../cava => org/apache/tuweni}/eth/repository/BlockchainIndex.kt          | 0
 .../cava => org/apache/tuweni}/eth/repository/BlockchainRepository.kt     | 0
 .../cava => org/apache/tuweni}/eth/repository/TransactionReceiptFields.kt | 0
 .../cava => org/apache/tuweni}/eth/repository/BlockchainIndexTest.kt      | 0
 .../cava => org/apache/tuweni}/eth/repository/BlockchainRepositoryTest.kt | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/eth/Address.java  | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/eth/Block.java    | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/eth/BlockBody.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/eth/BlockHeader.java   | 0
 eth/src/main/java/{net/consensys/cava => org/apache/tuweni}/eth/Hash.java | 0
 eth/src/main/java/{net/consensys/cava => org/apache/tuweni}/eth/Log.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/eth/LogsBloomFilter.java    | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/eth/Transaction.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/eth/TransactionReceipt.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/eth/package-info.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/eth/BlockBodyTest.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/eth/BlockHeaderTest.java    | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/eth/BlockTest.java     | 0
 .../test/java/{net/consensys/cava => org/apache/tuweni}/eth/LogTest.java  | 0
 .../consensys/cava => org/apache/tuweni}/eth/LogsBloomFilterTest.java     | 0
 .../consensys/cava => org/apache/tuweni}/eth/TransactionReceiptTest.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/eth/TransactionTest.java    | 0
 io/src/main/java/{net/consensys/cava => org/apache/tuweni}/io/Base64.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/io/IOConsumer.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/io/NullOutputStream.java    | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/io/Resources.java | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/io/Streams.java   | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/io/file/Files.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/io/file/package-info.java   | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/io/package-info.java   | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/io/Base64Test.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/io/ResourcesTest.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/io/StreamsTest.java    | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/io/file/FilesTest.java | 0
 .../cava => org/apache/tuweni}/io/file/resourceresolver/subdir/test3.yaml | 0
 .../cava => org/apache/tuweni}/io/file/resourceresolver/test1.txt         | 0
 .../cava => org/apache/tuweni}/io/file/resourceresolver/test2.txt         | 0
 .../resources/{net/consensys/cava => org/apache/tuweni}/io/file/test.txt  | 0
 .../consensys/cava => org/apache/tuweni}/junit/BouncyCastleExtension.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/junit/LuceneIndex.java | 0
 .../consensys/cava => org/apache/tuweni}/junit/LuceneIndexWriter.java     | 0
 .../cava => org/apache/tuweni}/junit/LuceneIndexWriterExtension.java      | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/junit/RedisPort.java   | 0
 .../consensys/cava => org/apache/tuweni}/junit/RedisServerExtension.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/junit/TempDirectory.java    | 0
 .../cava => org/apache/tuweni}/junit/TempDirectoryExtension.java          | 0
 .../{net/consensys/cava => org/apache/tuweni}/junit/VertxExtension.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/junit/VertxInstance.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/junit/package-info.java     | 0
 .../cava => org/apache/tuweni}/junit/LuceneIndexWriterExtensionTest.java  | 0
 .../cava => org/apache/tuweni}/junit/RedisServerExtensionTest.java        | 0
 .../cava => org/apache/tuweni}/junit/TempDirectoryExtensionTest.java      | 0
 .../consensys/cava => org/apache/tuweni}/kademlia/KademliaRoutingTable.kt | 0
 .../cava => org/apache/tuweni}/kademlia/KademliaRoutingTableTest.kt       | 0
 .../cava => org/apache/tuweni}/kademlia/LogarithmicDistanceTest.kt        | 0
 .../consensys/cava => org/apache/tuweni}/kademlia/OrderedInsertTest.kt    | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/RedisBytesCodec.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/kv/package-info.java   | 0
 .../consensys/cava => org/apache/tuweni}/kv/InfinispanKeyValueStore.kt    | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/kv/KeyValueStore.kt  | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/LevelDBKeyValueStore.kt  | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/MapDBKeyValueStore.kt    | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/MapKeyValueStore.kt      | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/RedisKeyValueStore.kt    | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/RocksDBKeyValueStore.kt  | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/SQLKeyValueStore.kt      | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/KeyValueStoreTest.java   | 0
 .../consensys/cava => org/apache/tuweni}/kv/RedisKeyValueStoreTest.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/kv/KeyValueStoreSpec.kt     | 0
 .../{net/consensys/cava => org/apache/tuweni}/les/BlockBodiesMessage.kt   | 0
 .../{net/consensys/cava => org/apache/tuweni}/les/BlockHeadersMessage.kt  | 0
 .../consensys/cava => org/apache/tuweni}/les/GetBlockBodiesMessage.kt     | 0
 .../consensys/cava => org/apache/tuweni}/les/GetBlockHeadersMessage.kt    | 0
 .../{net/consensys/cava => org/apache/tuweni}/les/GetReceiptsMessage.kt   | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/les/LESPeerState.kt  | 0
 .../consensys/cava => org/apache/tuweni}/les/LESSubProtocolHandler.kt     | 0
 .../{net/consensys/cava => org/apache/tuweni}/les/LESSubprotocol.kt       | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/les/LightClient.kt   | 0
 .../{net/consensys/cava => org/apache/tuweni}/les/ReceiptsMessage.kt      | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/les/StatusMessage.kt | 0
 .../consensys/cava => org/apache/tuweni}/les/LESSubProtocolHandlerTest.kt | 0
 .../{net/consensys/cava => org/apache/tuweni}/les/LESSubprotocolTest.kt   | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/les/MessagesTest.kt  | 0
 .../{net/consensys/cava => org/apache/tuweni}/trie/CompactEncoding.java   | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/trie/package-info.java | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/BranchNode.kt   | 0
 .../{net/consensys/cava => org/apache/tuweni}/trie/DefaultNodeFactory.kt  | 0
 .../{net/consensys/cava => org/apache/tuweni}/trie/ExtensionNode.kt       | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/GetVisitor.kt   | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/LeafNode.kt     | 0
 .../{net/consensys/cava => org/apache/tuweni}/trie/MerklePatriciaTrie.kt  | 0
 .../{net/consensys/cava => org/apache/tuweni}/trie/MerkleStorage.kt       | 0
 .../consensys/cava => org/apache/tuweni}/trie/MerkleStorageException.kt   | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/MerkleTrie.kt   | 0
 .../main/kotlin/{net/consensys/cava => org/apache/tuweni}/trie/Node.kt    | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/NodeFactory.kt  | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/NodeVisitor.kt  | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/NullNode.kt     | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/PutVisitor.kt   | 0
 .../{net/consensys/cava => org/apache/tuweni}/trie/RemoveVisitor.kt       | 0
 .../consensys/cava => org/apache/tuweni}/trie/StoredMerklePatriciaTrie.kt | 0
 .../kotlin/{net/consensys/cava => org/apache/tuweni}/trie/StoredNode.kt   | 0
 .../{net/consensys/cava => org/apache/tuweni}/trie/StoredNodeFactory.kt   | 0
 .../consensys/cava => org/apache/tuweni}/trie/CompactEncodingTest.java    | 0
 .../cava => org/apache/tuweni}/trie/MerklePatriciaTrieJavaTest.java       | 0
 .../apache/tuweni}/trie/MerklePatriciaTriePerformanceTest.java            | 0
 .../cava => org/apache/tuweni}/trie/StoredMerklePatriciaTrieJavaTest.java | 0
 .../cava => org/apache/tuweni}/trie/MerklePatriciaTrieKotlinTest.kt       | 0
 .../cava => org/apache/tuweni}/trie/StoredMerklePatriciaTrieKotlinTest.kt | 0
 .../cava => org/apache/tuweni}/net/coroutines/CoroutineByteChannel.kt     | 0
 .../cava => org/apache/tuweni}/net/coroutines/CoroutineChannelGroup.kt    | 0
 .../cava => org/apache/tuweni}/net/coroutines/CoroutineDatagramChannel.kt | 0
 .../cava => org/apache/tuweni}/net/coroutines/CoroutineNetworkChannel.kt  | 0
 .../cava => org/apache/tuweni}/net/coroutines/CoroutineSelector.kt        | 0
 .../apache/tuweni}/net/coroutines/CoroutineServerSocketChannel.kt         | 0
 .../cava => org/apache/tuweni}/net/coroutines/CoroutineSocketChannel.kt   | 0
 .../consensys/cava => org/apache/tuweni}/net/coroutines/SelectorTest.java | 0
 .../apache/tuweni}/net/coroutines/CoroutineChannelGroupTest.kt            | 0
 .../apache/tuweni}/net/coroutines/CoroutineDatagramChannelTest.kt         | 0
 .../cava => org/apache/tuweni}/net/coroutines/CoroutineSelectorTest.kt    | 0
 .../apache/tuweni}/net/coroutines/CoroutineSocketChannelTest.kt           | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/net/package-info.java  | 0
 .../cava => org/apache/tuweni}/net/tls/ClientFingerprintTrustManager.java | 0
 .../cava => org/apache/tuweni}/net/tls/DelegatingTrustManagerFactory.java | 0
 .../apache/tuweni}/net/tls/FileBackedFingerprintRepository.java           | 0
 .../cava => org/apache/tuweni}/net/tls/FingerprintRepository.java         | 0
 .../cava => org/apache/tuweni}/net/tls/ServerFingerprintTrustManager.java | 0
 .../cava => org/apache/tuweni}/net/tls/SingleTrustManagerFactory.java     | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/net/tls/TLS.java  | 0
 .../cava => org/apache/tuweni}/net/tls/TLSEnvironmentException.java       | 0
 .../cava => org/apache/tuweni}/net/tls/TrustManagerFactories.java         | 0
 .../cava => org/apache/tuweni}/net/tls/TrustManagerFactoryWrapper.java    | 0
 .../consensys/cava => org/apache/tuweni}/net/tls/VertxTrustOptions.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/net/tls/package-info.java   | 0
 .../cava => org/apache/tuweni}/net/tls/ClientCaOrRecordTest.java          | 0
 .../consensys/cava => org/apache/tuweni}/net/tls/ClientCaOrTofuTest.java  | 0
 .../cava => org/apache/tuweni}/net/tls/ClientCaOrWhitelistTest.java       | 0
 .../consensys/cava => org/apache/tuweni}/net/tls/ClientRecordTest.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/net/tls/ClientTofuTest.java | 0
 .../consensys/cava => org/apache/tuweni}/net/tls/ClientWhitelistTest.java | 0
 .../apache/tuweni}/net/tls/FileBackedFingerprintRepositoryTest.java       | 0
 .../cava => org/apache/tuweni}/net/tls/InsecureTrustOptions.java          | 0
 .../consensys/cava => org/apache/tuweni}/net/tls/SecurityTestUtils.java   | 0
 .../cava => org/apache/tuweni}/net/tls/ServerCaOrRecordTest.java          | 0
 .../consensys/cava => org/apache/tuweni}/net/tls/ServerCaOrTofaTest.java  | 0
 .../cava => org/apache/tuweni}/net/tls/ServerCaOrWhitelistTest.java       | 0
 .../consensys/cava => org/apache/tuweni}/net/tls/ServerRecordTest.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/net/tls/ServerTofaTest.java | 0
 .../consensys/cava => org/apache/tuweni}/net/tls/ServerWhitelistTest.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/net/tls/TLSTest.java   | 0
 .../cava => org/apache/tuweni}/plumtree/EphemeralPeerRepository.java      | 0
 .../consensys/cava => org/apache/tuweni}/plumtree/MessageHashing.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/plumtree/MessageSender.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/plumtree/Peer.java     | 0
 .../consensys/cava => org/apache/tuweni}/plumtree/PeerRepository.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/plumtree/State.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/plumtree/StateActor.java    | 0
 .../consensys/cava => org/apache/tuweni}/plumtree/StateActorFactory.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/plumtree/package-info.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/plumtree/StateTest.java     | 0
 .../consensys/cava => org/apache/tuweni}/rlp/AccumulatingRLPWriter.java   | 0
 .../consensys/cava => org/apache/tuweni}/rlp/ByteBufferRLPWriter.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlp/BytesRLPReader.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlp/BytesRLPWriter.java     | 0
 .../consensys/cava => org/apache/tuweni}/rlp/DelegatingRLPWriter.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlp/EndOfRLPException.java  | 0
 .../cava => org/apache/tuweni}/rlp/InvalidRLPEncodingException.java       | 0
 .../consensys/cava => org/apache/tuweni}/rlp/InvalidRLPTypeException.java | 0
 rlp/src/main/java/{net/consensys/cava => org/apache/tuweni}/rlp/RLP.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/rlp/RLPException.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/rlp/RLPReader.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/rlp/RLPWriter.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/rlp/package-info.java  | 0
 .../consensys/cava => org/apache/tuweni}/rlp/ByteBufferWriterTest.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlp/BytesRLPReaderTest.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlp/BytesRLPWriterTest.java | 0
 .../cava => org/apache/tuweni}/rlpx/EthereumIESEncryptionEngine.java      | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/HandshakeMessage.java  | 0
 .../cava => org/apache/tuweni}/rlpx/InitiatorHandshakeMessage.java        | 0
 .../consensys/cava => org/apache/tuweni}/rlpx/InvalidMACException.java    | 0
 .../cava => org/apache/tuweni}/rlpx/MemoryWireConnectionsRepository.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/RLPxConnection.java    | 0
 .../consensys/cava => org/apache/tuweni}/rlpx/RLPxConnectionFactory.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/rlpx/RLPxMessage.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/rlpx/RLPxService.java  | 0
 .../cava => org/apache/tuweni}/rlpx/ResponderHandshakeMessage.java        | 0
 .../cava => org/apache/tuweni}/rlpx/WireConnectionRepository.java         | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/rlpx/package-info.java | 0
 .../consensys/cava => org/apache/tuweni}/rlpx/vertx/VertxRLPxService.java | 0
 .../consensys/cava => org/apache/tuweni}/rlpx/vertx/package-info.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/wire/Capability.java   | 0
 .../apache/tuweni}/rlpx/wire/DefaultSubProtocolIdentifier.java            | 0
 .../cava => org/apache/tuweni}/rlpx/wire/DefaultWireConnection.java       | 0
 .../consensys/cava => org/apache/tuweni}/rlpx/wire/DisconnectMessage.java | 0
 .../consensys/cava => org/apache/tuweni}/rlpx/wire/DisconnectReason.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/wire/HelloMessage.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/wire/PingMessage.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/wire/PongMessage.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/wire/SubProtocol.java  | 0
 .../cava => org/apache/tuweni}/rlpx/wire/SubProtocolHandler.java          | 0
 .../cava => org/apache/tuweni}/rlpx/wire/SubProtocolIdentifier.java       | 0
 .../consensys/cava => org/apache/tuweni}/rlpx/wire/WireConnection.java    | 0
 .../cava => org/apache/tuweni}/rlpx/wire/WireProtocolMessage.java         | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/wire/package-info.java | 0
 .../cava => org/apache/tuweni}/rlpx/RLPxConnectionFactoryTest.java        | 0
 .../cava => org/apache/tuweni}/rlpx/vertx/VertxAcceptanceTest.java        | 0
 .../cava => org/apache/tuweni}/rlpx/vertx/VertxRLPxServiceTest.java       | 0
 .../cava => org/apache/tuweni}/rlpx/wire/DefaultWireConnectionTest.java   | 0
 .../cava => org/apache/tuweni}/rlpx/wire/DisconnectMessageTest.java       | 0
 .../consensys/cava => org/apache/tuweni}/rlpx/wire/HelloMessageTest.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/rlpx/wire/PingPongTest.java | 0
 .../apache/tuweni}/rlpx/wire/RLPxConnectionMessageExchangeTest.java       | 0
 .../cava => org/apache/tuweni}/scuttlebutt/discovery/LocalIdentity.java   | 0
 .../tuweni}/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java   | 0
 .../cava => org/apache/tuweni}/scuttlebutt/discovery/package-info.java    | 0
 .../apache/tuweni}/scuttlebutt/discovery/LocalIdentityTest.java           | 0
 .../scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java       | 0
 .../apache/tuweni}/scuttlebutt/handshake/HandshakeException.java          | 0
 .../tuweni}/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java   | 0
 .../tuweni}/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java   | 0
 .../apache/tuweni}/scuttlebutt/handshake/SecureScuttlebuttStream.java     | 0
 .../tuweni}/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java      | 0
 .../tuweni}/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java      | 0
 .../cava => org/apache/tuweni}/scuttlebutt/handshake/StreamException.java | 0
 .../cava => org/apache/tuweni}/scuttlebutt/handshake/package-info.java    | 0
 .../apache/tuweni}/scuttlebutt/handshake/vertx/ClientHandler.java         | 0
 .../apache/tuweni}/scuttlebutt/handshake/vertx/ClientHandlerFactory.java  | 0
 .../tuweni}/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java | 0
 .../tuweni}/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java | 0
 .../apache/tuweni}/scuttlebutt/handshake/vertx/ServerHandler.java         | 0
 .../apache/tuweni}/scuttlebutt/handshake/vertx/ServerHandlerFactory.java  | 0
 .../apache/tuweni}/scuttlebutt/handshake/vertx/package-info.java          | 0
 .../scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java       | 0
 .../apache/tuweni}/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java | 0
 .../apache/tuweni}/scuttlebutt/handshake/vertx/VertxIntegrationTest.java  | 0
 .../consensys/cava => org/apache/tuweni}/scuttlebutt/rpc/RPCCodec.java    | 0
 .../consensys/cava => org/apache/tuweni}/scuttlebutt/rpc/RPCFlag.java     | 0
 .../consensys/cava => org/apache/tuweni}/scuttlebutt/rpc/RPCMessage.java  | 0
 .../apache/tuweni}/scuttlebutt/rpc/PatchworkIntegrationTest.java          | 0
 .../cava => org/apache/tuweni}/scuttlebutt/rpc/RPCEncodingTest.java       | 0
 .../consensys/cava => org/apache/tuweni}/scuttlebutt/rpc/RPCFlagTest.java | 0
 .../cava => org/apache/tuweni}/scuttlebutt/Ed25519KeyPairIdentity.java    | 0
 .../cava => org/apache/tuweni}/scuttlebutt/Ed25519PublicKeyIdentity.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/scuttlebutt/Identity.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/scuttlebutt/Invite.java     | 0
 .../cava => org/apache/tuweni}/scuttlebutt/SECP256K1KeyPairIdentity.java  | 0
 .../apache/tuweni}/scuttlebutt/SECP256K1PublicKeyIdentity.java            | 0
 .../consensys/cava => org/apache/tuweni}/scuttlebutt/package-info.java    | 0
 .../consensys/cava => org/apache/tuweni}/scuttlebutt/IdentityTest.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/scuttlebutt/InviteTest.java | 0
 .../consensys/cava => org/apache/tuweni}/ssz/ByteBufferSSZWriter.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/ssz/BytesSSZReader.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/ssz/BytesSSZWriter.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/ssz/EndOfSSZException.java  | 0
 .../consensys/cava => org/apache/tuweni}/ssz/InvalidSSZTypeException.java | 0
 ssz/src/main/java/{net/consensys/cava => org/apache/tuweni}/ssz/SSZ.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/ssz/SSZException.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/ssz/SSZReader.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/ssz/SSZWriter.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/ssz/package-info.java  | 0
 .../cava => org/apache/tuweni}/ssz/experimental/BytesSSZReader.kt         | 0
 .../cava => org/apache/tuweni}/ssz/experimental/BytesSSZWriter.kt         | 0
 .../{net/consensys/cava => org/apache/tuweni}/ssz/experimental/SSZ.kt     | 0
 .../consensys/cava => org/apache/tuweni}/ssz/experimental/SSZReader.kt    | 0
 .../consensys/cava => org/apache/tuweni}/ssz/experimental/SSZWriter.kt    | 0
 .../consensys/cava => org/apache/tuweni}/ssz/ByteBufferWriterTest.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/ssz/BytesSSZReaderTest.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/ssz/BytesSSZWriterTest.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/ssz/HashTreeRootTest.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/ssz/experimental/SSZTest.kt | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/internal/TomlLexer.g4  | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/internal/TomlParser.g4 | 0
 .../cava => org/apache/tuweni}/toml/AccumulatingErrorListener.java        | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/ArrayVisitor.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/ErrorReporter.java     | 0
 .../consensys/cava => org/apache/tuweni}/toml/InlineTableVisitor.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/JsonSerializer.java    | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/KeyVisitor.java   | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/LineVisitor.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/LocalDateVisitor.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/LocalTimeVisitor.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/MutableTomlArray.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/MutableTomlTable.java  | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/toml/Parser.java  | 0
 .../consensys/cava => org/apache/tuweni}/toml/QuotedStringVisitor.java    | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/TokenName.java    | 0
 .../main/java/{net/consensys/cava => org/apache/tuweni}/toml/Toml.java    | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/TomlArray.java    | 0
 .../cava => org/apache/tuweni}/toml/TomlInvalidTypeException.java         | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/TomlParseError.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/TomlParseResult.java   | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/TomlPosition.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/TomlTable.java    | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/TomlType.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/TomlVersion.java  | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/ValueVisitor.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/ZoneOffsetVisitor.java | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/package-info.java | 0
 .../consensys/cava => org/apache/tuweni}/toml/MutableTomlArrayTest.java   | 0
 .../consensys/cava => org/apache/tuweni}/toml/MutableTomlTableTest.java   | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/TokenNameTest.java     | 0
 .../java/{net/consensys/cava => org/apache/tuweni}/toml/TomlTest.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/example-v0.4.0.toml    | 0
 .../{net/consensys/cava => org/apache/tuweni}/toml/hard_example.toml      | 0
 .../consensys/cava => org/apache/tuweni}/toml/hard_example_unicode.toml   | 0
 .../cava => org/apache/tuweni}/toml/toml-v0.5.0-spec-example.toml         | 0
 .../cava => org/apache/tuweni}/units/bigints/BaseUInt256Value.java        | 0
 .../cava => org/apache/tuweni}/units/bigints/BaseUInt384Value.java        | 0
 .../cava => org/apache/tuweni}/units/bigints/BaseUInt64Value.java         | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/bigints/UInt256.java  | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt256Domain.java | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt256Value.java  | 0
 .../cava => org/apache/tuweni}/units/bigints/UInt256ValueDomain.java      | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/bigints/UInt256s.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/bigints/UInt384.java  | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt384Domain.java | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt384Value.java  | 0
 .../cava => org/apache/tuweni}/units/bigints/UInt384ValueDomain.java      | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/bigints/UInt384s.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/bigints/UInt64.java   | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt64Domain.java  | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt64Value.java   | 0
 .../cava => org/apache/tuweni}/units/bigints/UInt64ValueDomain.java       | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/bigints/UInt64s.java  | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/package-info.java  | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/ethereum/Gas.java     | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/ethereum/Wei.java     | 0
 .../consensys/cava => org/apache/tuweni}/units/ethereum/package-info.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/package-info.java     | 0
 .../cava => org/apache/tuweni}/units/bigints/BaseUInt256ValueTest.java    | 0
 .../cava => org/apache/tuweni}/units/bigints/BaseUInt384ValueTest.java    | 0
 .../cava => org/apache/tuweni}/units/bigints/BaseUInt64ValueTest.java     | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt256Test.java   | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt384Test.java   | 0
 .../consensys/cava => org/apache/tuweni}/units/bigints/UInt64Test.java    | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/ethereum/GasTest.java | 0
 .../{net/consensys/cava => org/apache/tuweni}/units/ethereum/WeiTest.java | 0
 497 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/AbstractBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/AbstractBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/ArrayWrappingBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/ArrayWrappingBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java b/bytes/src/main/java/org/apache/tuweni/bytes/ArrayWrappingBytes32.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/ArrayWrappingBytes32.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java b/bytes/src/main/java/org/apache/tuweni/bytes/ArrayWrappingBytes48.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/ArrayWrappingBytes48.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/BufferWrappingBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/BufferWrappingBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/ByteBufWrappingBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/ByteBufWrappingBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/ByteBufferWrappingBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/ByteBufferWrappingBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/Bytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes32.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/Bytes32.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes48.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/Bytes48.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java b/bytes/src/main/java/org/apache/tuweni/bytes/BytesValues.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/BytesValues.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/ConcatenatedBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/ConcatenatedBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes48.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes48.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingMutableBytes32.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/DelegatingMutableBytes32.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingMutableBytes48.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/DelegatingMutableBytes48.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableArrayWrappingBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableArrayWrappingBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableArrayWrappingBytes32.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableArrayWrappingBytes32.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableArrayWrappingBytes48.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableArrayWrappingBytes48.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableBufferWrappingBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableBufferWrappingBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableByteBufWrappingBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableByteBufWrappingBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableByteBufferWrappingBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableByteBufferWrappingBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableBytes.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableBytes.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableBytes32.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableBytes32.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java b/bytes/src/main/java/org/apache/tuweni/bytes/MutableBytes48.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/MutableBytes48.java
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/package-info.java b/bytes/src/main/java/org/apache/tuweni/bytes/package-info.java
similarity index 100%
rename from bytes/src/main/java/net/consensys/cava/bytes/package-info.java
rename to bytes/src/main/java/org/apache/tuweni/bytes/package-info.java
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java b/bytes/src/test/java/org/apache/tuweni/bytes/BufferBytesTest.java
similarity index 100%
rename from bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
rename to bytes/src/test/java/org/apache/tuweni/bytes/BufferBytesTest.java
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java b/bytes/src/test/java/org/apache/tuweni/bytes/ByteBufBytesTest.java
similarity index 100%
rename from bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
rename to bytes/src/test/java/org/apache/tuweni/bytes/ByteBufBytesTest.java
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java b/bytes/src/test/java/org/apache/tuweni/bytes/ByteBufferBytesTest.java
similarity index 100%
rename from bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
rename to bytes/src/test/java/org/apache/tuweni/bytes/ByteBufferBytesTest.java
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java b/bytes/src/test/java/org/apache/tuweni/bytes/Bytes32Test.java
similarity index 100%
rename from bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
rename to bytes/src/test/java/org/apache/tuweni/bytes/Bytes32Test.java
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java b/bytes/src/test/java/org/apache/tuweni/bytes/Bytes48Test.java
similarity index 100%
rename from bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
rename to bytes/src/test/java/org/apache/tuweni/bytes/Bytes48Test.java
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java b/bytes/src/test/java/org/apache/tuweni/bytes/BytesTest.java
similarity index 100%
rename from bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
rename to bytes/src/test/java/org/apache/tuweni/bytes/BytesTest.java
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java b/bytes/src/test/java/org/apache/tuweni/bytes/CommonBytesTests.java
similarity index 100%
rename from bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
rename to bytes/src/test/java/org/apache/tuweni/bytes/CommonBytesTests.java
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java b/bytes/src/test/java/org/apache/tuweni/bytes/ConcatenatedBytesTest.java
similarity index 100%
rename from bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
rename to bytes/src/test/java/org/apache/tuweni/bytes/ConcatenatedBytesTest.java
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt b/concurrent-coroutines/src/main/kotlin/org/apache/tuweni/concurrent/coroutines/AsyncCompletion.kt
similarity index 100%
rename from concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
rename to concurrent-coroutines/src/main/kotlin/org/apache/tuweni/concurrent/coroutines/AsyncCompletion.kt
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt b/concurrent-coroutines/src/main/kotlin/org/apache/tuweni/concurrent/coroutines/AsyncResult.kt
similarity index 100%
rename from concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
rename to concurrent-coroutines/src/main/kotlin/org/apache/tuweni/concurrent/coroutines/AsyncResult.kt
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt b/concurrent-coroutines/src/main/kotlin/org/apache/tuweni/concurrent/coroutines/CoroutineLatch.kt
similarity index 100%
rename from concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
rename to concurrent-coroutines/src/main/kotlin/org/apache/tuweni/concurrent/coroutines/CoroutineLatch.kt
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt b/concurrent-coroutines/src/main/kotlin/org/apache/tuweni/concurrent/coroutines/Retryable.kt
similarity index 100%
rename from concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
rename to concurrent-coroutines/src/main/kotlin/org/apache/tuweni/concurrent/coroutines/Retryable.kt
diff --git a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt b/concurrent-coroutines/src/test/kotlin/org/apache/tuweni/concurrent/coroutines/CoroutineLatchTest.kt
similarity index 100%
rename from concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
rename to concurrent-coroutines/src/test/kotlin/org/apache/tuweni/concurrent/coroutines/CoroutineLatchTest.kt
diff --git a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt b/concurrent-coroutines/src/test/kotlin/org/apache/tuweni/concurrent/coroutines/RetryableTest.kt
similarity index 100%
rename from concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
rename to concurrent-coroutines/src/test/kotlin/org/apache/tuweni/concurrent/coroutines/RetryableTest.kt
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/AsyncCompletion.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/AsyncCompletion.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/AsyncResult.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/AsyncResult.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/AtomicSlotMap.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/AtomicSlotMap.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/CompletableAsyncCompletion.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/CompletableAsyncCompletion.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/CompletableAsyncResult.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/CompletableAsyncResult.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/DefaultCompletableAsyncCompletion.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/DefaultCompletableAsyncCompletion.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/DefaultCompletableAsyncResult.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/DefaultCompletableAsyncResult.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/ExpiringMap.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/ExpiringMap.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/ExpiringSet.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/ExpiringSet.java
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/package-info.java b/concurrent/src/main/java/org/apache/tuweni/concurrent/package-info.java
similarity index 100%
rename from concurrent/src/main/java/net/consensys/cava/concurrent/package-info.java
rename to concurrent/src/main/java/org/apache/tuweni/concurrent/package-info.java
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java b/concurrent/src/test/java/org/apache/tuweni/concurrent/AtomicSlotMapTest.java
similarity index 100%
rename from concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java
rename to concurrent/src/test/java/org/apache/tuweni/concurrent/AtomicSlotMapTest.java
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java b/concurrent/src/test/java/org/apache/tuweni/concurrent/DefaultCompletableAsyncCompletionTest.java
similarity index 100%
rename from concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java
rename to concurrent/src/test/java/org/apache/tuweni/concurrent/DefaultCompletableAsyncCompletionTest.java
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java b/concurrent/src/test/java/org/apache/tuweni/concurrent/DefaultCompletableAsyncResultTest.java
similarity index 100%
rename from concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java
rename to concurrent/src/test/java/org/apache/tuweni/concurrent/DefaultCompletableAsyncResultTest.java
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java b/concurrent/src/test/java/org/apache/tuweni/concurrent/ExpiringMapTest.java
similarity index 100%
rename from concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java
rename to concurrent/src/test/java/org/apache/tuweni/concurrent/ExpiringMapTest.java
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java b/concurrent/src/test/java/org/apache/tuweni/concurrent/ExpiringSetTest.java
similarity index 100%
rename from concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java
rename to concurrent/src/test/java/org/apache/tuweni/concurrent/ExpiringSetTest.java
diff --git a/config/src/main/java/net/consensys/cava/config/Configuration.java b/config/src/main/java/org/apache/tuweni/config/Configuration.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/Configuration.java
rename to config/src/main/java/org/apache/tuweni/config/Configuration.java
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationError.java b/config/src/main/java/org/apache/tuweni/config/ConfigurationError.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/ConfigurationError.java
rename to config/src/main/java/org/apache/tuweni/config/ConfigurationError.java
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java b/config/src/main/java/org/apache/tuweni/config/ConfigurationErrors.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java
rename to config/src/main/java/org/apache/tuweni/config/ConfigurationErrors.java
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java b/config/src/main/java/org/apache/tuweni/config/ConfigurationValidator.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java
rename to config/src/main/java/org/apache/tuweni/config/ConfigurationValidator.java
diff --git a/config/src/main/java/net/consensys/cava/config/DocumentPosition.java b/config/src/main/java/org/apache/tuweni/config/DocumentPosition.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/DocumentPosition.java
rename to config/src/main/java/org/apache/tuweni/config/DocumentPosition.java
diff --git a/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java b/config/src/main/java/org/apache/tuweni/config/EmptyConfiguration.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java
rename to config/src/main/java/org/apache/tuweni/config/EmptyConfiguration.java
diff --git a/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java b/config/src/main/java/org/apache/tuweni/config/InvalidConfigurationPropertyTypeException.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java
rename to config/src/main/java/org/apache/tuweni/config/InvalidConfigurationPropertyTypeException.java
diff --git a/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java b/config/src/main/java/org/apache/tuweni/config/NoConfigurationPropertyException.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java
rename to config/src/main/java/org/apache/tuweni/config/NoConfigurationPropertyException.java
diff --git a/config/src/main/java/net/consensys/cava/config/PropertyValidator.java b/config/src/main/java/org/apache/tuweni/config/PropertyValidator.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/PropertyValidator.java
rename to config/src/main/java/org/apache/tuweni/config/PropertyValidator.java
diff --git a/config/src/main/java/net/consensys/cava/config/PropertyValidators.java b/config/src/main/java/org/apache/tuweni/config/PropertyValidators.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/PropertyValidators.java
rename to config/src/main/java/org/apache/tuweni/config/PropertyValidators.java
diff --git a/config/src/main/java/net/consensys/cava/config/Schema.java b/config/src/main/java/org/apache/tuweni/config/Schema.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/Schema.java
rename to config/src/main/java/org/apache/tuweni/config/Schema.java
diff --git a/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java b/config/src/main/java/org/apache/tuweni/config/SchemaBuilder.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/SchemaBuilder.java
rename to config/src/main/java/org/apache/tuweni/config/SchemaBuilder.java
diff --git a/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java b/config/src/main/java/org/apache/tuweni/config/TomlBackedConfiguration.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java
rename to config/src/main/java/org/apache/tuweni/config/TomlBackedConfiguration.java
diff --git a/config/src/main/java/net/consensys/cava/config/TomlSerializer.java b/config/src/main/java/org/apache/tuweni/config/TomlSerializer.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/TomlSerializer.java
rename to config/src/main/java/org/apache/tuweni/config/TomlSerializer.java
diff --git a/config/src/main/java/net/consensys/cava/config/package-info.java b/config/src/main/java/org/apache/tuweni/config/package-info.java
similarity index 100%
rename from config/src/main/java/net/consensys/cava/config/package-info.java
rename to config/src/main/java/org/apache/tuweni/config/package-info.java
diff --git a/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java b/config/src/test/java/org/apache/tuweni/config/PropertyValidatorTest.java
similarity index 100%
rename from config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java
rename to config/src/test/java/org/apache/tuweni/config/PropertyValidatorTest.java
diff --git a/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java b/config/src/test/java/org/apache/tuweni/config/SchemaBuilderTest.java
similarity index 100%
rename from config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java
rename to config/src/test/java/org/apache/tuweni/config/SchemaBuilderTest.java
diff --git a/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java b/config/src/test/java/org/apache/tuweni/config/TomlBackedConfigurationTest.java
similarity index 100%
rename from config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java
rename to config/src/test/java/org/apache/tuweni/config/TomlBackedConfigurationTest.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/Hash.java b/crypto/src/main/java/org/apache/tuweni/crypto/Hash.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/Hash.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/Hash.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java b/crypto/src/main/java/org/apache/tuweni/crypto/InvalidSEC256K1SecretKeyStoreException.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/InvalidSEC256K1SecretKeyStoreException.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java b/crypto/src/main/java/org/apache/tuweni/crypto/SECP256K1.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/SECP256K1.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/AtePairing.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/AtePairing.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/BLS12381.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/BLS12381.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/G1Point.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/G1Point.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/G2Point.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/G2Point.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/GTPoint.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/GTPoint.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/Group.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/Group.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/KeyPair.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/KeyPair.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/PublicKey.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/PublicKey.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/Scalar.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/Scalar.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/SecretKey.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/SecretKey.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/Signature.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/Signature.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/SignatureAndPublicKey.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/SignatureAndPublicKey.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/package-info.java b/crypto/src/main/java/org/apache/tuweni/crypto/mikuli/package-info.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/mikuli/package-info.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/mikuli/package-info.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/package-info.java b/crypto/src/main/java/org/apache/tuweni/crypto/package-info.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/package-info.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/package-info.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/AES256GCM.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/AES256GCM.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/Allocated.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/Allocated.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/Auth.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/Auth.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/Box.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/Box.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/Concatenate.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/Concatenate.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/DefaultDetachedEncryptionResult.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/DefaultDetachedEncryptionResult.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/DetachedEncryptionResult.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/DetachedEncryptionResult.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/DiffieHelman.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/DiffieHelman.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/GenericHash.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/GenericHash.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/HMACSHA256.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/HMACSHA256.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/HMACSHA512.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/HMACSHA512.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/HMACSHA512256.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/HMACSHA512256.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/KeyDerivation.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/KeyDerivation.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/KeyExchange.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/KeyExchange.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/LibSodium.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/LibSodium.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/PasswordHash.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/PasswordHash.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/SHA256Hash.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/SHA256Hash.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/SecretBox.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/SecretBox.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/SecretDecryptionStream.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/SecretDecryptionStream.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/SecretEncryptionStream.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/SecretEncryptionStream.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/Signature.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/Signature.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/Sodium.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/Sodium.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/SodiumException.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/SodiumException.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/SodiumVersion.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/SodiumVersion.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/XChaCha20Poly1305.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/XChaCha20Poly1305.java
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/package-info.java b/crypto/src/main/java/org/apache/tuweni/crypto/sodium/package-info.java
similarity index 100%
rename from crypto/src/main/java/net/consensys/cava/crypto/sodium/package-info.java
rename to crypto/src/main/java/org/apache/tuweni/crypto/sodium/package-info.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/HashTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/HashTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/HashTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java b/crypto/src/test/java/org/apache/tuweni/crypto/SECP256K1Test.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/SECP256K1Test.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/mikuli/SignatureTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/mikuli/SignatureTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/AES256GCMTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/AES256GCMTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/AllocatedTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/AllocatedTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/AuthTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/AuthTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/BoxTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/BoxTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/ConcatenateTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/ConcatenateTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/DiffieHelmanTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/DiffieHelmanTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/GenericHashTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/GenericHashTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/HMACSHA256Test.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/HMACSHA256Test.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/HMACSHA512256Test.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/HMACSHA512256Test.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/HMACSHA512Test.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/HMACSHA512Test.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/KeyDerivationTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/KeyDerivationTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/PasswordHashTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/PasswordHashTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/SHA256HashTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/SHA256HashTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/SecretBoxTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/SecretBoxTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/SignatureTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/SignatureTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/SodiumTest.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/SodiumTest.java
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java b/crypto/src/test/java/org/apache/tuweni/crypto/sodium/XChaCha20Poly1305Test.java
similarity index 100%
rename from crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java
rename to crypto/src/test/java/org/apache/tuweni/crypto/sodium/XChaCha20Poly1305Test.java
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/AtomicLongProperty.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/AtomicLongProperty.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/DiscoveryService.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/DiscoveryService.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/Endpoint.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/Endpoint.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/EnodeUri.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/EnodeUri.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/Node.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/Node.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/Packet.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/Packet.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/PacketType.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/PacketType.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/Peer.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/Peer.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/PeerRepository.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/PeerRepository.kt
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/PeerRoutingTable.kt
similarity index 100%
rename from devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt
rename to devp2p/src/main/kotlin/org/apache/tuweni/devp2p/PeerRoutingTable.kt
diff --git a/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java b/devp2p/src/test/java/org/apache/tuweni/devp2p/DiscoveryServiceJavaTest.java
similarity index 100%
rename from devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java
rename to devp2p/src/test/java/org/apache/tuweni/devp2p/DiscoveryServiceJavaTest.java
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/DiscoveryServiceTest.kt
similarity index 100%
rename from devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt
rename to devp2p/src/test/kotlin/org/apache/tuweni/devp2p/DiscoveryServiceTest.kt
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/EndpointTest.kt
similarity index 100%
rename from devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt
rename to devp2p/src/test/kotlin/org/apache/tuweni/devp2p/EndpointTest.kt
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/EphemeralPeerRepositoryTest.kt
similarity index 100%
rename from devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt
rename to devp2p/src/test/kotlin/org/apache/tuweni/devp2p/EphemeralPeerRepositoryTest.kt
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/FindNodePacketTest.kt
similarity index 100%
rename from devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt
rename to devp2p/src/test/kotlin/org/apache/tuweni/devp2p/FindNodePacketTest.kt
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/NeighborsPacketTest.kt
similarity index 100%
rename from devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt
rename to devp2p/src/test/kotlin/org/apache/tuweni/devp2p/NeighborsPacketTest.kt
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/PingPacketTest.kt
similarity index 100%
rename from devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt
rename to devp2p/src/test/kotlin/org/apache/tuweni/devp2p/PingPacketTest.kt
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/PongPacketTest.kt
similarity index 100%
rename from devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt
rename to devp2p/src/test/kotlin/org/apache/tuweni/devp2p/PongPacketTest.kt
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java b/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/BlockRLPTestSuite.java
similarity index 100%
rename from eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java
rename to eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/BlockRLPTestSuite.java
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java b/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/MerkleTrieTestSuite.java
similarity index 100%
rename from eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java
rename to eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/MerkleTrieTestSuite.java
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java b/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/RLPReferenceTestSuite.java
similarity index 100%
rename from eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java
rename to eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/RLPReferenceTestSuite.java
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java b/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/SSZTestSuite.java
similarity index 100%
rename from eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java
rename to eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/SSZTestSuite.java
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java b/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/TransactionTestSuite.java
similarity index 100%
rename from eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java
rename to eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/TransactionTestSuite.java
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt b/eth-repository/src/main/kotlin/org/apache/tuweni/eth/repository/BlockHeaderFields.kt
similarity index 100%
rename from eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt
rename to eth-repository/src/main/kotlin/org/apache/tuweni/eth/repository/BlockHeaderFields.kt
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt b/eth-repository/src/main/kotlin/org/apache/tuweni/eth/repository/BlockchainIndex.kt
similarity index 100%
rename from eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt
rename to eth-repository/src/main/kotlin/org/apache/tuweni/eth/repository/BlockchainIndex.kt
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt b/eth-repository/src/main/kotlin/org/apache/tuweni/eth/repository/BlockchainRepository.kt
similarity index 100%
rename from eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt
rename to eth-repository/src/main/kotlin/org/apache/tuweni/eth/repository/BlockchainRepository.kt
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt b/eth-repository/src/main/kotlin/org/apache/tuweni/eth/repository/TransactionReceiptFields.kt
similarity index 100%
rename from eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt
rename to eth-repository/src/main/kotlin/org/apache/tuweni/eth/repository/TransactionReceiptFields.kt
diff --git a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt b/eth-repository/src/test/kotlin/org/apache/tuweni/eth/repository/BlockchainIndexTest.kt
similarity index 100%
rename from eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt
rename to eth-repository/src/test/kotlin/org/apache/tuweni/eth/repository/BlockchainIndexTest.kt
diff --git a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt b/eth-repository/src/test/kotlin/org/apache/tuweni/eth/repository/BlockchainRepositoryTest.kt
similarity index 100%
rename from eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt
rename to eth-repository/src/test/kotlin/org/apache/tuweni/eth/repository/BlockchainRepositoryTest.kt
diff --git a/eth/src/main/java/net/consensys/cava/eth/Address.java b/eth/src/main/java/org/apache/tuweni/eth/Address.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/Address.java
rename to eth/src/main/java/org/apache/tuweni/eth/Address.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/Block.java b/eth/src/main/java/org/apache/tuweni/eth/Block.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/Block.java
rename to eth/src/main/java/org/apache/tuweni/eth/Block.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/BlockBody.java b/eth/src/main/java/org/apache/tuweni/eth/BlockBody.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/BlockBody.java
rename to eth/src/main/java/org/apache/tuweni/eth/BlockBody.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java b/eth/src/main/java/org/apache/tuweni/eth/BlockHeader.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/BlockHeader.java
rename to eth/src/main/java/org/apache/tuweni/eth/BlockHeader.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/Hash.java b/eth/src/main/java/org/apache/tuweni/eth/Hash.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/Hash.java
rename to eth/src/main/java/org/apache/tuweni/eth/Hash.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/Log.java b/eth/src/main/java/org/apache/tuweni/eth/Log.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/Log.java
rename to eth/src/main/java/org/apache/tuweni/eth/Log.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java b/eth/src/main/java/org/apache/tuweni/eth/LogsBloomFilter.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java
rename to eth/src/main/java/org/apache/tuweni/eth/LogsBloomFilter.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/Transaction.java b/eth/src/main/java/org/apache/tuweni/eth/Transaction.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/Transaction.java
rename to eth/src/main/java/org/apache/tuweni/eth/Transaction.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java b/eth/src/main/java/org/apache/tuweni/eth/TransactionReceipt.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java
rename to eth/src/main/java/org/apache/tuweni/eth/TransactionReceipt.java
diff --git a/eth/src/main/java/net/consensys/cava/eth/package-info.java b/eth/src/main/java/org/apache/tuweni/eth/package-info.java
similarity index 100%
rename from eth/src/main/java/net/consensys/cava/eth/package-info.java
rename to eth/src/main/java/org/apache/tuweni/eth/package-info.java
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java b/eth/src/test/java/org/apache/tuweni/eth/BlockBodyTest.java
similarity index 100%
rename from eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java
rename to eth/src/test/java/org/apache/tuweni/eth/BlockBodyTest.java
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java b/eth/src/test/java/org/apache/tuweni/eth/BlockHeaderTest.java
similarity index 100%
rename from eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java
rename to eth/src/test/java/org/apache/tuweni/eth/BlockHeaderTest.java
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockTest.java b/eth/src/test/java/org/apache/tuweni/eth/BlockTest.java
similarity index 100%
rename from eth/src/test/java/net/consensys/cava/eth/BlockTest.java
rename to eth/src/test/java/org/apache/tuweni/eth/BlockTest.java
diff --git a/eth/src/test/java/net/consensys/cava/eth/LogTest.java b/eth/src/test/java/org/apache/tuweni/eth/LogTest.java
similarity index 100%
rename from eth/src/test/java/net/consensys/cava/eth/LogTest.java
rename to eth/src/test/java/org/apache/tuweni/eth/LogTest.java
diff --git a/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java b/eth/src/test/java/org/apache/tuweni/eth/LogsBloomFilterTest.java
similarity index 100%
rename from eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java
rename to eth/src/test/java/org/apache/tuweni/eth/LogsBloomFilterTest.java
diff --git a/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java b/eth/src/test/java/org/apache/tuweni/eth/TransactionReceiptTest.java
similarity index 100%
rename from eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java
rename to eth/src/test/java/org/apache/tuweni/eth/TransactionReceiptTest.java
diff --git a/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java b/eth/src/test/java/org/apache/tuweni/eth/TransactionTest.java
similarity index 100%
rename from eth/src/test/java/net/consensys/cava/eth/TransactionTest.java
rename to eth/src/test/java/org/apache/tuweni/eth/TransactionTest.java
diff --git a/io/src/main/java/net/consensys/cava/io/Base64.java b/io/src/main/java/org/apache/tuweni/io/Base64.java
similarity index 100%
rename from io/src/main/java/net/consensys/cava/io/Base64.java
rename to io/src/main/java/org/apache/tuweni/io/Base64.java
diff --git a/io/src/main/java/net/consensys/cava/io/IOConsumer.java b/io/src/main/java/org/apache/tuweni/io/IOConsumer.java
similarity index 100%
rename from io/src/main/java/net/consensys/cava/io/IOConsumer.java
rename to io/src/main/java/org/apache/tuweni/io/IOConsumer.java
diff --git a/io/src/main/java/net/consensys/cava/io/NullOutputStream.java b/io/src/main/java/org/apache/tuweni/io/NullOutputStream.java
similarity index 100%
rename from io/src/main/java/net/consensys/cava/io/NullOutputStream.java
rename to io/src/main/java/org/apache/tuweni/io/NullOutputStream.java
diff --git a/io/src/main/java/net/consensys/cava/io/Resources.java b/io/src/main/java/org/apache/tuweni/io/Resources.java
similarity index 100%
rename from io/src/main/java/net/consensys/cava/io/Resources.java
rename to io/src/main/java/org/apache/tuweni/io/Resources.java
diff --git a/io/src/main/java/net/consensys/cava/io/Streams.java b/io/src/main/java/org/apache/tuweni/io/Streams.java
similarity index 100%
rename from io/src/main/java/net/consensys/cava/io/Streams.java
rename to io/src/main/java/org/apache/tuweni/io/Streams.java
diff --git a/io/src/main/java/net/consensys/cava/io/file/Files.java b/io/src/main/java/org/apache/tuweni/io/file/Files.java
similarity index 100%
rename from io/src/main/java/net/consensys/cava/io/file/Files.java
rename to io/src/main/java/org/apache/tuweni/io/file/Files.java
diff --git a/io/src/main/java/net/consensys/cava/io/file/package-info.java b/io/src/main/java/org/apache/tuweni/io/file/package-info.java
similarity index 100%
rename from io/src/main/java/net/consensys/cava/io/file/package-info.java
rename to io/src/main/java/org/apache/tuweni/io/file/package-info.java
diff --git a/io/src/main/java/net/consensys/cava/io/package-info.java b/io/src/main/java/org/apache/tuweni/io/package-info.java
similarity index 100%
rename from io/src/main/java/net/consensys/cava/io/package-info.java
rename to io/src/main/java/org/apache/tuweni/io/package-info.java
diff --git a/io/src/test/java/net/consensys/cava/io/Base64Test.java b/io/src/test/java/org/apache/tuweni/io/Base64Test.java
similarity index 100%
rename from io/src/test/java/net/consensys/cava/io/Base64Test.java
rename to io/src/test/java/org/apache/tuweni/io/Base64Test.java
diff --git a/io/src/test/java/net/consensys/cava/io/ResourcesTest.java b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
similarity index 100%
rename from io/src/test/java/net/consensys/cava/io/ResourcesTest.java
rename to io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
diff --git a/io/src/test/java/net/consensys/cava/io/StreamsTest.java b/io/src/test/java/org/apache/tuweni/io/StreamsTest.java
similarity index 100%
rename from io/src/test/java/net/consensys/cava/io/StreamsTest.java
rename to io/src/test/java/org/apache/tuweni/io/StreamsTest.java
diff --git a/io/src/test/java/net/consensys/cava/io/file/FilesTest.java b/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
similarity index 100%
rename from io/src/test/java/net/consensys/cava/io/file/FilesTest.java
rename to io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
diff --git a/io/src/test/resources/net/consensys/cava/io/file/resourceresolver/subdir/test3.yaml b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/subdir/test3.yaml
similarity index 100%
rename from io/src/test/resources/net/consensys/cava/io/file/resourceresolver/subdir/test3.yaml
rename to io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/subdir/test3.yaml
diff --git a/io/src/test/resources/net/consensys/cava/io/file/resourceresolver/test1.txt b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test1.txt
similarity index 100%
rename from io/src/test/resources/net/consensys/cava/io/file/resourceresolver/test1.txt
rename to io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test1.txt
diff --git a/io/src/test/resources/net/consensys/cava/io/file/resourceresolver/test2.txt b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test2.txt
similarity index 100%
rename from io/src/test/resources/net/consensys/cava/io/file/resourceresolver/test2.txt
rename to io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test2.txt
diff --git a/io/src/test/resources/net/consensys/cava/io/file/test.txt b/io/src/test/resources/org/apache/tuweni/io/file/test.txt
similarity index 100%
rename from io/src/test/resources/net/consensys/cava/io/file/test.txt
rename to io/src/test/resources/org/apache/tuweni/io/file/test.txt
diff --git a/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java b/junit/src/main/java/org/apache/tuweni/junit/BouncyCastleExtension.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java
rename to junit/src/main/java/org/apache/tuweni/junit/BouncyCastleExtension.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java b/junit/src/main/java/org/apache/tuweni/junit/LuceneIndex.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java
rename to junit/src/main/java/org/apache/tuweni/junit/LuceneIndex.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java b/junit/src/main/java/org/apache/tuweni/junit/LuceneIndexWriter.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java
rename to junit/src/main/java/org/apache/tuweni/junit/LuceneIndexWriter.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java b/junit/src/main/java/org/apache/tuweni/junit/LuceneIndexWriterExtension.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java
rename to junit/src/main/java/org/apache/tuweni/junit/LuceneIndexWriterExtension.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/RedisPort.java b/junit/src/main/java/org/apache/tuweni/junit/RedisPort.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/RedisPort.java
rename to junit/src/main/java/org/apache/tuweni/junit/RedisPort.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java b/junit/src/main/java/org/apache/tuweni/junit/RedisServerExtension.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java
rename to junit/src/main/java/org/apache/tuweni/junit/RedisServerExtension.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java b/junit/src/main/java/org/apache/tuweni/junit/TempDirectory.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/TempDirectory.java
rename to junit/src/main/java/org/apache/tuweni/junit/TempDirectory.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java b/junit/src/main/java/org/apache/tuweni/junit/TempDirectoryExtension.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java
rename to junit/src/main/java/org/apache/tuweni/junit/TempDirectoryExtension.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java b/junit/src/main/java/org/apache/tuweni/junit/VertxExtension.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/VertxExtension.java
rename to junit/src/main/java/org/apache/tuweni/junit/VertxExtension.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java b/junit/src/main/java/org/apache/tuweni/junit/VertxInstance.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/VertxInstance.java
rename to junit/src/main/java/org/apache/tuweni/junit/VertxInstance.java
diff --git a/junit/src/main/java/net/consensys/cava/junit/package-info.java b/junit/src/main/java/org/apache/tuweni/junit/package-info.java
similarity index 100%
rename from junit/src/main/java/net/consensys/cava/junit/package-info.java
rename to junit/src/main/java/org/apache/tuweni/junit/package-info.java
diff --git a/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java b/junit/src/test/java/org/apache/tuweni/junit/LuceneIndexWriterExtensionTest.java
similarity index 100%
rename from junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java
rename to junit/src/test/java/org/apache/tuweni/junit/LuceneIndexWriterExtensionTest.java
diff --git a/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java b/junit/src/test/java/org/apache/tuweni/junit/RedisServerExtensionTest.java
similarity index 100%
rename from junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java
rename to junit/src/test/java/org/apache/tuweni/junit/RedisServerExtensionTest.java
diff --git a/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java b/junit/src/test/java/org/apache/tuweni/junit/TempDirectoryExtensionTest.java
similarity index 100%
rename from junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java
rename to junit/src/test/java/org/apache/tuweni/junit/TempDirectoryExtensionTest.java
diff --git a/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt b/kademlia/src/main/kotlin/org/apache/tuweni/kademlia/KademliaRoutingTable.kt
similarity index 100%
rename from kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt
rename to kademlia/src/main/kotlin/org/apache/tuweni/kademlia/KademliaRoutingTable.kt
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt b/kademlia/src/test/kotlin/org/apache/tuweni/kademlia/KademliaRoutingTableTest.kt
similarity index 100%
rename from kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt
rename to kademlia/src/test/kotlin/org/apache/tuweni/kademlia/KademliaRoutingTableTest.kt
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt b/kademlia/src/test/kotlin/org/apache/tuweni/kademlia/LogarithmicDistanceTest.kt
similarity index 100%
rename from kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt
rename to kademlia/src/test/kotlin/org/apache/tuweni/kademlia/LogarithmicDistanceTest.kt
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt b/kademlia/src/test/kotlin/org/apache/tuweni/kademlia/OrderedInsertTest.kt
similarity index 100%
rename from kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt
rename to kademlia/src/test/kotlin/org/apache/tuweni/kademlia/OrderedInsertTest.kt
diff --git a/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java b/kv/src/main/java/org/apache/tuweni/kv/RedisBytesCodec.java
similarity index 100%
rename from kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java
rename to kv/src/main/java/org/apache/tuweni/kv/RedisBytesCodec.java
diff --git a/kv/src/main/java/net/consensys/cava/kv/package-info.java b/kv/src/main/java/org/apache/tuweni/kv/package-info.java
similarity index 100%
rename from kv/src/main/java/net/consensys/cava/kv/package-info.java
rename to kv/src/main/java/org/apache/tuweni/kv/package-info.java
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
similarity index 100%
rename from kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt
rename to kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
similarity index 100%
rename from kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt
rename to kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
similarity index 100%
rename from kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt
rename to kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
similarity index 100%
rename from kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt
rename to kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
similarity index 100%
rename from kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt
rename to kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
similarity index 100%
rename from kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt
rename to kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
similarity index 100%
rename from kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt
rename to kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
similarity index 100%
rename from kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt
rename to kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
diff --git a/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java b/kv/src/test/java/org/apache/tuweni/kv/KeyValueStoreTest.java
similarity index 100%
rename from kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java
rename to kv/src/test/java/org/apache/tuweni/kv/KeyValueStoreTest.java
diff --git a/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java b/kv/src/test/java/org/apache/tuweni/kv/RedisKeyValueStoreTest.java
similarity index 100%
rename from kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java
rename to kv/src/test/java/org/apache/tuweni/kv/RedisKeyValueStoreTest.java
diff --git a/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt b/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
similarity index 100%
rename from kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt
rename to kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt b/les/src/main/kotlin/org/apache/tuweni/les/BlockBodiesMessage.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/BlockBodiesMessage.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt b/les/src/main/kotlin/org/apache/tuweni/les/BlockHeadersMessage.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/BlockHeadersMessage.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt b/les/src/main/kotlin/org/apache/tuweni/les/GetBlockBodiesMessage.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/GetBlockBodiesMessage.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt b/les/src/main/kotlin/org/apache/tuweni/les/GetBlockHeadersMessage.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/GetBlockHeadersMessage.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt b/les/src/main/kotlin/org/apache/tuweni/les/GetReceiptsMessage.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/GetReceiptsMessage.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt b/les/src/main/kotlin/org/apache/tuweni/les/LESPeerState.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/LESPeerState.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt b/les/src/main/kotlin/org/apache/tuweni/les/LESSubProtocolHandler.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/LESSubProtocolHandler.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt b/les/src/main/kotlin/org/apache/tuweni/les/LESSubprotocol.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/LESSubprotocol.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt b/les/src/main/kotlin/org/apache/tuweni/les/LightClient.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/LightClient.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/LightClient.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt b/les/src/main/kotlin/org/apache/tuweni/les/ReceiptsMessage.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/ReceiptsMessage.kt
diff --git a/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt b/les/src/main/kotlin/org/apache/tuweni/les/StatusMessage.kt
similarity index 100%
rename from les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt
rename to les/src/main/kotlin/org/apache/tuweni/les/StatusMessage.kt
diff --git a/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt b/les/src/test/kotlin/org/apache/tuweni/les/LESSubProtocolHandlerTest.kt
similarity index 100%
rename from les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt
rename to les/src/test/kotlin/org/apache/tuweni/les/LESSubProtocolHandlerTest.kt
diff --git a/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt b/les/src/test/kotlin/org/apache/tuweni/les/LESSubprotocolTest.kt
similarity index 100%
rename from les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt
rename to les/src/test/kotlin/org/apache/tuweni/les/LESSubprotocolTest.kt
diff --git a/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt b/les/src/test/kotlin/org/apache/tuweni/les/MessagesTest.kt
similarity index 100%
rename from les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt
rename to les/src/test/kotlin/org/apache/tuweni/les/MessagesTest.kt
diff --git a/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java b/merkle-trie/src/main/java/org/apache/tuweni/trie/CompactEncoding.java
similarity index 100%
rename from merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java
rename to merkle-trie/src/main/java/org/apache/tuweni/trie/CompactEncoding.java
diff --git a/merkle-trie/src/main/java/net/consensys/cava/trie/package-info.java b/merkle-trie/src/main/java/org/apache/tuweni/trie/package-info.java
similarity index 100%
rename from merkle-trie/src/main/java/net/consensys/cava/trie/package-info.java
rename to merkle-trie/src/main/java/org/apache/tuweni/trie/package-info.java
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/BranchNode.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/BranchNode.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/DefaultNodeFactory.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/DefaultNodeFactory.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/ExtensionNode.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/ExtensionNode.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/GetVisitor.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/GetVisitor.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/LeafNode.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/LeafNode.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/MerklePatriciaTrie.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/MerklePatriciaTrie.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/MerkleStorage.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/MerkleStorage.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/MerkleStorageException.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/MerkleStorageException.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/MerkleTrie.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/MerkleTrie.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/Node.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/Node.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/NodeFactory.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/NodeFactory.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/NodeVisitor.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/NodeVisitor.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/NullNode.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/NullNode.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/PutVisitor.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/PutVisitor.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/RemoveVisitor.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/RemoveVisitor.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/StoredMerklePatriciaTrie.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/StoredMerklePatriciaTrie.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/StoredNode.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/StoredNode.kt
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt b/merkle-trie/src/main/kotlin/org/apache/tuweni/trie/StoredNodeFactory.kt
similarity index 100%
rename from merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt
rename to merkle-trie/src/main/kotlin/org/apache/tuweni/trie/StoredNodeFactory.kt
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java b/merkle-trie/src/test/java/org/apache/tuweni/trie/CompactEncodingTest.java
similarity index 100%
rename from merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java
rename to merkle-trie/src/test/java/org/apache/tuweni/trie/CompactEncodingTest.java
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java b/merkle-trie/src/test/java/org/apache/tuweni/trie/MerklePatriciaTrieJavaTest.java
similarity index 100%
rename from merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java
rename to merkle-trie/src/test/java/org/apache/tuweni/trie/MerklePatriciaTrieJavaTest.java
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java b/merkle-trie/src/test/java/org/apache/tuweni/trie/MerklePatriciaTriePerformanceTest.java
similarity index 100%
rename from merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java
rename to merkle-trie/src/test/java/org/apache/tuweni/trie/MerklePatriciaTriePerformanceTest.java
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java b/merkle-trie/src/test/java/org/apache/tuweni/trie/StoredMerklePatriciaTrieJavaTest.java
similarity index 100%
rename from merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java
rename to merkle-trie/src/test/java/org/apache/tuweni/trie/StoredMerklePatriciaTrieJavaTest.java
diff --git a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt b/merkle-trie/src/test/kotlin/org/apache/tuweni/trie/MerklePatriciaTrieKotlinTest.kt
similarity index 100%
rename from merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt
rename to merkle-trie/src/test/kotlin/org/apache/tuweni/trie/MerklePatriciaTrieKotlinTest.kt
diff --git a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt b/merkle-trie/src/test/kotlin/org/apache/tuweni/trie/StoredMerklePatriciaTrieKotlinTest.kt
similarity index 100%
rename from merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt
rename to merkle-trie/src/test/kotlin/org/apache/tuweni/trie/StoredMerklePatriciaTrieKotlinTest.kt
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt b/net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineByteChannel.kt
similarity index 100%
rename from net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt
rename to net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineByteChannel.kt
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt b/net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineChannelGroup.kt
similarity index 100%
rename from net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt
rename to net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineChannelGroup.kt
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt b/net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineDatagramChannel.kt
similarity index 100%
rename from net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt
rename to net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineDatagramChannel.kt
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt b/net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineNetworkChannel.kt
similarity index 100%
rename from net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt
rename to net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineNetworkChannel.kt
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt b/net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineSelector.kt
similarity index 100%
rename from net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt
rename to net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineSelector.kt
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt b/net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineServerSocketChannel.kt
similarity index 100%
rename from net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt
rename to net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineServerSocketChannel.kt
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt b/net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineSocketChannel.kt
similarity index 100%
rename from net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt
rename to net-coroutines/src/main/kotlin/org/apache/tuweni/net/coroutines/CoroutineSocketChannel.kt
diff --git a/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java b/net-coroutines/src/test/java/org/apache/tuweni/net/coroutines/SelectorTest.java
similarity index 100%
rename from net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java
rename to net-coroutines/src/test/java/org/apache/tuweni/net/coroutines/SelectorTest.java
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt b/net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineChannelGroupTest.kt
similarity index 100%
rename from net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt
rename to net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineChannelGroupTest.kt
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt b/net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineDatagramChannelTest.kt
similarity index 100%
rename from net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt
rename to net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineDatagramChannelTest.kt
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt b/net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineSelectorTest.kt
similarity index 100%
rename from net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt
rename to net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineSelectorTest.kt
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt b/net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineSocketChannelTest.kt
similarity index 100%
rename from net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt
rename to net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineSocketChannelTest.kt
diff --git a/net/src/main/java/net/consensys/cava/net/package-info.java b/net/src/main/java/org/apache/tuweni/net/package-info.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/package-info.java
rename to net/src/main/java/org/apache/tuweni/net/package-info.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java b/net/src/main/java/org/apache/tuweni/net/tls/ClientFingerprintTrustManager.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java
rename to net/src/main/java/org/apache/tuweni/net/tls/ClientFingerprintTrustManager.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java b/net/src/main/java/org/apache/tuweni/net/tls/DelegatingTrustManagerFactory.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java
rename to net/src/main/java/org/apache/tuweni/net/tls/DelegatingTrustManagerFactory.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java b/net/src/main/java/org/apache/tuweni/net/tls/FileBackedFingerprintRepository.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java
rename to net/src/main/java/org/apache/tuweni/net/tls/FileBackedFingerprintRepository.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java b/net/src/main/java/org/apache/tuweni/net/tls/FingerprintRepository.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java
rename to net/src/main/java/org/apache/tuweni/net/tls/FingerprintRepository.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java b/net/src/main/java/org/apache/tuweni/net/tls/ServerFingerprintTrustManager.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java
rename to net/src/main/java/org/apache/tuweni/net/tls/ServerFingerprintTrustManager.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java b/net/src/main/java/org/apache/tuweni/net/tls/SingleTrustManagerFactory.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java
rename to net/src/main/java/org/apache/tuweni/net/tls/SingleTrustManagerFactory.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TLS.java b/net/src/main/java/org/apache/tuweni/net/tls/TLS.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/TLS.java
rename to net/src/main/java/org/apache/tuweni/net/tls/TLS.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java b/net/src/main/java/org/apache/tuweni/net/tls/TLSEnvironmentException.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java
rename to net/src/main/java/org/apache/tuweni/net/tls/TLSEnvironmentException.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java b/net/src/main/java/org/apache/tuweni/net/tls/TrustManagerFactories.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java
rename to net/src/main/java/org/apache/tuweni/net/tls/TrustManagerFactories.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java b/net/src/main/java/org/apache/tuweni/net/tls/TrustManagerFactoryWrapper.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java
rename to net/src/main/java/org/apache/tuweni/net/tls/TrustManagerFactoryWrapper.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java b/net/src/main/java/org/apache/tuweni/net/tls/VertxTrustOptions.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java
rename to net/src/main/java/org/apache/tuweni/net/tls/VertxTrustOptions.java
diff --git a/net/src/main/java/net/consensys/cava/net/tls/package-info.java b/net/src/main/java/org/apache/tuweni/net/tls/package-info.java
similarity index 100%
rename from net/src/main/java/net/consensys/cava/net/tls/package-info.java
rename to net/src/main/java/org/apache/tuweni/net/tls/package-info.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ClientCaOrRecordTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ClientCaOrRecordTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ClientCaOrTofuTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ClientCaOrTofuTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ClientCaOrWhitelistTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ClientCaOrWhitelistTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ClientRecordTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ClientRecordTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ClientTofuTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ClientTofuTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ClientWhitelistTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ClientWhitelistTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java b/net/src/test/java/org/apache/tuweni/net/tls/FileBackedFingerprintRepositoryTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/FileBackedFingerprintRepositoryTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java b/net/src/test/java/org/apache/tuweni/net/tls/InsecureTrustOptions.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java
rename to net/src/test/java/org/apache/tuweni/net/tls/InsecureTrustOptions.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java b/net/src/test/java/org/apache/tuweni/net/tls/SecurityTestUtils.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java
rename to net/src/test/java/org/apache/tuweni/net/tls/SecurityTestUtils.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ServerCaOrRecordTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ServerCaOrRecordTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ServerCaOrTofaTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ServerCaOrTofaTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ServerCaOrWhitelistTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ServerCaOrWhitelistTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ServerRecordTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ServerRecordTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ServerTofaTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ServerTofaTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java b/net/src/test/java/org/apache/tuweni/net/tls/ServerWhitelistTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/ServerWhitelistTest.java
diff --git a/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java b/net/src/test/java/org/apache/tuweni/net/tls/TLSTest.java
similarity index 100%
rename from net/src/test/java/net/consensys/cava/net/tls/TLSTest.java
rename to net/src/test/java/org/apache/tuweni/net/tls/TLSTest.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/EphemeralPeerRepository.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/EphemeralPeerRepository.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/MessageHashing.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/MessageHashing.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/MessageSender.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/MessageSender.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/Peer.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/Peer.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/PeerRepository.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/PeerRepository.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/State.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/State.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/StateActor.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/StateActor.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/StateActorFactory.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/StateActorFactory.java
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/package-info.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/package-info.java
similarity index 100%
rename from plumtree/src/main/java/net/consensys/cava/plumtree/package-info.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/package-info.java
diff --git a/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java b/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java
similarity index 100%
rename from plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java
rename to plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java b/rlp/src/main/java/org/apache/tuweni/rlp/AccumulatingRLPWriter.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/AccumulatingRLPWriter.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java b/rlp/src/main/java/org/apache/tuweni/rlp/ByteBufferRLPWriter.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/ByteBufferRLPWriter.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java b/rlp/src/main/java/org/apache/tuweni/rlp/BytesRLPReader.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/BytesRLPReader.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java b/rlp/src/main/java/org/apache/tuweni/rlp/BytesRLPWriter.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/BytesRLPWriter.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java b/rlp/src/main/java/org/apache/tuweni/rlp/DelegatingRLPWriter.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/DelegatingRLPWriter.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java b/rlp/src/main/java/org/apache/tuweni/rlp/EndOfRLPException.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/EndOfRLPException.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java b/rlp/src/main/java/org/apache/tuweni/rlp/InvalidRLPEncodingException.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/InvalidRLPEncodingException.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java b/rlp/src/main/java/org/apache/tuweni/rlp/InvalidRLPTypeException.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/InvalidRLPTypeException.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLP.java b/rlp/src/main/java/org/apache/tuweni/rlp/RLP.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/RLP.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/RLP.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java b/rlp/src/main/java/org/apache/tuweni/rlp/RLPException.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/RLPException.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/RLPException.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java b/rlp/src/main/java/org/apache/tuweni/rlp/RLPReader.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/RLPReader.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java b/rlp/src/main/java/org/apache/tuweni/rlp/RLPWriter.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/RLPWriter.java
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/package-info.java b/rlp/src/main/java/org/apache/tuweni/rlp/package-info.java
similarity index 100%
rename from rlp/src/main/java/net/consensys/cava/rlp/package-info.java
rename to rlp/src/main/java/org/apache/tuweni/rlp/package-info.java
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java b/rlp/src/test/java/org/apache/tuweni/rlp/ByteBufferWriterTest.java
similarity index 100%
rename from rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java
rename to rlp/src/test/java/org/apache/tuweni/rlp/ByteBufferWriterTest.java
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java b/rlp/src/test/java/org/apache/tuweni/rlp/BytesRLPReaderTest.java
similarity index 100%
rename from rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java
rename to rlp/src/test/java/org/apache/tuweni/rlp/BytesRLPReaderTest.java
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java b/rlp/src/test/java/org/apache/tuweni/rlp/BytesRLPWriterTest.java
similarity index 100%
rename from rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java
rename to rlp/src/test/java/org/apache/tuweni/rlp/BytesRLPWriterTest.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/EthereumIESEncryptionEngine.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/EthereumIESEncryptionEngine.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/HandshakeMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/HandshakeMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/InitiatorHandshakeMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/InitiatorHandshakeMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/InvalidMACException.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/InvalidMACException.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/MemoryWireConnectionsRepository.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/MemoryWireConnectionsRepository.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/RLPxConnection.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/RLPxConnection.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/RLPxConnectionFactory.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/RLPxConnectionFactory.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/RLPxMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/RLPxMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/RLPxService.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/RLPxService.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/ResponderHandshakeMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/ResponderHandshakeMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/WireConnectionRepository.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/WireConnectionRepository.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/package-info.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/package-info.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/package-info.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/package-info.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/vertx/VertxRLPxService.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/vertx/VertxRLPxService.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/package-info.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/vertx/package-info.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/vertx/package-info.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/vertx/package-info.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/Capability.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/Capability.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/DefaultSubProtocolIdentifier.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/DefaultSubProtocolIdentifier.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/DefaultWireConnection.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/DefaultWireConnection.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/DisconnectMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/DisconnectMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/DisconnectReason.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/DisconnectReason.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/HelloMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/HelloMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/PingMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/PingMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/PongMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/PongMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/SubProtocol.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/SubProtocol.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/SubProtocolHandler.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/SubProtocolHandler.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/SubProtocolIdentifier.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/SubProtocolIdentifier.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/WireConnection.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/WireConnection.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/WireProtocolMessage.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/WireProtocolMessage.java
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/package-info.java b/rlpx/src/main/java/org/apache/tuweni/rlpx/wire/package-info.java
similarity index 100%
rename from rlpx/src/main/java/net/consensys/cava/rlpx/wire/package-info.java
rename to rlpx/src/main/java/org/apache/tuweni/rlpx/wire/package-info.java
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java b/rlpx/src/test/java/org/apache/tuweni/rlpx/RLPxConnectionFactoryTest.java
similarity index 100%
rename from rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java
rename to rlpx/src/test/java/org/apache/tuweni/rlpx/RLPxConnectionFactoryTest.java
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java b/rlpx/src/test/java/org/apache/tuweni/rlpx/vertx/VertxAcceptanceTest.java
similarity index 100%
rename from rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java
rename to rlpx/src/test/java/org/apache/tuweni/rlpx/vertx/VertxAcceptanceTest.java
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java b/rlpx/src/test/java/org/apache/tuweni/rlpx/vertx/VertxRLPxServiceTest.java
similarity index 100%
rename from rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java
rename to rlpx/src/test/java/org/apache/tuweni/rlpx/vertx/VertxRLPxServiceTest.java
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java b/rlpx/src/test/java/org/apache/tuweni/rlpx/wire/DefaultWireConnectionTest.java
similarity index 100%
rename from rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java
rename to rlpx/src/test/java/org/apache/tuweni/rlpx/wire/DefaultWireConnectionTest.java
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java b/rlpx/src/test/java/org/apache/tuweni/rlpx/wire/DisconnectMessageTest.java
similarity index 100%
rename from rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java
rename to rlpx/src/test/java/org/apache/tuweni/rlpx/wire/DisconnectMessageTest.java
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java b/rlpx/src/test/java/org/apache/tuweni/rlpx/wire/HelloMessageTest.java
similarity index 100%
rename from rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java
rename to rlpx/src/test/java/org/apache/tuweni/rlpx/wire/HelloMessageTest.java
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java b/rlpx/src/test/java/org/apache/tuweni/rlpx/wire/PingPongTest.java
similarity index 100%
rename from rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java
rename to rlpx/src/test/java/org/apache/tuweni/rlpx/wire/PingPongTest.java
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java b/rlpx/src/test/java/org/apache/tuweni/rlpx/wire/RLPxConnectionMessageExchangeTest.java
similarity index 100%
rename from rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java
rename to rlpx/src/test/java/org/apache/tuweni/rlpx/wire/RLPxConnectionMessageExchangeTest.java
diff --git a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java b/scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/LocalIdentity.java
similarity index 100%
rename from scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java
rename to scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/LocalIdentity.java
diff --git a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java b/scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
similarity index 100%
rename from scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
rename to scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
diff --git a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/package-info.java b/scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/package-info.java
similarity index 100%
rename from scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/package-info.java
rename to scuttlebutt-discovery/src/main/java/org/apache/tuweni/scuttlebutt/discovery/package-info.java
diff --git a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java b/scuttlebutt-discovery/src/test/java/org/apache/tuweni/scuttlebutt/discovery/LocalIdentityTest.java
similarity index 100%
rename from scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java
rename to scuttlebutt-discovery/src/test/java/org/apache/tuweni/scuttlebutt/discovery/LocalIdentityTest.java
diff --git a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java b/scuttlebutt-discovery/src/test/java/org/apache/tuweni/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
similarity index 100%
rename from scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
rename to scuttlebutt-discovery/src/test/java/org/apache/tuweni/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/HandshakeException.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/HandshakeException.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttStream.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttStream.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/StreamException.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/StreamException.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/package-info.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/package-info.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/package-info.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/package-info.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ClientHandler.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ClientHandler.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ServerHandler.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ServerHandler.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/package-info.java b/scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/package-info.java
similarity index 100%
rename from scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/package-info.java
rename to scuttlebutt-handshake/src/main/java/org/apache/tuweni/scuttlebutt/handshake/vertx/package-info.java
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java b/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
similarity index 100%
rename from scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
rename to scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java b/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
similarity index 100%
rename from scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
rename to scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java b/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
similarity index 100%
rename from scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
rename to scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCCodec.java
similarity index 100%
rename from scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java
rename to scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCCodec.java
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFlag.java
similarity index 100%
rename from scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java
rename to scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCFlag.java
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java b/scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java
similarity index 100%
rename from scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java
rename to scuttlebutt-rpc/src/main/java/org/apache/tuweni/scuttlebutt/rpc/RPCMessage.java
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
similarity index 100%
rename from scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java
rename to scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/RPCEncodingTest.java
similarity index 100%
rename from scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java
rename to scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/RPCEncodingTest.java
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/RPCFlagTest.java
similarity index 100%
rename from scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java
rename to scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/RPCFlagTest.java
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/Ed25519KeyPairIdentity.java
similarity index 100%
rename from scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java
rename to scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/Ed25519KeyPairIdentity.java
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/Ed25519PublicKeyIdentity.java
similarity index 100%
rename from scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java
rename to scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/Ed25519PublicKeyIdentity.java
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/Identity.java
similarity index 100%
rename from scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java
rename to scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/Identity.java
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/Invite.java
similarity index 100%
rename from scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java
rename to scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/Invite.java
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/SECP256K1KeyPairIdentity.java
similarity index 100%
rename from scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java
rename to scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/SECP256K1KeyPairIdentity.java
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/SECP256K1PublicKeyIdentity.java
similarity index 100%
rename from scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java
rename to scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/SECP256K1PublicKeyIdentity.java
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/package-info.java b/scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/package-info.java
similarity index 100%
rename from scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/package-info.java
rename to scuttlebutt/src/main/java/org/apache/tuweni/scuttlebutt/package-info.java
diff --git a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java b/scuttlebutt/src/test/java/org/apache/tuweni/scuttlebutt/IdentityTest.java
similarity index 100%
rename from scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java
rename to scuttlebutt/src/test/java/org/apache/tuweni/scuttlebutt/IdentityTest.java
diff --git a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java b/scuttlebutt/src/test/java/org/apache/tuweni/scuttlebutt/InviteTest.java
similarity index 100%
rename from scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java
rename to scuttlebutt/src/test/java/org/apache/tuweni/scuttlebutt/InviteTest.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java b/ssz/src/main/java/org/apache/tuweni/ssz/ByteBufferSSZWriter.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/ByteBufferSSZWriter.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java b/ssz/src/main/java/org/apache/tuweni/ssz/BytesSSZReader.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/BytesSSZReader.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java b/ssz/src/main/java/org/apache/tuweni/ssz/BytesSSZWriter.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/BytesSSZWriter.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java b/ssz/src/main/java/org/apache/tuweni/ssz/EndOfSSZException.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/EndOfSSZException.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java b/ssz/src/main/java/org/apache/tuweni/ssz/InvalidSSZTypeException.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/InvalidSSZTypeException.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java b/ssz/src/main/java/org/apache/tuweni/ssz/SSZ.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/SSZ.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/SSZ.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java b/ssz/src/main/java/org/apache/tuweni/ssz/SSZException.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/SSZException.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/SSZException.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java b/ssz/src/main/java/org/apache/tuweni/ssz/SSZReader.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/SSZReader.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java b/ssz/src/main/java/org/apache/tuweni/ssz/SSZWriter.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/SSZWriter.java
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/package-info.java b/ssz/src/main/java/org/apache/tuweni/ssz/package-info.java
similarity index 100%
rename from ssz/src/main/java/net/consensys/cava/ssz/package-info.java
rename to ssz/src/main/java/org/apache/tuweni/ssz/package-info.java
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt b/ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/BytesSSZReader.kt
similarity index 100%
rename from ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt
rename to ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/BytesSSZReader.kt
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt b/ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/BytesSSZWriter.kt
similarity index 100%
rename from ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt
rename to ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/BytesSSZWriter.kt
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt b/ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/SSZ.kt
similarity index 100%
rename from ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt
rename to ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/SSZ.kt
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt b/ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/SSZReader.kt
similarity index 100%
rename from ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt
rename to ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/SSZReader.kt
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt b/ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/SSZWriter.kt
similarity index 100%
rename from ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt
rename to ssz/src/main/kotlin/org/apache/tuweni/ssz/experimental/SSZWriter.kt
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java b/ssz/src/test/java/org/apache/tuweni/ssz/ByteBufferWriterTest.java
similarity index 100%
rename from ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java
rename to ssz/src/test/java/org/apache/tuweni/ssz/ByteBufferWriterTest.java
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java b/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZReaderTest.java
similarity index 100%
rename from ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java
rename to ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZReaderTest.java
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java b/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZWriterTest.java
similarity index 100%
rename from ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java
rename to ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZWriterTest.java
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java b/ssz/src/test/java/org/apache/tuweni/ssz/HashTreeRootTest.java
similarity index 100%
rename from ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java
rename to ssz/src/test/java/org/apache/tuweni/ssz/HashTreeRootTest.java
diff --git a/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt b/ssz/src/test/kotlin/org/apache/tuweni/ssz/experimental/SSZTest.kt
similarity index 100%
rename from ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt
rename to ssz/src/test/kotlin/org/apache/tuweni/ssz/experimental/SSZTest.kt
diff --git a/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlLexer.g4 b/toml/src/main/antlr/org/apache/tuweni/toml/internal/TomlLexer.g4
similarity index 100%
rename from toml/src/main/antlr/net/consensys/cava/toml/internal/TomlLexer.g4
rename to toml/src/main/antlr/org/apache/tuweni/toml/internal/TomlLexer.g4
diff --git a/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlParser.g4 b/toml/src/main/antlr/org/apache/tuweni/toml/internal/TomlParser.g4
similarity index 100%
rename from toml/src/main/antlr/net/consensys/cava/toml/internal/TomlParser.g4
rename to toml/src/main/antlr/org/apache/tuweni/toml/internal/TomlParser.g4
diff --git a/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java b/toml/src/main/java/org/apache/tuweni/toml/AccumulatingErrorListener.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java
rename to toml/src/main/java/org/apache/tuweni/toml/AccumulatingErrorListener.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/ArrayVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/ArrayVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java b/toml/src/main/java/org/apache/tuweni/toml/ErrorReporter.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java
rename to toml/src/main/java/org/apache/tuweni/toml/ErrorReporter.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/InlineTableVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/InlineTableVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java b/toml/src/main/java/org/apache/tuweni/toml/JsonSerializer.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java
rename to toml/src/main/java/org/apache/tuweni/toml/JsonSerializer.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/KeyVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/KeyVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/LineVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/LineVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/LineVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/LocalDateVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/LocalDateVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/LocalTimeVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/LocalTimeVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java b/toml/src/main/java/org/apache/tuweni/toml/MutableTomlArray.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java
rename to toml/src/main/java/org/apache/tuweni/toml/MutableTomlArray.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java b/toml/src/main/java/org/apache/tuweni/toml/MutableTomlTable.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java
rename to toml/src/main/java/org/apache/tuweni/toml/MutableTomlTable.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/Parser.java b/toml/src/main/java/org/apache/tuweni/toml/Parser.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/Parser.java
rename to toml/src/main/java/org/apache/tuweni/toml/Parser.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/QuotedStringVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/QuotedStringVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TokenName.java b/toml/src/main/java/org/apache/tuweni/toml/TokenName.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TokenName.java
rename to toml/src/main/java/org/apache/tuweni/toml/TokenName.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/Toml.java b/toml/src/main/java/org/apache/tuweni/toml/Toml.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/Toml.java
rename to toml/src/main/java/org/apache/tuweni/toml/Toml.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlArray.java b/toml/src/main/java/org/apache/tuweni/toml/TomlArray.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TomlArray.java
rename to toml/src/main/java/org/apache/tuweni/toml/TomlArray.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java b/toml/src/main/java/org/apache/tuweni/toml/TomlInvalidTypeException.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java
rename to toml/src/main/java/org/apache/tuweni/toml/TomlInvalidTypeException.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java b/toml/src/main/java/org/apache/tuweni/toml/TomlParseError.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TomlParseError.java
rename to toml/src/main/java/org/apache/tuweni/toml/TomlParseError.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java b/toml/src/main/java/org/apache/tuweni/toml/TomlParseResult.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java
rename to toml/src/main/java/org/apache/tuweni/toml/TomlParseResult.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java b/toml/src/main/java/org/apache/tuweni/toml/TomlPosition.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TomlPosition.java
rename to toml/src/main/java/org/apache/tuweni/toml/TomlPosition.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlTable.java b/toml/src/main/java/org/apache/tuweni/toml/TomlTable.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TomlTable.java
rename to toml/src/main/java/org/apache/tuweni/toml/TomlTable.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlType.java b/toml/src/main/java/org/apache/tuweni/toml/TomlType.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TomlType.java
rename to toml/src/main/java/org/apache/tuweni/toml/TomlType.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java b/toml/src/main/java/org/apache/tuweni/toml/TomlVersion.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/TomlVersion.java
rename to toml/src/main/java/org/apache/tuweni/toml/TomlVersion.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/ValueVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/ValueVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java b/toml/src/main/java/org/apache/tuweni/toml/ZoneOffsetVisitor.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java
rename to toml/src/main/java/org/apache/tuweni/toml/ZoneOffsetVisitor.java
diff --git a/toml/src/main/java/net/consensys/cava/toml/package-info.java b/toml/src/main/java/org/apache/tuweni/toml/package-info.java
similarity index 100%
rename from toml/src/main/java/net/consensys/cava/toml/package-info.java
rename to toml/src/main/java/org/apache/tuweni/toml/package-info.java
diff --git a/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java b/toml/src/test/java/org/apache/tuweni/toml/MutableTomlArrayTest.java
similarity index 100%
rename from toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java
rename to toml/src/test/java/org/apache/tuweni/toml/MutableTomlArrayTest.java
diff --git a/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java b/toml/src/test/java/org/apache/tuweni/toml/MutableTomlTableTest.java
similarity index 100%
rename from toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java
rename to toml/src/test/java/org/apache/tuweni/toml/MutableTomlTableTest.java
diff --git a/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java b/toml/src/test/java/org/apache/tuweni/toml/TokenNameTest.java
similarity index 100%
rename from toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java
rename to toml/src/test/java/org/apache/tuweni/toml/TokenNameTest.java
diff --git a/toml/src/test/java/net/consensys/cava/toml/TomlTest.java b/toml/src/test/java/org/apache/tuweni/toml/TomlTest.java
similarity index 100%
rename from toml/src/test/java/net/consensys/cava/toml/TomlTest.java
rename to toml/src/test/java/org/apache/tuweni/toml/TomlTest.java
diff --git a/toml/src/test/resources/net/consensys/cava/toml/example-v0.4.0.toml b/toml/src/test/resources/org/apache/tuweni/toml/example-v0.4.0.toml
similarity index 100%
rename from toml/src/test/resources/net/consensys/cava/toml/example-v0.4.0.toml
rename to toml/src/test/resources/org/apache/tuweni/toml/example-v0.4.0.toml
diff --git a/toml/src/test/resources/net/consensys/cava/toml/hard_example.toml b/toml/src/test/resources/org/apache/tuweni/toml/hard_example.toml
similarity index 100%
rename from toml/src/test/resources/net/consensys/cava/toml/hard_example.toml
rename to toml/src/test/resources/org/apache/tuweni/toml/hard_example.toml
diff --git a/toml/src/test/resources/net/consensys/cava/toml/hard_example_unicode.toml b/toml/src/test/resources/org/apache/tuweni/toml/hard_example_unicode.toml
similarity index 100%
rename from toml/src/test/resources/net/consensys/cava/toml/hard_example_unicode.toml
rename to toml/src/test/resources/org/apache/tuweni/toml/hard_example_unicode.toml
diff --git a/toml/src/test/resources/net/consensys/cava/toml/toml-v0.5.0-spec-example.toml b/toml/src/test/resources/org/apache/tuweni/toml/toml-v0.5.0-spec-example.toml
similarity index 100%
rename from toml/src/test/resources/net/consensys/cava/toml/toml-v0.5.0-spec-example.toml
rename to toml/src/test/resources/org/apache/tuweni/toml/toml-v0.5.0-spec-example.toml
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java b/units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt256Value.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt256Value.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java b/units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt384Value.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt384Value.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java b/units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt64Value.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/BaseUInt64Value.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt256.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt256.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt256.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt256Domain.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt256Domain.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt256Value.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt256Value.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt256ValueDomain.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt256ValueDomain.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt256s.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt256s.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt384.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt384.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt384.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt384Domain.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt384Domain.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt384Value.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt384Value.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt384ValueDomain.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt384ValueDomain.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt384s.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt384s.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt64.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt64.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt64.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt64Domain.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt64Domain.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt64Value.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt64Value.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt64ValueDomain.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt64ValueDomain.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java b/units/src/main/java/org/apache/tuweni/units/bigints/UInt64s.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/UInt64s.java
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/package-info.java b/units/src/main/java/org/apache/tuweni/units/bigints/package-info.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/bigints/package-info.java
rename to units/src/main/java/org/apache/tuweni/units/bigints/package-info.java
diff --git a/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java b/units/src/main/java/org/apache/tuweni/units/ethereum/Gas.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/ethereum/Gas.java
rename to units/src/main/java/org/apache/tuweni/units/ethereum/Gas.java
diff --git a/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java b/units/src/main/java/org/apache/tuweni/units/ethereum/Wei.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/ethereum/Wei.java
rename to units/src/main/java/org/apache/tuweni/units/ethereum/Wei.java
diff --git a/units/src/main/java/net/consensys/cava/units/ethereum/package-info.java b/units/src/main/java/org/apache/tuweni/units/ethereum/package-info.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/ethereum/package-info.java
rename to units/src/main/java/org/apache/tuweni/units/ethereum/package-info.java
diff --git a/units/src/main/java/net/consensys/cava/units/package-info.java b/units/src/main/java/org/apache/tuweni/units/package-info.java
similarity index 100%
rename from units/src/main/java/net/consensys/cava/units/package-info.java
rename to units/src/main/java/org/apache/tuweni/units/package-info.java
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt256ValueTest.java b/units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt256ValueTest.java
similarity index 100%
rename from units/src/test/java/net/consensys/cava/units/bigints/BaseUInt256ValueTest.java
rename to units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt256ValueTest.java
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt384ValueTest.java b/units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt384ValueTest.java
similarity index 100%
rename from units/src/test/java/net/consensys/cava/units/bigints/BaseUInt384ValueTest.java
rename to units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt384ValueTest.java
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/BaseUInt64ValueTest.java b/units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt64ValueTest.java
similarity index 100%
rename from units/src/test/java/net/consensys/cava/units/bigints/BaseUInt64ValueTest.java
rename to units/src/test/java/org/apache/tuweni/units/bigints/BaseUInt64ValueTest.java
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/UInt256Test.java b/units/src/test/java/org/apache/tuweni/units/bigints/UInt256Test.java
similarity index 100%
rename from units/src/test/java/net/consensys/cava/units/bigints/UInt256Test.java
rename to units/src/test/java/org/apache/tuweni/units/bigints/UInt256Test.java
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/UInt384Test.java b/units/src/test/java/org/apache/tuweni/units/bigints/UInt384Test.java
similarity index 100%
rename from units/src/test/java/net/consensys/cava/units/bigints/UInt384Test.java
rename to units/src/test/java/org/apache/tuweni/units/bigints/UInt384Test.java
diff --git a/units/src/test/java/net/consensys/cava/units/bigints/UInt64Test.java b/units/src/test/java/org/apache/tuweni/units/bigints/UInt64Test.java
similarity index 100%
rename from units/src/test/java/net/consensys/cava/units/bigints/UInt64Test.java
rename to units/src/test/java/org/apache/tuweni/units/bigints/UInt64Test.java
diff --git a/units/src/test/java/net/consensys/cava/units/ethereum/GasTest.java b/units/src/test/java/org/apache/tuweni/units/ethereum/GasTest.java
similarity index 100%
rename from units/src/test/java/net/consensys/cava/units/ethereum/GasTest.java
rename to units/src/test/java/org/apache/tuweni/units/ethereum/GasTest.java
diff --git a/units/src/test/java/net/consensys/cava/units/ethereum/WeiTest.java b/units/src/test/java/org/apache/tuweni/units/ethereum/WeiTest.java
similarity index 100%
rename from units/src/test/java/net/consensys/cava/units/ethereum/WeiTest.java
rename to units/src/test/java/org/apache/tuweni/units/ethereum/WeiTest.java


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 22/32: Update README.md

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit e425f3862d031237978ddac09ea54e226bc5f01f
Author: Jonny Rhea <jo...@gmail.com>
AuthorDate: Tue Apr 16 18:04:33 2019 -0500

    Update README.md
    
    Updating the CI badge
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 74c8c56..6223257 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # Tuweni: Apache Core Libraries for Java (& Kotlin)
 
-[![Build Status](https://circleci.com/gh/ConsenSys/cava.svg?style=shield&circle-token=440c81af8cae3c059b516a8e375471258d7e0229)](https://circleci.com/gh/ConsenSys/cava)
+[![Build Status](https://builds.apache.org/job/Apache%20Tuweni/job/CI/badge/icon)](https://builds.apache.org/job/Apache%20Tuweni/job/CI/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/ConsenSys/cava/blob/master/LICENSE)
 [![Download](https://api.bintray.com/packages/consensys/consensys/cava/images/download.svg?version=0.6.0) ](https://bintray.com/consensys/consensys/cava/0.6.0)
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 16/32: Expose hash of the payload separately from the payload

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit b6df939659f3e1b976fb5711ee245195b0bf614d
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Sat Apr 6 23:29:02 2019 -0700

    Expose hash of the payload separately from the payload
---
 .../main/java/org/apache/tuweni/plumtree/MessageSender.java    |  3 ++-
 plumtree/src/main/java/org/apache/tuweni/plumtree/State.java   | 10 +++++-----
 .../org/apache/tuweni/plumtree/vertx/VertxGossipServer.java    |  4 +++-
 .../src/test/java/org/apache/tuweni/plumtree/StateTest.java    |  8 +++++---
 4 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/MessageSender.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/MessageSender.java
index 01aac1a..ea18d67 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/MessageSender.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/MessageSender.java
@@ -33,7 +33,8 @@ public interface MessageSender {
    * 
    * @param verb the type of message
    * @param peer the target of the message
+   * @param hash the hash of the message
    * @param payload the bytes to send
    */
-  void sendMessage(Verb verb, Peer peer, @Nullable Bytes payload);
+  void sendMessage(Verb verb, Peer peer, Bytes hash, @Nullable Bytes payload);
 }
diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
index f35f358..bc776e0 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
@@ -80,7 +80,7 @@ public final class State {
         if (sender == null || messageValidator.validate(message, sender)) {
           for (Peer peer : peerRepository.eagerPushPeers()) {
             if (sender == null || !sender.equals(peer)) {
-              messageSender.sendMessage(MessageSender.Verb.GOSSIP, peer, message);
+              messageSender.sendMessage(MessageSender.Verb.GOSSIP, peer, hash, message);
             }
           }
           lazyQueue.addAll(
@@ -88,13 +88,13 @@ public final class State {
                   .lazyPushPeers()
                   .stream()
                   .filter(p -> !lazyPeers.contains(p))
-                  .map(peer -> (Runnable) (() -> messageSender.sendMessage(MessageSender.Verb.IHAVE, peer, hash)))
+                  .map(peer -> (Runnable) (() -> messageSender.sendMessage(MessageSender.Verb.IHAVE, peer, hash, null)))
                   .collect(Collectors.toList()));
           messageListener.accept(message);
         }
       } else {
         if (sender != null) {
-          messageSender.sendMessage(MessageSender.Verb.PRUNE, sender, null);
+          messageSender.sendMessage(MessageSender.Verb.PRUNE, sender, hash, null);
           peerRepository.moveToLazy(sender);
         }
       }
@@ -108,7 +108,7 @@ public final class State {
           if (newPeerIndex == lazyPeers.size()) {
             newPeerIndex = 0;
           }
-          messageSender.sendMessage(MessageSender.Verb.GRAFT, lazyPeers.get(index), hash);
+          messageSender.sendMessage(MessageSender.Verb.GRAFT, lazyPeers.get(index), hash, null);
           scheduleGraftMessage(newPeerIndex++);
         }
       };
@@ -237,7 +237,7 @@ public final class State {
    */
   public void receiveGraftMessage(Peer peer, Bytes messageHash) {
     peerRepository.moveToEager(peer);
-    messageSender.sendMessage(MessageSender.Verb.GOSSIP, peer, messageHash);
+    messageSender.sendMessage(MessageSender.Verb.GOSSIP, peer, messageHash, null);
   }
 
   /**
diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/VertxGossipServer.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/VertxGossipServer.java
index 303ac60..fe2cf24 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/VertxGossipServer.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/VertxGossipServer.java
@@ -47,6 +47,7 @@ public final class VertxGossipServer {
   private static final class Message {
 
     public MessageSender.Verb verb;
+    public String hash;
     public String payload;
   }
   private final class SocketHandler {
@@ -135,9 +136,10 @@ public final class VertxGossipServer {
         if (res.failed()) {
           completion.completeExceptionally(res.cause());
         } else {
-          state = new State(peerRepository, messageHashing, (verb, peer, payload) -> {
+          state = new State(peerRepository, messageHashing, (verb, peer, hash, payload) -> {
             Message message = new Message();
             message.verb = verb;
+            message.hash = hash.toHexString();
             message.payload = payload == null ? null : payload.toHexString();
             try {
               ((SocketPeer) peer).socket().write(Buffer.buffer(mapper.writeValueAsBytes(message)));
diff --git a/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java b/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java
index 3dfb206..be5f110 100644
--- a/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java
+++ b/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java
@@ -37,12 +37,14 @@ class StateTest {
 
     Verb verb;
     Peer peer;
+    Bytes hash;
     Bytes payload;
 
     @Override
-    public void sendMessage(Verb verb, Peer peer, Bytes payload) {
+    public void sendMessage(Verb verb, Peer peer, Bytes hash, Bytes payload) {
       this.verb = verb;
       this.peer = peer;
+      this.hash = hash;
       this.payload = payload;
 
     }
@@ -139,7 +141,7 @@ class StateTest {
     assertEquals(msg, messageSender.payload);
     assertEquals(otherPeer, messageSender.peer);
     state.processQueue();
-    assertEquals(Hash.keccak256(msg), messageSender.payload);
+    assertEquals(Hash.keccak256(msg), messageSender.hash);
     assertEquals(lazyPeer, messageSender.peer);
     assertEquals(MessageSender.Verb.IHAVE, messageSender.verb);
   }
@@ -174,7 +176,7 @@ class StateTest {
     Bytes message = Bytes32.random();
     state.receiveIHaveMessage(lazyPeer, message);
     Thread.sleep(200);
-    assertEquals(message, messageSender.payload);
+    assertEquals(message, messageSender.hash);
     assertEquals(lazyPeer, messageSender.peer);
     assertEquals(MessageSender.Verb.GRAFT, messageSender.verb);
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 14/32: Merge pull request #2 from atoulme/plumtree

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit c9834ec31cd3d5c82a0aad223483d0f09ade03d6
Merge: 756334d 1da45ed
Author: Antoine Toulme <at...@users.noreply.github.com>
AuthorDate: Wed Apr 3 17:09:14 2019 -0700

    Merge pull request #2 from atoulme/plumtree
    
    Add a sample integration example to plumtree

 plumtree/build.gradle                              |   4 +
 .../{StateActor.java => MessageValidator.java}     |  18 +-
 .../main/java/org/apache/tuweni/plumtree/Peer.java |   5 +-
 .../java/org/apache/tuweni/plumtree/State.java     | 115 +++++++++---
 .../SocketPeer.java}                               |  26 ++-
 .../tuweni/plumtree/vertx/VertxGossipServer.java   | 208 +++++++++++++++++++++
 .../java/org/apache/tuweni/plumtree/StateTest.java |  92 ++++-----
 .../plumtree/vertx/VertxGossipServerTest.java      | 165 ++++++++++++++++
 8 files changed, 562 insertions(+), 71 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 08/32: Ensure tests and build use the tuweni paths

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 0e01b32e42912b0b03d4ac01ee752d5a2b74de82
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Wed Apr 3 00:07:43 2019 -0700

    Ensure tests and build use the tuweni paths
---
 io/src/test/java/org/apache/tuweni/io/ResourcesTest.java  | 2 +-
 io/src/test/java/org/apache/tuweni/io/file/FilesTest.java | 2 +-
 toml/build.gradle                                         | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
index 1bf6644..20b58ee 100644
--- a/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
+++ b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
@@ -40,7 +40,7 @@ class ResourcesTest {
   @Test
   @SuppressWarnings("MustBeClosedChecker")
   void shouldIterateResourcesOnFileSystemAndInJars() throws Exception {
-    List<URL> all = Resources.find("net/consensys/cava/io/file/resourceresolver/**").collect(Collectors.toList());
+    List<URL> all = Resources.find("org/apache/tuweni/io/file/resourceresolver/**").collect(Collectors.toList());
     assertEquals(12, all.size(), () -> describeExpectation(12, all));
 
     List<URL> txtFiles = Resources.find("net/**/test*.txt").collect(Collectors.toList());
diff --git a/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java b/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
index 26b63a1..5695b86 100644
--- a/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
+++ b/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
@@ -56,7 +56,7 @@ class FilesTest {
 
   @Test
   void canCopyResources(@TempDirectory Path tempDir) throws Exception {
-    Path file = copyResource("net/consensys/cava/io/file/test.txt", tempDir.resolve("test.txt"));
+    Path file = copyResource("org/apache/tuweni/io/file/test.txt", tempDir.resolve("test.txt"));
     assertTrue(Files.exists(file));
     assertEquals(81, Files.size(file));
   }
diff --git a/toml/build.gradle b/toml/build.gradle
index 3e11e88..a911b04 100644
--- a/toml/build.gradle
+++ b/toml/build.gradle
@@ -3,7 +3,7 @@ description = 'A parser for Tom\'s Obvious, Minimal Language (TOML).'
 apply plugin: 'antlr'
 
 generateGrammarSource {
-  outputDirectory file("${project.buildDir}/generated-src/antlr/main/net/consensys/cava/toml/internal")
+  outputDirectory file("${project.buildDir}/generated-src/antlr/main/org/apache/tuweni/toml/internal")
   arguments << "-visitor" << "-long-messages"
   arguments << "-Xexact-output-dir"
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 06/32: change file path in TomlTest

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit a609c89e64bcc76db6d45a86a009c2cd07c3c00f
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Tue Apr 2 23:27:18 2019 -0700

    change file path in TomlTest
---
 toml/src/test/java/org/apache/tuweni/toml/TomlTest.java | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/toml/src/test/java/org/apache/tuweni/toml/TomlTest.java b/toml/src/test/java/org/apache/tuweni/toml/TomlTest.java
index a29a819..18b7cb7 100644
--- a/toml/src/test/java/org/apache/tuweni/toml/TomlTest.java
+++ b/toml/src/test/java/org/apache/tuweni/toml/TomlTest.java
@@ -480,7 +480,7 @@ class TomlTest {
 
   @Test
   void testTomlV0_4_0Example() throws Exception {
-    InputStream is = this.getClass().getResourceAsStream("/net/consensys/cava/toml/example-v0.4.0.toml");
+    InputStream is = this.getClass().getResourceAsStream("/org/apache/tuweni/toml/example-v0.4.0.toml");
     assertNotNull(is);
     TomlParseResult result = Toml.parse(is, TomlVersion.V0_4_0);
     assertFalse(result.hasErrors(), () -> joinErrors(result));
@@ -496,7 +496,7 @@ class TomlTest {
 
   @Test
   void testHardExample() throws Exception {
-    InputStream is = this.getClass().getResourceAsStream("/net/consensys/cava/toml/hard_example.toml");
+    InputStream is = this.getClass().getResourceAsStream("/org/apache/tuweni/toml/hard_example.toml");
     assertNotNull(is);
     TomlParseResult result = Toml.parse(is, TomlVersion.V0_4_0);
     assertFalse(result.hasErrors(), () -> joinErrors(result));
@@ -508,7 +508,7 @@ class TomlTest {
 
   @Test
   void testHardExampleUnicode() throws Exception {
-    InputStream is = this.getClass().getResourceAsStream("/net/consensys/cava/toml/hard_example_unicode.toml");
+    InputStream is = this.getClass().getResourceAsStream("/org/apache/tuweni/toml/hard_example_unicode.toml");
     assertNotNull(is);
     TomlParseResult result = Toml.parse(is, TomlVersion.V0_4_0);
     assertFalse(result.hasErrors(), () -> joinErrors(result));
@@ -520,7 +520,7 @@ class TomlTest {
 
   @Test
   void testSpecExample() throws Exception {
-    InputStream is = this.getClass().getResourceAsStream("/net/consensys/cava/toml/toml-v0.5.0-spec-example.toml");
+    InputStream is = this.getClass().getResourceAsStream("/org/apache/tuweni/toml/toml-v0.5.0-spec-example.toml");
     assertNotNull(is);
     TomlParseResult result = Toml.parse(is, TomlVersion.V0_4_0);
     assertFalse(result.hasErrors(), () -> joinErrors(result));


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 17/32: modifying sendGossipMessage to return the message hash

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit a3f1f7ffc02016122bbc6819f79e6c4a22049452
Author: jonny rhea <jo...@gmail.com>
AuthorDate: Mon Apr 8 13:50:24 2019 -0500

    modifying sendGossipMessage to return the message hash
---
 plumtree/src/main/java/org/apache/tuweni/plumtree/State.java | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
index bc776e0..bb71818 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
@@ -244,10 +244,13 @@ public final class State {
    * Sends a gossip message to all peers, according to their status.
    * 
    * @param message the message to propagate
+   * @return The associated hash of the message
    */
-  public void sendGossipMessage(Bytes message) {
-    MessageHandler handler = messageHandlers.computeIfAbsent(messageHashingFunction.hash(message), MessageHandler::new);
+  public Bytes sendGossipMessage(Bytes message) {
+    Bytes messageHash = messageHashingFunction.hash(message);
+    MessageHandler handler = messageHandlers.computeIfAbsent(messageHash, MessageHandler::new);
     handler.fullMessageReceived(null, message);
+    return messageHash;
   }
 
   void processQueue() {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 11/32: Remove mentions of cava from the build file

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 98ed3533fc8b872e33d7554c79344e92f05a167b
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Wed Apr 3 16:10:19 2019 -0700

    Remove mentions of cava from the build file
---
 build.gradle | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/build.gradle b/build.gradle
index 892128b..9a7dac5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -133,7 +133,7 @@ subprojects {
 task deploy() {}
 
 configurations.archives.artifacts.removeAll { PublishArtifact publishArtifact ->
-  (publishArtifact.type == 'jar' && publishArtifact.name == 'cava')}
+  (publishArtifact.type == 'jar' && publishArtifact.name == 'tuweni')}
 
 
 //////
@@ -228,7 +228,7 @@ allprojects {
     def relativePath = rootDir.toPath().relativize(projectDir.toPath()).toString()
     linkMapping {
       dir = projectDir.toString()
-      url = "https://github.com/consensys/cava/blob/master/$relativePath"
+      url = "https://github.com/apache/incubator-tuweni/blob/master/$relativePath"
       suffix = "#L"
     }
   }
@@ -305,7 +305,7 @@ allprojects {
           pom {
             name = project.jar.baseName
             afterEvaluate { description = project.description }
-            url = 'https://github.com/ConsenSys/cava'
+            url = 'https://github.com/apache/incubator-tuweni'
             licenses {
               license {
                 name = "The Apache License, Version 2.0"
@@ -313,22 +313,22 @@ allprojects {
               }
             }
             scm {
-              connection = 'scm:https://github.com/ConsenSys/cava.git'
-              developerConnection = 'scm:git@github.com:ConsenSys/cava.git'
-              url = 'https://github.com/ConsenSys/cava'
+              connection = 'scm:https://github.com/apache/incubator-tuweni.git'
+              developerConnection = 'scm:git@github.com:apache/incubator-tuweni.git'
+              url = 'https://github.com/apache/incubator-tuweni'
             }
             developers {
               developer {
                 name = 'Chris Leishman'
                 email = 'chris@leishman.org'
-                organization = 'ConsenSys'
-                organizationUrl = 'https://www.consensys.net'
+                organization = 'Apache'
+                organizationUrl = 'https://tuweni.apache.org'
               }
               developer {
                 name = 'Antoine Toulme'
                 email = 'antoine@lunar-ocean.com'
-                organization = 'ConsenSys'
-                organizationUrl = 'https://www.consensys.net'
+                organization = 'Apache'
+                organizationUrl = 'https://tuweni.apache.org'
               }
             }
           }
@@ -440,12 +440,12 @@ allprojects {
       publish = true
       pkg {
         repo = 'consensys'
-        name = 'cava'
+        name = 'tuweni'
         userOrg = 'consensys'
         licenses = ['Apache-2.0']
         version {
           name = project.version
-          desc = 'Cava distribution'
+          desc = 'Tuweni distribution'
           released = new Date()
           vcsTag = project.version
         }
@@ -504,7 +504,7 @@ dokka {
   })
   linkMapping {
     dir = rootDir.toString()
-    url = "https://github.com/consensys/cava/blob/master"
+    url = "https://github.com/apache/incubator-tuweni/blob/master"
     suffix = "#L"
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 02/32: Start of migration to ASF namespace... net.consensys.cava -> org.apache.tuweni

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit e20ff92ccf50fa2117112ac22057ffb1a460d35f
Author: Jim Jagielski <ji...@gmail.com>
AuthorDate: Tue Apr 2 16:35:48 2019 -0400

    Start of migration to ASF namespace... net.consensys.cava -> org.apache.tuweni
---
 PACKAGES.md                                        | 82 +++++++++++-----------
 README.md                                          |  4 +-
 build.gradle                                       |  6 +-
 .../net/consensys/cava/bytes/AbstractBytes.java    |  2 +-
 .../consensys/cava/bytes/ArrayWrappingBytes.java   |  2 +-
 .../consensys/cava/bytes/ArrayWrappingBytes32.java |  2 +-
 .../consensys/cava/bytes/ArrayWrappingBytes48.java |  2 +-
 .../consensys/cava/bytes/BufferWrappingBytes.java  |  2 +-
 .../consensys/cava/bytes/ByteBufWrappingBytes.java |  2 +-
 .../cava/bytes/ByteBufferWrappingBytes.java        |  2 +-
 .../main/java/net/consensys/cava/bytes/Bytes.java  |  2 +-
 .../java/net/consensys/cava/bytes/Bytes32.java     |  2 +-
 .../java/net/consensys/cava/bytes/Bytes48.java     |  2 +-
 .../java/net/consensys/cava/bytes/BytesValues.java |  2 +-
 .../consensys/cava/bytes/ConcatenatedBytes.java    |  2 +-
 .../consensys/cava/bytes/DelegatingBytes32.java    |  2 +-
 .../consensys/cava/bytes/DelegatingBytes48.java    |  2 +-
 .../cava/bytes/DelegatingMutableBytes32.java       |  2 +-
 .../cava/bytes/DelegatingMutableBytes48.java       |  2 +-
 .../cava/bytes/MutableArrayWrappingBytes.java      |  2 +-
 .../cava/bytes/MutableArrayWrappingBytes32.java    |  2 +-
 .../cava/bytes/MutableArrayWrappingBytes48.java    |  2 +-
 .../cava/bytes/MutableBufferWrappingBytes.java     |  2 +-
 .../cava/bytes/MutableByteBufWrappingBytes.java    |  2 +-
 .../cava/bytes/MutableByteBufferWrappingBytes.java |  2 +-
 .../net/consensys/cava/bytes/MutableBytes.java     |  2 +-
 .../net/consensys/cava/bytes/MutableBytes32.java   |  2 +-
 .../net/consensys/cava/bytes/MutableBytes48.java   |  2 +-
 .../net/consensys/cava/bytes/package-info.java     |  4 +-
 .../net/consensys/cava/bytes/BufferBytesTest.java  |  2 +-
 .../net/consensys/cava/bytes/ByteBufBytesTest.java |  2 +-
 .../consensys/cava/bytes/ByteBufferBytesTest.java  |  2 +-
 .../java/net/consensys/cava/bytes/Bytes32Test.java |  2 +-
 .../java/net/consensys/cava/bytes/Bytes48Test.java |  2 +-
 .../java/net/consensys/cava/bytes/BytesTest.java   |  2 +-
 .../net/consensys/cava/bytes/CommonBytesTests.java |  2 +-
 .../cava/bytes/ConcatenatedBytesTest.java          |  6 +-
 .../cava/concurrent/coroutines/AsyncCompletion.kt  |  6 +-
 .../cava/concurrent/coroutines/AsyncResult.kt      |  6 +-
 .../cava/concurrent/coroutines/CoroutineLatch.kt   |  2 +-
 .../cava/concurrent/coroutines/Retryable.kt        |  2 +-
 .../concurrent/coroutines/CoroutineLatchTest.kt    |  2 +-
 .../cava/concurrent/coroutines/RetryableTest.kt    |  2 +-
 .../consensys/cava/concurrent/AsyncCompletion.java |  2 +-
 .../net/consensys/cava/concurrent/AsyncResult.java |  2 +-
 .../consensys/cava/concurrent/AtomicSlotMap.java   |  2 +-
 .../concurrent/CompletableAsyncCompletion.java     |  2 +-
 .../cava/concurrent/CompletableAsyncResult.java    |  2 +-
 .../DefaultCompletableAsyncCompletion.java         |  2 +-
 .../concurrent/DefaultCompletableAsyncResult.java  |  2 +-
 .../net/consensys/cava/concurrent/ExpiringMap.java |  2 +-
 .../net/consensys/cava/concurrent/ExpiringSet.java |  2 +-
 .../consensys/cava/concurrent/package-info.java    |  4 +-
 .../cava/concurrent/AtomicSlotMapTest.java         |  2 +-
 .../DefaultCompletableAsyncCompletionTest.java     |  2 +-
 .../DefaultCompletableAsyncResultTest.java         |  2 +-
 .../consensys/cava/concurrent/ExpiringMapTest.java |  2 +-
 .../consensys/cava/concurrent/ExpiringSetTest.java |  2 +-
 .../net/consensys/cava/config/Configuration.java   |  6 +-
 .../consensys/cava/config/ConfigurationError.java  |  2 +-
 .../consensys/cava/config/ConfigurationErrors.java |  2 +-
 .../cava/config/ConfigurationValidator.java        |  2 +-
 .../consensys/cava/config/DocumentPosition.java    |  2 +-
 .../consensys/cava/config/EmptyConfiguration.java  |  4 +-
 .../InvalidConfigurationPropertyTypeException.java |  2 +-
 .../config/NoConfigurationPropertyException.java   |  2 +-
 .../consensys/cava/config/PropertyValidator.java   |  6 +-
 .../consensys/cava/config/PropertyValidators.java  |  6 +-
 .../java/net/consensys/cava/config/Schema.java     |  2 +-
 .../net/consensys/cava/config/SchemaBuilder.java   |  4 +-
 .../cava/config/TomlBackedConfiguration.java       | 16 ++---
 .../net/consensys/cava/config/TomlSerializer.java  |  6 +-
 .../net/consensys/cava/config/package-info.java    |  4 +-
 .../cava/config/PropertyValidatorTest.java         |  2 +-
 .../consensys/cava/config/SchemaBuilderTest.java   |  6 +-
 .../cava/config/TomlBackedConfigurationTest.java   |  6 +-
 .../main/java/net/consensys/cava/crypto/Hash.java  |  6 +-
 .../InvalidSEC256K1SecretKeyStoreException.java    |  2 +-
 .../java/net/consensys/cava/crypto/SECP256K1.java  | 18 ++---
 .../consensys/cava/crypto/mikuli/AtePairing.java   |  2 +-
 .../net/consensys/cava/crypto/mikuli/BLS12381.java |  4 +-
 .../net/consensys/cava/crypto/mikuli/G1Point.java  |  4 +-
 .../net/consensys/cava/crypto/mikuli/G2Point.java  |  4 +-
 .../net/consensys/cava/crypto/mikuli/GTPoint.java  |  2 +-
 .../net/consensys/cava/crypto/mikuli/Group.java    |  2 +-
 .../net/consensys/cava/crypto/mikuli/KeyPair.java  |  2 +-
 .../consensys/cava/crypto/mikuli/PublicKey.java    |  4 +-
 .../net/consensys/cava/crypto/mikuli/Scalar.java   |  2 +-
 .../consensys/cava/crypto/mikuli/SecretKey.java    |  4 +-
 .../consensys/cava/crypto/mikuli/Signature.java    |  4 +-
 .../cava/crypto/mikuli/SignatureAndPublicKey.java  |  2 +-
 .../consensys/cava/crypto/mikuli/package-info.java |  4 +-
 .../net/consensys/cava/crypto/package-info.java    |  4 +-
 .../consensys/cava/crypto/sodium/AES256GCM.java    |  4 +-
 .../consensys/cava/crypto/sodium/Allocated.java    |  4 +-
 .../net/consensys/cava/crypto/sodium/Auth.java     |  4 +-
 .../java/net/consensys/cava/crypto/sodium/Box.java |  4 +-
 .../consensys/cava/crypto/sodium/Concatenate.java  |  2 +-
 .../sodium/DefaultDetachedEncryptionResult.java    |  4 +-
 .../crypto/sodium/DetachedEncryptionResult.java    |  4 +-
 .../consensys/cava/crypto/sodium/DiffieHelman.java |  4 +-
 .../consensys/cava/crypto/sodium/GenericHash.java  |  4 +-
 .../consensys/cava/crypto/sodium/HMACSHA256.java   |  4 +-
 .../consensys/cava/crypto/sodium/HMACSHA512.java   |  4 +-
 .../cava/crypto/sodium/HMACSHA512256.java          |  4 +-
 .../cava/crypto/sodium/KeyDerivation.java          |  4 +-
 .../consensys/cava/crypto/sodium/KeyExchange.java  |  4 +-
 .../consensys/cava/crypto/sodium/LibSodium.java    |  2 +-
 .../consensys/cava/crypto/sodium/PasswordHash.java |  4 +-
 .../consensys/cava/crypto/sodium/SHA256Hash.java   |  4 +-
 .../consensys/cava/crypto/sodium/SecretBox.java    |  4 +-
 .../cava/crypto/sodium/SecretDecryptionStream.java |  4 +-
 .../cava/crypto/sodium/SecretEncryptionStream.java |  4 +-
 .../consensys/cava/crypto/sodium/Signature.java    |  4 +-
 .../net/consensys/cava/crypto/sodium/Sodium.java   |  2 +-
 .../cava/crypto/sodium/SodiumException.java        |  2 +-
 .../cava/crypto/sodium/SodiumVersion.java          |  2 +-
 .../cava/crypto/sodium/XChaCha20Poly1305.java      |  4 +-
 .../consensys/cava/crypto/sodium/package-info.java |  6 +-
 .../java/net/consensys/cava/crypto/HashTest.java   |  6 +-
 .../net/consensys/cava/crypto/SECP256K1Test.java   | 22 +++---
 .../cava/crypto/mikuli/SignatureTest.java          |  4 +-
 .../cava/crypto/sodium/AES256GCMTest.java          |  2 +-
 .../cava/crypto/sodium/AllocatedTest.java          |  4 +-
 .../net/consensys/cava/crypto/sodium/AuthTest.java |  2 +-
 .../net/consensys/cava/crypto/sodium/BoxTest.java  |  2 +-
 .../cava/crypto/sodium/ConcatenateTest.java        |  4 +-
 .../cava/crypto/sodium/DiffieHelmanTest.java       |  2 +-
 .../cava/crypto/sodium/GenericHashTest.java        |  4 +-
 .../cava/crypto/sodium/HMACSHA256Test.java         |  4 +-
 .../cava/crypto/sodium/HMACSHA512256Test.java      |  4 +-
 .../cava/crypto/sodium/HMACSHA512Test.java         |  4 +-
 .../cava/crypto/sodium/KeyDerivationTest.java      |  6 +-
 .../cava/crypto/sodium/PasswordHashTest.java       | 10 +--
 .../cava/crypto/sodium/SHA256HashTest.java         |  4 +-
 .../cava/crypto/sodium/SecretBoxTest.java          |  2 +-
 .../cava/crypto/sodium/SignatureTest.java          |  4 +-
 .../consensys/cava/crypto/sodium/SodiumTest.java   |  2 +-
 .../cava/crypto/sodium/XChaCha20Poly1305Test.java  |  2 +-
 .../consensys/cava/devp2p/AtomicLongProperty.kt    |  2 +-
 .../net/consensys/cava/devp2p/DiscoveryService.kt  | 26 +++----
 .../kotlin/net/consensys/cava/devp2p/Endpoint.kt   |  8 +--
 .../kotlin/net/consensys/cava/devp2p/EnodeUri.kt   |  6 +-
 .../main/kotlin/net/consensys/cava/devp2p/Node.kt  |  8 +--
 .../kotlin/net/consensys/cava/devp2p/Packet.kt     | 18 ++---
 .../kotlin/net/consensys/cava/devp2p/PacketType.kt |  8 +--
 .../main/kotlin/net/consensys/cava/devp2p/Peer.kt  |  4 +-
 .../net/consensys/cava/devp2p/PeerRepository.kt    |  8 +--
 .../net/consensys/cava/devp2p/PeerRoutingTable.kt  |  8 +--
 .../cava/devp2p/DiscoveryServiceJavaTest.java      | 10 +--
 .../consensys/cava/devp2p/DiscoveryServiceTest.kt  |  8 +--
 .../net/consensys/cava/devp2p/EndpointTest.kt      |  4 +-
 .../cava/devp2p/EphemeralPeerRepositoryTest.kt     |  6 +-
 .../consensys/cava/devp2p/FindNodePacketTest.kt    |  8 +--
 .../consensys/cava/devp2p/NeighborsPacketTest.kt   |  8 +--
 .../net/consensys/cava/devp2p/PingPacketTest.kt    |  8 +--
 .../net/consensys/cava/devp2p/PongPacketTest.kt    | 10 +--
 .../cava/eth/reference/BlockRLPTestSuite.java      | 28 ++++----
 .../cava/eth/reference/MerkleTrieTestSuite.java    | 10 +--
 .../cava/eth/reference/RLPReferenceTestSuite.java  | 14 ++--
 .../consensys/cava/eth/reference/SSZTestSuite.java | 10 +--
 .../cava/eth/reference/TransactionTestSuite.java   | 14 ++--
 .../cava/eth/repository/BlockHeaderFields.kt       |  2 +-
 .../cava/eth/repository/BlockchainIndex.kt         | 42 +++++------
 .../cava/eth/repository/BlockchainRepository.kt    | 18 ++---
 .../eth/repository/TransactionReceiptFields.kt     |  2 +-
 .../cava/eth/repository/BlockchainIndexTest.kt     | 32 ++++-----
 .../eth/repository/BlockchainRepositoryTest.kt     | 40 +++++------
 .../main/java/net/consensys/cava/eth/Address.java  |  4 +-
 .../main/java/net/consensys/cava/eth/Block.java    | 12 ++--
 .../java/net/consensys/cava/eth/BlockBody.java     | 12 ++--
 .../java/net/consensys/cava/eth/BlockHeader.java   | 14 ++--
 eth/src/main/java/net/consensys/cava/eth/Hash.java |  8 +--
 eth/src/main/java/net/consensys/cava/eth/Log.java  | 10 +--
 .../net/consensys/cava/eth/LogsBloomFilter.java    | 12 ++--
 .../java/net/consensys/cava/eth/Transaction.java   | 24 +++----
 .../net/consensys/cava/eth/TransactionReceipt.java | 12 ++--
 .../java/net/consensys/cava/eth/package-info.java  |  4 +-
 .../java/net/consensys/cava/eth/BlockBodyTest.java | 10 +--
 .../net/consensys/cava/eth/BlockHeaderTest.java    | 10 +--
 .../java/net/consensys/cava/eth/BlockTest.java     | 10 +--
 .../test/java/net/consensys/cava/eth/LogTest.java  |  8 +--
 .../consensys/cava/eth/LogsBloomFilterTest.java    |  8 +--
 .../consensys/cava/eth/TransactionReceiptTest.java | 10 +--
 .../net/consensys/cava/eth/TransactionTest.java    | 16 ++---
 io/src/main/java/net/consensys/cava/io/Base64.java |  4 +-
 .../java/net/consensys/cava/io/IOConsumer.java     |  2 +-
 .../net/consensys/cava/io/NullOutputStream.java    |  2 +-
 .../main/java/net/consensys/cava/io/Resources.java |  4 +-
 .../main/java/net/consensys/cava/io/Streams.java   |  2 +-
 .../java/net/consensys/cava/io/file/Files.java     |  4 +-
 .../net/consensys/cava/io/file/package-info.java   |  4 +-
 .../java/net/consensys/cava/io/package-info.java   |  4 +-
 .../java/net/consensys/cava/io/Base64Test.java     |  4 +-
 .../java/net/consensys/cava/io/ResourcesTest.java  |  2 +-
 .../java/net/consensys/cava/io/StreamsTest.java    |  4 +-
 .../java/net/consensys/cava/io/file/FilesTest.java | 10 +--
 .../cava/junit/BouncyCastleExtension.java          |  2 +-
 .../java/net/consensys/cava/junit/LuceneIndex.java |  2 +-
 .../consensys/cava/junit/LuceneIndexWriter.java    |  2 +-
 .../cava/junit/LuceneIndexWriterExtension.java     |  2 +-
 .../java/net/consensys/cava/junit/RedisPort.java   |  2 +-
 .../consensys/cava/junit/RedisServerExtension.java |  2 +-
 .../net/consensys/cava/junit/TempDirectory.java    |  2 +-
 .../cava/junit/TempDirectoryExtension.java         |  4 +-
 .../net/consensys/cava/junit/VertxExtension.java   |  2 +-
 .../net/consensys/cava/junit/VertxInstance.java    |  2 +-
 .../net/consensys/cava/junit/package-info.java     |  4 +-
 .../cava/junit/LuceneIndexWriterExtensionTest.java |  2 +-
 .../cava/junit/RedisServerExtensionTest.java       |  2 +-
 .../cava/junit/TempDirectoryExtensionTest.java     |  2 +-
 .../cava/kademlia/KademliaRoutingTable.kt          |  2 +-
 .../cava/kademlia/KademliaRoutingTableTest.kt      |  2 +-
 .../cava/kademlia/LogarithmicDistanceTest.kt       |  2 +-
 .../consensys/cava/kademlia/OrderedInsertTest.kt   |  2 +-
 .../net/consensys/cava/kv/RedisBytesCodec.java     |  4 +-
 .../java/net/consensys/cava/kv/package-info.java   |  4 +-
 .../consensys/cava/kv/InfinispanKeyValueStore.kt   |  4 +-
 .../kotlin/net/consensys/cava/kv/KeyValueStore.kt  | 12 ++--
 .../net/consensys/cava/kv/LevelDBKeyValueStore.kt  |  4 +-
 .../net/consensys/cava/kv/MapDBKeyValueStore.kt    |  4 +-
 .../net/consensys/cava/kv/MapKeyValueStore.kt      |  4 +-
 .../net/consensys/cava/kv/RedisKeyValueStore.kt    |  4 +-
 .../net/consensys/cava/kv/RocksDBKeyValueStore.kt  |  4 +-
 .../net/consensys/cava/kv/SQLKeyValueStore.kt      |  4 +-
 .../net/consensys/cava/kv/KeyValueStoreTest.java   | 10 +--
 .../consensys/cava/kv/RedisKeyValueStoreTest.java  | 10 +--
 .../net/consensys/cava/kv/KeyValueStoreSpec.kt     |  8 +--
 .../net/consensys/cava/les/BlockBodiesMessage.kt   |  8 +--
 .../net/consensys/cava/les/BlockHeadersMessage.kt  |  8 +--
 .../consensys/cava/les/GetBlockBodiesMessage.kt    |  8 +--
 .../consensys/cava/les/GetBlockHeadersMessage.kt   | 10 +--
 .../net/consensys/cava/les/GetReceiptsMessage.kt   |  8 +--
 .../kotlin/net/consensys/cava/les/LESPeerState.kt  |  4 +-
 .../consensys/cava/les/LESSubProtocolHandler.kt    | 26 +++----
 .../net/consensys/cava/les/LESSubprotocol.kt       | 16 ++---
 .../kotlin/net/consensys/cava/les/LightClient.kt   | 12 ++--
 .../net/consensys/cava/les/ReceiptsMessage.kt      |  8 +--
 .../kotlin/net/consensys/cava/les/StatusMessage.kt | 10 +--
 .../cava/les/LESSubProtocolHandlerTest.kt          | 54 +++++++-------
 .../net/consensys/cava/les/LESSubprotocolTest.kt   | 18 ++---
 .../kotlin/net/consensys/cava/les/MessagesTest.kt  | 34 ++++-----
 .../net/consensys/cava/trie/CompactEncoding.java   |  6 +-
 .../java/net/consensys/cava/trie/package-info.java |  4 +-
 .../kotlin/net/consensys/cava/trie/BranchNode.kt   | 12 ++--
 .../net/consensys/cava/trie/DefaultNodeFactory.kt  |  4 +-
 .../net/consensys/cava/trie/ExtensionNode.kt       | 10 +--
 .../kotlin/net/consensys/cava/trie/GetVisitor.kt   |  4 +-
 .../kotlin/net/consensys/cava/trie/LeafNode.kt     | 10 +--
 .../net/consensys/cava/trie/MerklePatriciaTrie.kt  | 12 ++--
 .../net/consensys/cava/trie/MerkleStorage.kt       | 12 ++--
 .../consensys/cava/trie/MerkleStorageException.kt  |  2 +-
 .../kotlin/net/consensys/cava/trie/MerkleTrie.kt   | 18 ++---
 .../main/kotlin/net/consensys/cava/trie/Node.kt    |  6 +-
 .../kotlin/net/consensys/cava/trie/NodeFactory.kt  |  4 +-
 .../kotlin/net/consensys/cava/trie/NodeVisitor.kt  |  4 +-
 .../kotlin/net/consensys/cava/trie/NullNode.kt     | 10 +--
 .../kotlin/net/consensys/cava/trie/PutVisitor.kt   |  4 +-
 .../net/consensys/cava/trie/RemoveVisitor.kt       |  4 +-
 .../cava/trie/StoredMerklePatriciaTrie.kt          | 10 +--
 .../kotlin/net/consensys/cava/trie/StoredNode.kt   |  8 +--
 .../net/consensys/cava/trie/StoredNodeFactory.kt   | 12 ++--
 .../consensys/cava/trie/CompactEncodingTest.java   |  4 +-
 .../cava/trie/MerklePatriciaTrieJavaTest.java      |  8 +--
 .../trie/MerklePatriciaTriePerformanceTest.java    | 14 ++--
 .../trie/StoredMerklePatriciaTrieJavaTest.java     | 12 ++--
 .../cava/trie/MerklePatriciaTrieKotlinTest.kt      |  6 +-
 .../trie/StoredMerklePatriciaTrieKotlinTest.kt     |  8 +--
 .../cava/net/coroutines/CoroutineByteChannel.kt    |  2 +-
 .../cava/net/coroutines/CoroutineChannelGroup.kt   |  2 +-
 .../net/coroutines/CoroutineDatagramChannel.kt     |  2 +-
 .../cava/net/coroutines/CoroutineNetworkChannel.kt |  2 +-
 .../cava/net/coroutines/CoroutineSelector.kt       |  2 +-
 .../net/coroutines/CoroutineServerSocketChannel.kt |  2 +-
 .../cava/net/coroutines/CoroutineSocketChannel.kt  |  2 +-
 .../cava/net/coroutines/SelectorTest.java          |  2 +-
 .../net/coroutines/CoroutineChannelGroupTest.kt    |  2 +-
 .../net/coroutines/CoroutineDatagramChannelTest.kt |  2 +-
 .../cava/net/coroutines/CoroutineSelectorTest.kt   |  2 +-
 .../net/coroutines/CoroutineSocketChannelTest.kt   |  2 +-
 .../java/net/consensys/cava/net/package-info.java  |  4 +-
 .../net/tls/ClientFingerprintTrustManager.java     |  6 +-
 .../net/tls/DelegatingTrustManagerFactory.java     |  2 +-
 .../net/tls/FileBackedFingerprintRepository.java   |  8 +--
 .../cava/net/tls/FingerprintRepository.java        |  4 +-
 .../net/tls/ServerFingerprintTrustManager.java     |  6 +-
 .../cava/net/tls/SingleTrustManagerFactory.java    |  2 +-
 .../main/java/net/consensys/cava/net/tls/TLS.java  |  6 +-
 .../cava/net/tls/TLSEnvironmentException.java      |  2 +-
 .../cava/net/tls/TrustManagerFactories.java        |  2 +-
 .../cava/net/tls/TrustManagerFactoryWrapper.java   |  2 +-
 .../consensys/cava/net/tls/VertxTrustOptions.java  |  2 +-
 .../net/consensys/cava/net/tls/package-info.java   |  2 +-
 .../cava/net/tls/ClientCaOrRecordTest.java         | 16 ++---
 .../consensys/cava/net/tls/ClientCaOrTofuTest.java | 16 ++---
 .../cava/net/tls/ClientCaOrWhitelistTest.java      | 14 ++--
 .../consensys/cava/net/tls/ClientRecordTest.java   | 16 ++---
 .../net/consensys/cava/net/tls/ClientTofuTest.java | 16 ++---
 .../cava/net/tls/ClientWhitelistTest.java          | 14 ++--
 .../tls/FileBackedFingerprintRepositoryTest.java   |  8 +--
 .../cava/net/tls/InsecureTrustOptions.java         |  2 +-
 .../consensys/cava/net/tls/SecurityTestUtils.java  |  4 +-
 .../cava/net/tls/ServerCaOrRecordTest.java         | 14 ++--
 .../consensys/cava/net/tls/ServerCaOrTofaTest.java | 14 ++--
 .../cava/net/tls/ServerCaOrWhitelistTest.java      | 12 ++--
 .../consensys/cava/net/tls/ServerRecordTest.java   | 14 ++--
 .../net/consensys/cava/net/tls/ServerTofaTest.java | 14 ++--
 .../cava/net/tls/ServerWhitelistTest.java          | 12 ++--
 .../java/net/consensys/cava/net/tls/TLSTest.java   | 10 +--
 .../cava/plumtree/EphemeralPeerRepository.java     |  2 +-
 .../consensys/cava/plumtree/MessageHashing.java    |  4 +-
 .../net/consensys/cava/plumtree/MessageSender.java |  4 +-
 .../java/net/consensys/cava/plumtree/Peer.java     |  2 +-
 .../consensys/cava/plumtree/PeerRepository.java    |  2 +-
 .../java/net/consensys/cava/plumtree/State.java    |  4 +-
 .../net/consensys/cava/plumtree/StateActor.java    |  2 +-
 .../consensys/cava/plumtree/StateActorFactory.java |  2 +-
 .../net/consensys/cava/plumtree/package-info.java  |  4 +-
 .../net/consensys/cava/plumtree/StateTest.java     | 10 +--
 .../consensys/cava/rlp/AccumulatingRLPWriter.java  | 10 +--
 .../consensys/cava/rlp/ByteBufferRLPWriter.java    | 10 +--
 .../net/consensys/cava/rlp/BytesRLPReader.java     |  4 +-
 .../net/consensys/cava/rlp/BytesRLPWriter.java     |  4 +-
 .../consensys/cava/rlp/DelegatingRLPWriter.java    |  6 +-
 .../net/consensys/cava/rlp/EndOfRLPException.java  |  2 +-
 .../cava/rlp/InvalidRLPEncodingException.java      |  2 +-
 .../cava/rlp/InvalidRLPTypeException.java          |  2 +-
 rlp/src/main/java/net/consensys/cava/rlp/RLP.java  |  4 +-
 .../java/net/consensys/cava/rlp/RLPException.java  |  2 +-
 .../java/net/consensys/cava/rlp/RLPReader.java     |  6 +-
 .../java/net/consensys/cava/rlp/RLPWriter.java     |  6 +-
 .../java/net/consensys/cava/rlp/package-info.java  |  4 +-
 .../consensys/cava/rlp/ByteBufferWriterTest.java   |  8 +--
 .../net/consensys/cava/rlp/BytesRLPReaderTest.java |  6 +-
 .../net/consensys/cava/rlp/BytesRLPWriterTest.java |  8 +--
 .../cava/rlpx/EthereumIESEncryptionEngine.java     |  2 +-
 .../net/consensys/cava/rlpx/HandshakeMessage.java  |  6 +-
 .../cava/rlpx/InitiatorHandshakeMessage.java       | 18 ++---
 .../consensys/cava/rlpx/InvalidMACException.java   |  2 +-
 .../cava/rlpx/MemoryWireConnectionsRepository.java |  4 +-
 .../net/consensys/cava/rlpx/RLPxConnection.java    | 16 ++---
 .../consensys/cava/rlpx/RLPxConnectionFactory.java | 26 +++----
 .../java/net/consensys/cava/rlpx/RLPxMessage.java  |  4 +-
 .../java/net/consensys/cava/rlpx/RLPxService.java  | 12 ++--
 .../cava/rlpx/ResponderHandshakeMessage.java       | 10 +--
 .../cava/rlpx/WireConnectionRepository.java        |  6 +-
 .../java/net/consensys/cava/rlpx/package-info.java |  4 +-
 .../cava/rlpx/vertx/VertxRLPxService.java          | 40 +++++------
 .../consensys/cava/rlpx/vertx/package-info.java    |  4 +-
 .../net/consensys/cava/rlpx/wire/Capability.java   |  2 +-
 .../rlpx/wire/DefaultSubProtocolIdentifier.java    |  2 +-
 .../cava/rlpx/wire/DefaultWireConnection.java      | 10 +--
 .../cava/rlpx/wire/DisconnectMessage.java          |  6 +-
 .../consensys/cava/rlpx/wire/DisconnectReason.java |  2 +-
 .../net/consensys/cava/rlpx/wire/HelloMessage.java |  6 +-
 .../net/consensys/cava/rlpx/wire/PingMessage.java  |  4 +-
 .../net/consensys/cava/rlpx/wire/PongMessage.java  |  4 +-
 .../net/consensys/cava/rlpx/wire/SubProtocol.java  |  4 +-
 .../cava/rlpx/wire/SubProtocolHandler.java         |  6 +-
 .../cava/rlpx/wire/SubProtocolIdentifier.java      |  2 +-
 .../consensys/cava/rlpx/wire/WireConnection.java   |  2 +-
 .../cava/rlpx/wire/WireProtocolMessage.java        |  4 +-
 .../net/consensys/cava/rlpx/wire/package-info.java |  4 +-
 .../cava/rlpx/RLPxConnectionFactoryTest.java       | 16 ++---
 .../cava/rlpx/vertx/VertxAcceptanceTest.java       | 30 ++++----
 .../cava/rlpx/vertx/VertxRLPxServiceTest.java      | 14 ++--
 .../cava/rlpx/wire/DefaultWireConnectionTest.java  | 10 +--
 .../cava/rlpx/wire/DisconnectMessageTest.java      |  4 +-
 .../consensys/cava/rlpx/wire/HelloMessageTest.java |  4 +-
 .../net/consensys/cava/rlpx/wire/PingPongTest.java | 12 ++--
 .../wire/RLPxConnectionMessageExchangeTest.java    | 16 ++---
 .../cava/scuttlebutt/discovery/LocalIdentity.java  |  8 +--
 .../ScuttlebuttLocalDiscoveryService.java          |  6 +-
 .../cava/scuttlebutt/discovery/package-info.java   |  4 +-
 .../scuttlebutt/discovery/LocalIdentityTest.java   |  6 +-
 .../ScuttlebuttLocalDiscoveryServiceTest.java      | 12 ++--
 .../scuttlebutt/handshake/HandshakeException.java  |  2 +-
 .../SecureScuttlebuttHandshakeClient.java          | 26 +++----
 .../SecureScuttlebuttHandshakeServer.java          | 22 +++---
 .../handshake/SecureScuttlebuttStream.java         | 10 +--
 .../handshake/SecureScuttlebuttStreamClient.java   |  4 +-
 .../handshake/SecureScuttlebuttStreamServer.java   |  4 +-
 .../scuttlebutt/handshake/StreamException.java     |  2 +-
 .../cava/scuttlebutt/handshake/package-info.java   |  4 +-
 .../scuttlebutt/handshake/vertx/ClientHandler.java |  4 +-
 .../handshake/vertx/ClientHandlerFactory.java      |  4 +-
 .../vertx/SecureScuttlebuttVertxClient.java        | 28 ++++----
 .../vertx/SecureScuttlebuttVertxServer.java        | 22 +++---
 .../scuttlebutt/handshake/vertx/ServerHandler.java |  4 +-
 .../handshake/vertx/ServerHandlerFactory.java      |  4 +-
 .../scuttlebutt/handshake/vertx/package-info.java  |  4 +-
 .../SecureScuttlebuttHandshakeClientTest.java      | 18 ++---
 .../handshake/SecureScuttlebuttStreamTest.java     | 10 +--
 .../handshake/vertx/VertxIntegrationTest.java      | 16 ++---
 .../consensys/cava/scuttlebutt/rpc/RPCCodec.java   |  4 +-
 .../consensys/cava/scuttlebutt/rpc/RPCFlag.java    |  2 +-
 .../consensys/cava/scuttlebutt/rpc/RPCMessage.java |  4 +-
 .../scuttlebutt/rpc/PatchworkIntegrationTest.java  | 20 +++---
 .../cava/scuttlebutt/rpc/RPCEncodingTest.java      |  4 +-
 .../cava/scuttlebutt/rpc/RPCFlagTest.java          |  2 +-
 .../cava/scuttlebutt/Ed25519KeyPairIdentity.java   |  8 +--
 .../cava/scuttlebutt/Ed25519PublicKeyIdentity.java |  8 +--
 .../net/consensys/cava/scuttlebutt/Identity.java   |  8 +--
 .../net/consensys/cava/scuttlebutt/Invite.java     |  4 +-
 .../cava/scuttlebutt/SECP256K1KeyPairIdentity.java |  8 +--
 .../scuttlebutt/SECP256K1PublicKeyIdentity.java    |  8 +--
 .../consensys/cava/scuttlebutt/package-info.java   |  4 +-
 .../consensys/cava/scuttlebutt/IdentityTest.java   | 12 ++--
 .../net/consensys/cava/scuttlebutt/InviteTest.java |  6 +-
 .../consensys/cava/ssz/ByteBufferSSZWriter.java    |  4 +-
 .../net/consensys/cava/ssz/BytesSSZReader.java     |  8 +--
 .../net/consensys/cava/ssz/BytesSSZWriter.java     |  4 +-
 .../net/consensys/cava/ssz/EndOfSSZException.java  |  2 +-
 .../cava/ssz/InvalidSSZTypeException.java          |  2 +-
 ssz/src/main/java/net/consensys/cava/ssz/SSZ.java  | 12 ++--
 .../java/net/consensys/cava/ssz/SSZException.java  |  2 +-
 .../java/net/consensys/cava/ssz/SSZReader.java     |  8 +--
 .../java/net/consensys/cava/ssz/SSZWriter.java     |  8 +--
 .../java/net/consensys/cava/ssz/package-info.java  |  4 +-
 .../cava/ssz/experimental/BytesSSZReader.kt        | 10 +--
 .../cava/ssz/experimental/BytesSSZWriter.kt        | 10 +--
 .../net/consensys/cava/ssz/experimental/SSZ.kt     | 22 +++---
 .../consensys/cava/ssz/experimental/SSZReader.kt   | 14 ++--
 .../consensys/cava/ssz/experimental/SSZWriter.kt   | 10 +--
 .../consensys/cava/ssz/ByteBufferWriterTest.java   |  8 +--
 .../net/consensys/cava/ssz/BytesSSZReaderTest.java |  8 +--
 .../net/consensys/cava/ssz/BytesSSZWriterTest.java | 10 +--
 .../net/consensys/cava/ssz/HashTreeRootTest.java   | 10 +--
 .../net/consensys/cava/ssz/experimental/SSZTest.kt |  4 +-
 toml/README.md                                     |  6 +-
 .../net/consensys/cava/toml/internal/TomlLexer.g4  |  2 +-
 .../net/consensys/cava/toml/internal/TomlParser.g4 |  2 +-
 .../cava/toml/AccumulatingErrorListener.java       |  6 +-
 .../java/net/consensys/cava/toml/ArrayVisitor.java |  8 +--
 .../net/consensys/cava/toml/ErrorReporter.java     |  2 +-
 .../consensys/cava/toml/InlineTableVisitor.java    | 10 +--
 .../net/consensys/cava/toml/JsonSerializer.java    |  4 +-
 .../java/net/consensys/cava/toml/KeyVisitor.java   |  8 +--
 .../java/net/consensys/cava/toml/LineVisitor.java  | 16 ++---
 .../net/consensys/cava/toml/LocalDateVisitor.java  | 10 +--
 .../net/consensys/cava/toml/LocalTimeVisitor.java  | 12 ++--
 .../net/consensys/cava/toml/MutableTomlArray.java  |  6 +-
 .../net/consensys/cava/toml/MutableTomlTable.java  |  8 +--
 .../main/java/net/consensys/cava/toml/Parser.java  |  6 +-
 .../consensys/cava/toml/QuotedStringVisitor.java   | 14 ++--
 .../java/net/consensys/cava/toml/TokenName.java    |  4 +-
 .../main/java/net/consensys/cava/toml/Toml.java    |  2 +-
 .../java/net/consensys/cava/toml/TomlArray.java    |  4 +-
 .../cava/toml/TomlInvalidTypeException.java        |  2 +-
 .../net/consensys/cava/toml/TomlParseError.java    |  2 +-
 .../net/consensys/cava/toml/TomlParseResult.java   |  2 +-
 .../java/net/consensys/cava/toml/TomlPosition.java |  2 +-
 .../java/net/consensys/cava/toml/TomlTable.java    |  8 +--
 .../java/net/consensys/cava/toml/TomlType.java     |  2 +-
 .../java/net/consensys/cava/toml/TomlVersion.java  |  2 +-
 .../java/net/consensys/cava/toml/ValueVisitor.java | 42 +++++------
 .../net/consensys/cava/toml/ZoneOffsetVisitor.java |  8 +--
 .../java/net/consensys/cava/toml/package-info.java |  4 +-
 .../consensys/cava/toml/MutableTomlArrayTest.java  |  4 +-
 .../consensys/cava/toml/MutableTomlTableTest.java  |  4 +-
 .../net/consensys/cava/toml/TokenNameTest.java     |  4 +-
 .../java/net/consensys/cava/toml/TomlTest.java     |  2 +-
 .../cava/units/bigints/BaseUInt256Value.java       |  6 +-
 .../cava/units/bigints/BaseUInt384Value.java       |  6 +-
 .../cava/units/bigints/BaseUInt64Value.java        |  4 +-
 .../net/consensys/cava/units/bigints/UInt256.java  | 10 +--
 .../cava/units/bigints/UInt256Domain.java          |  2 +-
 .../consensys/cava/units/bigints/UInt256Value.java |  6 +-
 .../cava/units/bigints/UInt256ValueDomain.java     |  2 +-
 .../net/consensys/cava/units/bigints/UInt256s.java |  2 +-
 .../net/consensys/cava/units/bigints/UInt384.java  | 10 +--
 .../cava/units/bigints/UInt384Domain.java          |  2 +-
 .../consensys/cava/units/bigints/UInt384Value.java |  6 +-
 .../cava/units/bigints/UInt384ValueDomain.java     |  2 +-
 .../net/consensys/cava/units/bigints/UInt384s.java |  2 +-
 .../net/consensys/cava/units/bigints/UInt64.java   |  6 +-
 .../consensys/cava/units/bigints/UInt64Domain.java |  2 +-
 .../consensys/cava/units/bigints/UInt64Value.java  |  4 +-
 .../cava/units/bigints/UInt64ValueDomain.java      |  2 +-
 .../net/consensys/cava/units/bigints/UInt64s.java  |  2 +-
 .../consensys/cava/units/bigints/package-info.java |  2 +-
 .../net/consensys/cava/units/ethereum/Gas.java     |  8 +--
 .../net/consensys/cava/units/ethereum/Wei.java     |  6 +-
 .../cava/units/ethereum/package-info.java          |  2 +-
 .../net/consensys/cava/units/package-info.java     |  4 +-
 .../cava/units/bigints/BaseUInt256ValueTest.java   |  4 +-
 .../cava/units/bigints/BaseUInt384ValueTest.java   |  4 +-
 .../cava/units/bigints/BaseUInt64ValueTest.java    |  4 +-
 .../consensys/cava/units/bigints/UInt256Test.java  |  4 +-
 .../consensys/cava/units/bigints/UInt384Test.java  |  4 +-
 .../consensys/cava/units/bigints/UInt64Test.java   |  4 +-
 .../net/consensys/cava/units/ethereum/GasTest.java |  2 +-
 .../net/consensys/cava/units/ethereum/WeiTest.java |  2 +-
 493 files changed, 1621 insertions(+), 1621 deletions(-)

diff --git a/PACKAGES.md b/PACKAGES.md
index 0ecbe08..5b874f6 100644
--- a/PACKAGES.md
+++ b/PACKAGES.md
@@ -2,136 +2,136 @@
 
 In the spirit of [Google Guava](https://github.com/google/guava/), Cava is a set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages.
 
-# Package net.consensys.cava.bytes
+# Package org.apache.tuweni.bytes
 
 Classes and utilities for working with byte arrays.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-bytes` (`cava-bytes.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-bytes` (`cava-bytes.jar`).
 
-# Package net.consensys.cava.concurrent
+# Package org.apache.tuweni.concurrent
 
 Classes and utilities for working with concurrency.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-concurrent` (`cava-concurrent.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-concurrent` (`cava-concurrent.jar`).
 
-# Package net.consensys.cava.concurrent.coroutines
+# Package org.apache.tuweni.concurrent.coroutines
 
-Extensions for mapping [AsyncResult][net.consensys.cava.concurrent.AsyncResult] and [AsyncCompletion][net.consensys.cava.concurrent.AsyncCompletion] objects to and from Kotlin coroutines.
+Extensions for mapping [AsyncResult][org.apache.tuweni.concurrent.AsyncResult] and [AsyncCompletion][org.apache.tuweni.concurrent.AsyncCompletion] objects to and from Kotlin coroutines.
 
-# Package net.consensys.cava.config
+# Package org.apache.tuweni.config
 
 A general-purpose library for managing configuration data.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-config` (`cava-config.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-config` (`cava-config.jar`).
 
-# Package net.consensys.cava.crypto
+# Package org.apache.tuweni.crypto
 
 Classes and utilities for working with cryptography.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-crypto` (`cava-crypto.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-crypto` (`cava-crypto.jar`).
 
-# Package net.consensys.cava.crypto.sodium
+# Package org.apache.tuweni.crypto.sodium
 
 Classes and utilities for working with the sodium native library.
 
-Classes and utilities in this package provide an interface to the native Sodium crypto library (https://www.libsodium.org/), which must be installed on the same system as the JVM. It will be searched for in common library locations, or its it can be loaded explicitly using [net.consensys.cava.crypto.sodium.Sodium.loadLibrary].
+Classes and utilities in this package provide an interface to the native Sodium crypto library (https://www.libsodium.org/), which must be installed on the same system as the JVM. It will be searched for in common library locations, or its it can be loaded explicitly using [org.apache.tuweni.crypto.sodium.Sodium.loadLibrary].
 
 Classes in this package depend upon the JNR-FFI library, which is not automatically included when using the complete Cava distribution. See https://github.com/jnr/jnr-ffi. JNR-FFI can be included using the gradle dependency `com.github.jnr:jnr-ffi`.
 
-# Package net.consensys.cava.devp2p
+# Package org.apache.tuweni.devp2p
 
 Kotlin coroutine based implementation of the Ethereum ÐΞVp2p protocol.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-devp2p` (`cava-devp2p.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-devp2p` (`cava-devp2p.jar`).
 
-# Package net.consensys.cava.eth
+# Package org.apache.tuweni.eth
 
 Classes and utilities for working in the Ethereum domain.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-eth` (`cava-eth.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-eth` (`cava-eth.jar`).
 
-# Package net.consensys.cava.io
+# Package org.apache.tuweni.io
 
 Classes and utilities for handling file and network IO.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-io` (`cava-io.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-io` (`cava-io.jar`).
 
-# Package net.consensys.cava.io.file
+# Package org.apache.tuweni.io.file
 
 General utilities for working with files and the filesystem.
 
-# Package net.consensys.cava.junit
+# Package org.apache.tuweni.junit
 
 Utilities for better junit testing.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-junit` (`cava-junit.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-junit` (`cava-junit.jar`).
 
-# Package net.consensys.cava.kademlia
+# Package org.apache.tuweni.kademlia
 
 An implementation of the kademlia distributed hash (routing) table.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-kademlia` (`cava-kademlia.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-kademlia` (`cava-kademlia.jar`).
 
-# Package net.consensys.cava.kv
+# Package org.apache.tuweni.kv
 
 Classes and utilities for working with key/value stores.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-kv` (`cava-kv.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-kv` (`cava-kv.jar`).
 
-# Package net.consensys.cava.net
+# Package org.apache.tuweni.net
 
 Classes and utilities for working with networking.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-net` (`cava-net.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-net` (`cava-net.jar`).
 
-# Package net.consensys.cava.net.coroutines
+# Package org.apache.tuweni.net.coroutines
 
 Classes and utilities for coroutine based networking.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-net-coroutines` (`cava-net-coroutines.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-net-coroutines` (`cava-net-coroutines.jar`).
 
-# Package net.consensys.cava.net.tls
+# Package org.apache.tuweni.net.tls
 
 Utilities for doing fingerprint based TLS certificate checking.
 
-# Package net.consensys.cava.rlp
+# Package org.apache.tuweni.rlp
 
 Recursive Length Prefix (RLP) encoding and decoding.
 
 An implementation of the Ethereum Recursive Length Prefix (RLP) algorithm, as described at https://github.com/ethereum/wiki/wiki/RLP.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-rlp` (`cava-rlp.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-rlp` (`cava-rlp.jar`).
 
-# Package net.consensys.cava.toml
+# Package org.apache.tuweni.toml
 
 A parser for Tom's Obvious, Minimal Language (TOML).
 
 A parser and semantic checker for Tom's Obvious, Minimal Language (TOML), as described at https://github.com/toml-lang/toml/.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-toml` (cava-toml.jar).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-toml` (cava-toml.jar).
 
-# Package net.consensys.cava.trie
+# Package org.apache.tuweni.trie
 
 Merkle Trie implementations.
 
 Implementations of the Ethereum Patricia Trie, as described at https://github.com/ethereum/wiki/wiki/Patricia-Tree.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-merkle-trie` (`cava-merkle-trie.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-merkle-trie` (`cava-merkle-trie.jar`).
 
-# Package net.consensys.cava.trie
+# Package org.apache.tuweni.trie
 
 Merkle Trie implementations using Kotlin coroutines.
 
-# Package net.consensys.cava.units
+# Package org.apache.tuweni.units
 
 Classes and utilities for working with 256 bit integers and Ethereum units.
 
-These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-units` (`cava-units.jar`).
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `org.apache.tuweni:cava-units` (`cava-units.jar`).
 
-# Package net.consensys.cava.units.bigints
+# Package org.apache.tuweni.units.bigints
 
 Classes and utilities for working with 256 bit integers.
 
-# Package net.consensys.cava.units.ethereum
+# Package org.apache.tuweni.units.ethereum
 
 Classes and utilities for working with Ethereum units.
diff --git a/README.md b/README.md
index e4ce4b9..fdf8286 100644
--- a/README.md
+++ b/README.md
@@ -21,13 +21,13 @@ You can import all modules using the cava jar.
 With Maven:
 ```xml
 <dependency>
-  <groupId>net.consensys.cava</groupId>
+  <groupId>org.apache.tuweni</groupId>
   <artifactId>cava</artifactId>
   <version>0.6.0</version>
 </dependency>
 ```
 
-With Gradle: `compile 'net.consensys.cava:cava:0.6.0'`
+With Gradle: `compile 'org.apache.tuweni:cava:0.6.0'`
 
 [PACKAGES.md](PACKAGES.md) contains the list of modules and instructions to import them separately.
 
diff --git a/build.gradle b/build.gradle
index 94eaa36..892128b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -97,7 +97,7 @@ subprojects {
       removeUnusedImports()
       licenseHeaderFile rootProject.file('gradle/spotless.license.java')
       eclipse().configFile(rootProject.file('gradle/eclipse-java-consensys-style.xml'))
-      importOrder 'net.consensys', 'java', ''
+      importOrder 'org.apache', 'java', ''
       endWithNewline()
     }
     kotlin {
@@ -298,7 +298,7 @@ allprojects {
             artifact sourcesJar { classifier 'sources' }
           }
           artifact dokkaJar { classifier 'javadoc' }
-          groupId 'net.consensys.cava'
+          groupId 'org.apache.tuweni'
           artifactId project.jar.baseName
           version project.version
 
@@ -340,7 +340,7 @@ allprojects {
             def addDependencyNode = { dep, optional ->
               def dependencyNode = dependenciesNode.appendNode('dependency')
               if (dep instanceof ProjectDependency) {
-                dependencyNode.appendNode('groupId', 'net.consensys.cava')
+                dependencyNode.appendNode('groupId', 'org.apache.tuweni')
                 dependencyNode.appendNode('artifactId', rootProject.name + '-' + dep.name)
                 dependencyNode.appendNode('version', dep.version)
               } else {
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
index 614962f..25c186e 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 /**
  * An abstract {@link Bytes} value that provides implementations of {@link #equals(Object)}, {@link #hashCode()} and
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
index 2fa1c29..1fa0439 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
index fa60064..babc70c 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
index 8f33bae..6f64a17 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
index 197937d..2563cc3 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
index 4031f38..f2be78f 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
index 53547da..26607b4 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
index 40340a0..91c1df9 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
index f962f52..da6a6ef 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
index c75b91f..ae00c9b 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java b/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
index 4bde33e..13b78f9 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
index c12a189..b678ce9 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
index c1603b8..061fddc 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
index b89cbea..62dcaeb 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
index a273db8..278414f 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
index a16e82b..7e8dfe7 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
index 4dc30d2..8474e0d 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
index c54aeaf..d5ead47 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 final class MutableArrayWrappingBytes32 extends MutableArrayWrappingBytes implements MutableBytes32 {
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
index 62b8b4f..a716e06 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 final class MutableArrayWrappingBytes48 extends MutableArrayWrappingBytes implements MutableBytes48 {
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
index b1feff5..5fbb600 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
index 6fe907d..e2f6e4d 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
index 283e33a..2d6e521 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
index 3ef2f85..e9717cf 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkElementIndex;
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
index b055c37..4b5f891 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
index 2e267e8..801e94c 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/package-info.java b/bytes/src/main/java/net/consensys/cava/bytes/package-info.java
index 3707b77..b357932 100644
--- a/bytes/src/main/java/net/consensys/cava/bytes/package-info.java
+++ b/bytes/src/main/java/net/consensys/cava/bytes/package-info.java
@@ -3,9 +3,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-bytes' (cava-bytes.jar).
+ * 'org.apache.tuweni:cava-bytes' (cava-bytes.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
index db1719e..f7b2a20 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import io.vertx.core.buffer.Buffer;
 
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
index 06096eb..1057610 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import io.netty.buffer.Unpooled;
 
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
index 554f086..83fce73 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import java.nio.ByteBuffer;
 
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java b/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
index 04df458..28f2ab6 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java b/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
index 89ca1d2..bde9bdb 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
index eb1d0a5..7236b88 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static java.nio.ByteOrder.LITTLE_ENDIAN;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java b/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
index b16c74a..993135b 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
index f3b09e8..38d26fd 100644
--- a/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.bytes;
+package org.apache.tuweni.bytes;
 
-import static net.consensys.cava.bytes.Bytes.fromHexString;
-import static net.consensys.cava.bytes.Bytes.wrap;
+import static org.apache.tuweni.bytes.Bytes.fromHexString;
+import static org.apache.tuweni.bytes.Bytes.wrap;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
index 4cd0969..2033576 100644
--- a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent.coroutines
+package org.apache.tuweni.concurrent.coroutines
 
 import kotlinx.coroutines.CancellableContinuation
 import kotlinx.coroutines.CompletableDeferred
@@ -24,8 +24,8 @@ import kotlinx.coroutines.Job
 import kotlinx.coroutines.ObsoleteCoroutinesApi
 import kotlinx.coroutines.newCoroutineContext
 import kotlinx.coroutines.suspendCancellableCoroutine
-import net.consensys.cava.concurrent.AsyncCompletion
-import net.consensys.cava.concurrent.CompletableAsyncCompletion
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.CompletableAsyncCompletion
 import java.util.concurrent.CancellationException
 import java.util.concurrent.CompletionException
 import java.util.function.Consumer
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
index 7149b2e..9508d69 100644
--- a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent.coroutines
+package org.apache.tuweni.concurrent.coroutines
 
 import kotlinx.coroutines.CancellableContinuation
 import kotlinx.coroutines.CompletableDeferred
@@ -24,8 +24,8 @@ import kotlinx.coroutines.Job
 import kotlinx.coroutines.ObsoleteCoroutinesApi
 import kotlinx.coroutines.newCoroutineContext
 import kotlinx.coroutines.suspendCancellableCoroutine
-import net.consensys.cava.concurrent.AsyncResult
-import net.consensys.cava.concurrent.CompletableAsyncResult
+import org.apache.tuweni.concurrent.AsyncResult
+import org.apache.tuweni.concurrent.CompletableAsyncResult
 import java.util.concurrent.CancellationException
 import java.util.concurrent.CompletionException
 import java.util.function.BiConsumer
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
index ec609e1..1723644 100644
--- a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent.coroutines
+package org.apache.tuweni.concurrent.coroutines
 
 import kotlinx.coroutines.suspendCancellableCoroutine
 import java.util.concurrent.atomic.AtomicInteger
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
index 498e85b..49d92a2 100644
--- a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent.coroutines
+package org.apache.tuweni.concurrent.coroutines
 
 import kotlinx.coroutines.CancellationException
 import kotlinx.coroutines.CompletableDeferred
diff --git a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
index a61094c..07899fb 100644
--- a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
+++ b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent.coroutines
+package org.apache.tuweni.concurrent.coroutines
 
 import kotlinx.coroutines.TimeoutCancellationException
 import kotlinx.coroutines.async
diff --git a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
index f29cb96..c6f71f8 100644
--- a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
+++ b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent.coroutines
+package org.apache.tuweni.concurrent.coroutines
 
 import kotlinx.coroutines.CoroutineExceptionHandler
 import kotlinx.coroutines.delay
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
index cf97b6c..77b2471 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java
index b039e77..d3214e3 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java b/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java
index 8a8a487..6b6eba2 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/AtomicSlotMap.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java b/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java
index e546b7b..49fe75e 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncCompletion.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 /**
  * An {@link AsyncCompletion} that can later be completed successfully or with a provided exception.
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java b/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java
index 5dfddb5..0665519 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/CompletableAsyncResult.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import javax.annotation.Nullable;
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java b/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java
index 7dddb17..e4ae055 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletion.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java b/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java
index 3073026..37bc55c 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResult.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java b/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java
index 5b1bd21..2e4cbbd 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringMap.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java b/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java
index 05d0bdd..5163714 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/ExpiringSet.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/package-info.java b/concurrent/src/main/java/net/consensys/cava/concurrent/package-info.java
index 136ab2b..c0f9c47 100644
--- a/concurrent/src/main/java/net/consensys/cava/concurrent/package-info.java
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/package-info.java
@@ -3,9 +3,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-concurrent' (cava-concurrent.jar).
+ * 'org.apache.tuweni:cava-concurrent' (cava-concurrent.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java
index d813bd8..ee08bb2 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/AtomicSlotMapTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java
index 504d86d..17fbb89 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncCompletionTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.fail;
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java
index 1d1cbeb..002c6bf 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/DefaultCompletableAsyncResultTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.fail;
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java
index cacc43e..2a58b53 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringMapTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java b/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java
index d619c2a..99837ae 100644
--- a/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java
+++ b/concurrent/src/test/java/net/consensys/cava/concurrent/ExpiringSetTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.concurrent;
+package org.apache.tuweni.concurrent;
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/config/src/main/java/net/consensys/cava/config/Configuration.java b/config/src/main/java/net/consensys/cava/config/Configuration.java
index fbf1608..83aed67 100644
--- a/config/src/main/java/net/consensys/cava/config/Configuration.java
+++ b/config/src/main/java/net/consensys/cava/config/Configuration.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.toml.Toml.canonicalDottedKey;
+import static org.apache.tuweni.toml.Toml.canonicalDottedKey;
 
-import net.consensys.cava.toml.Toml;
+import org.apache.tuweni.toml.Toml;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationError.java b/config/src/main/java/net/consensys/cava/config/ConfigurationError.java
index 3c9283c..646b8b1 100644
--- a/config/src/main/java/net/consensys/cava/config/ConfigurationError.java
+++ b/config/src/main/java/net/consensys/cava/config/ConfigurationError.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import javax.annotation.Nullable;
 
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java b/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java
index d7f2df1..5fce1c8 100644
--- a/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java
+++ b/config/src/main/java/net/consensys/cava/config/ConfigurationErrors.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java b/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java
index 43d56a9..4b2a70e 100644
--- a/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java
+++ b/config/src/main/java/net/consensys/cava/config/ConfigurationValidator.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import java.util.List;
 
diff --git a/config/src/main/java/net/consensys/cava/config/DocumentPosition.java b/config/src/main/java/net/consensys/cava/config/DocumentPosition.java
index 1ab1bca..e7ccfbf 100644
--- a/config/src/main/java/net/consensys/cava/config/DocumentPosition.java
+++ b/config/src/main/java/net/consensys/cava/config/DocumentPosition.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 
 /**
diff --git a/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java b/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java
index 0c38102..020152b 100644
--- a/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java
+++ b/config/src/main/java/net/consensys/cava/config/EmptyConfiguration.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
-import static net.consensys.cava.config.Configuration.canonicalKey;
+import static org.apache.tuweni.config.Configuration.canonicalKey;
 
 import java.io.IOException;
 import java.util.Collections;
diff --git a/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java b/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java
index 27cd06b..d81e5ec 100644
--- a/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java
+++ b/config/src/main/java/net/consensys/cava/config/InvalidConfigurationPropertyTypeException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import javax.annotation.Nullable;
 
diff --git a/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java b/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java
index 7d19453..6ed89ff 100644
--- a/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java
+++ b/config/src/main/java/net/consensys/cava/config/NoConfigurationPropertyException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 /**
  * An exception thrown when a requested configuration property is not found.
diff --git a/config/src/main/java/net/consensys/cava/config/PropertyValidator.java b/config/src/main/java/net/consensys/cava/config/PropertyValidator.java
index 17295d7..fa03b17 100644
--- a/config/src/main/java/net/consensys/cava/config/PropertyValidator.java
+++ b/config/src/main/java/net/consensys/cava/config/PropertyValidator.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
-import static net.consensys.cava.config.ConfigurationErrors.noErrors;
-import static net.consensys.cava.config.ConfigurationErrors.singleError;
+import static org.apache.tuweni.config.ConfigurationErrors.noErrors;
+import static org.apache.tuweni.config.ConfigurationErrors.singleError;
 
 import java.net.MalformedURLException;
 import java.net.URL;
diff --git a/config/src/main/java/net/consensys/cava/config/PropertyValidators.java b/config/src/main/java/net/consensys/cava/config/PropertyValidators.java
index a5bceb8..e576e6b 100644
--- a/config/src/main/java/net/consensys/cava/config/PropertyValidators.java
+++ b/config/src/main/java/net/consensys/cava/config/PropertyValidators.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
-import static net.consensys.cava.config.ConfigurationErrors.noErrors;
-import static net.consensys.cava.config.ConfigurationErrors.singleError;
+import static org.apache.tuweni.config.ConfigurationErrors.noErrors;
+import static org.apache.tuweni.config.ConfigurationErrors.singleError;
 
 final class PropertyValidators {
   private PropertyValidators() {}
diff --git a/config/src/main/java/net/consensys/cava/config/Schema.java b/config/src/main/java/net/consensys/cava/config/Schema.java
index 6ddeee2..309df3a 100644
--- a/config/src/main/java/net/consensys/cava/config/Schema.java
+++ b/config/src/main/java/net/consensys/cava/config/Schema.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java b/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java
index 8e1b0a9..5fe2f69 100644
--- a/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java
+++ b/config/src/main/java/net/consensys/cava/config/SchemaBuilder.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.config.Configuration.canonicalKey;
+import static org.apache.tuweni.config.Configuration.canonicalKey;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java b/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java
index 65634a4..5db73b4 100644
--- a/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java
+++ b/config/src/main/java/net/consensys/cava/config/TomlBackedConfiguration.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
-import static net.consensys.cava.toml.Toml.joinKeyPath;
-import static net.consensys.cava.toml.Toml.parseDottedKey;
+import static org.apache.tuweni.toml.Toml.joinKeyPath;
+import static org.apache.tuweni.toml.Toml.parseDottedKey;
 
-import net.consensys.cava.toml.TomlArray;
-import net.consensys.cava.toml.TomlInvalidTypeException;
-import net.consensys.cava.toml.TomlParseResult;
-import net.consensys.cava.toml.TomlPosition;
-import net.consensys.cava.toml.TomlTable;
+import org.apache.tuweni.toml.TomlArray;
+import org.apache.tuweni.toml.TomlInvalidTypeException;
+import org.apache.tuweni.toml.TomlParseResult;
+import org.apache.tuweni.toml.TomlPosition;
+import org.apache.tuweni.toml.TomlTable;
 
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/config/src/main/java/net/consensys/cava/config/TomlSerializer.java b/config/src/main/java/net/consensys/cava/config/TomlSerializer.java
index 71dcc69..68f17ec 100644
--- a/config/src/main/java/net/consensys/cava/config/TomlSerializer.java
+++ b/config/src/main/java/net/consensys/cava/config/TomlSerializer.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
-import static net.consensys.cava.config.Configuration.canonicalKey;
+import static org.apache.tuweni.config.Configuration.canonicalKey;
 
-import net.consensys.cava.toml.Toml;
+import org.apache.tuweni.toml.Toml;
 
 import java.io.IOException;
 import java.util.Collections;
diff --git a/config/src/main/java/net/consensys/cava/config/package-info.java b/config/src/main/java/net/consensys/cava/config/package-info.java
index cde800a..96dd6ce 100644
--- a/config/src/main/java/net/consensys/cava/config/package-info.java
+++ b/config/src/main/java/net/consensys/cava/config/package-info.java
@@ -2,9 +2,9 @@
  * A general-purpose library for managing configuration data.
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-config' (cava-config.jar).
+ * 'org.apache.tuweni:cava-config' (cava-config.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java b/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java
index 67cd4d8..b32e06a 100644
--- a/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java
+++ b/config/src/test/java/net/consensys/cava/config/PropertyValidatorTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java b/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java
index 036e8a6..438cfab 100644
--- a/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java
+++ b/config/src/test/java/net/consensys/cava/config/SchemaBuilderTest.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
-import static net.consensys.cava.config.ConfigurationErrors.noErrors;
-import static net.consensys.cava.config.ConfigurationErrors.singleError;
+import static org.apache.tuweni.config.ConfigurationErrors.noErrors;
+import static org.apache.tuweni.config.ConfigurationErrors.singleError;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
diff --git a/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java b/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java
index b987212..3b46833 100644
--- a/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java
+++ b/config/src/test/java/net/consensys/cava/config/TomlBackedConfigurationTest.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.config;
+package org.apache.tuweni.config;
 
-import static net.consensys.cava.config.ConfigurationErrors.noErrors;
-import static net.consensys.cava.config.ConfigurationErrors.singleError;
+import static org.apache.tuweni.config.ConfigurationErrors.noErrors;
+import static org.apache.tuweni.config.ConfigurationErrors.singleError;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/Hash.java b/crypto/src/main/java/net/consensys/cava/crypto/Hash.java
index 7576d3d..e660343 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/Hash.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/Hash.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto;
+package org.apache.tuweni.crypto;
 
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
 
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java b/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java
index 6f9a241..641b297 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/InvalidSEC256K1SecretKeyStoreException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto;
+package org.apache.tuweni.crypto;
 
 /**
  * Exception thrown when reading a store that contains an invalid SEC256K1 private keys.
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java b/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java
index 3291ed6..3d0b0ee 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/SECP256K1.java
@@ -10,20 +10,20 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto;
+package org.apache.tuweni.crypto;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 import static java.nio.file.StandardOpenOption.READ;
-import static net.consensys.cava.crypto.Hash.keccak256;
-import static net.consensys.cava.crypto.SECP256K1.Parameters.CURVE;
-import static net.consensys.cava.io.file.Files.atomicReplace;
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.bytes.MutableBytes;
-import net.consensys.cava.units.bigints.UInt256;
+import static org.apache.tuweni.crypto.Hash.keccak256;
+import static org.apache.tuweni.crypto.SECP256K1.Parameters.CURVE;
+import static org.apache.tuweni.io.file.Files.atomicReplace;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.bytes.MutableBytes;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.io.IOException;
 import java.math.BigInteger;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java
index 2485a96..f5e84b0 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/AtePairing.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 import org.apache.milagro.amcl.BLS381.FP12;
 import org.apache.milagro.amcl.BLS381.PAIR;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java
index f8d933d..a867f60 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/BLS12381.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.apache.milagro.amcl.BLS381.ECP;
 import org.apache.milagro.amcl.BLS381.ECP2;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java
index 2278baa..e472f83 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G1Point.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java
index 1fc5714..fafb509 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/G2Point.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java
index 1fb4212..e19bf37 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/GTPoint.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 import java.util.Objects;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java
index 70c848f..30a67f2 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Group.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 /**
  * Group is an interface that define the allowed mathematical operators
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java
index be09ffc..6ea890b 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/KeyPair.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 import org.apache.milagro.amcl.BLS381.BIG;
 import org.apache.milagro.amcl.BLS381.ECP;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java
index e5a18f7..5ba81ff 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/PublicKey.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.List;
 import java.util.Objects;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java
index f31606a..ae2de0a 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Scalar.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 import java.util.Objects;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java
index 632cc8a..2bbb86c 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SecretKey.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 import static org.apache.milagro.amcl.BLS381.BIG.MODBYTES;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java
index a0fd5ed..0a37427 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/Signature.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.List;
 import java.util.Objects;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java
index 4042c45..14d66a9 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/SignatureAndPublicKey.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 import java.util.List;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/package-info.java b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/package-info.java
index 247a408..a299598 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/mikuli/package-info.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/mikuli/package-info.java
@@ -3,9 +3,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-crypto' (cava-crypto.jar).
+ * 'org.apache.tuweni:cava-crypto' (cava-crypto.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/package-info.java b/crypto/src/main/java/net/consensys/cava/crypto/package-info.java
index 805e45b..ba26899 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/package-info.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/package-info.java
@@ -3,6 +3,6 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-crypto' (cava-crypto.jar).
+ * 'org.apache.tuweni:cava-crypto' (cava-crypto.jar).
  */
-package net.consensys.cava.crypto;
+package org.apache.tuweni.crypto;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java
index caf6b72..1ce47c2 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/AES256GCM.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Arrays;
 import javax.annotation.Nullable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java
index e553e98..ed28dd6 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Allocated.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkState;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.annotation.Nullable;
 import javax.security.auth.Destroyable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java
index fff9f2d..eb21f25 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Auth.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.security.auth.Destroyable;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java
index cc4d35e..bbabb8e 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Box.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 import javax.annotation.Nullable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java
index 3b190c1..e1cba0c 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Concatenate.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java
index 59f6168..4ae6ff0 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DefaultDetachedEncryptionResult.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 final class DefaultDetachedEncryptionResult implements DetachedEncryptionResult {
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java
index 8837179..d06512a 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DetachedEncryptionResult.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * The result from a detached encryption.
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java
index f3f3f4e..16d8e35 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/DiffieHelman.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 import javax.security.auth.Destroyable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java
index d4745d5..4930efb 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/GenericHash.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 import javax.security.auth.Destroyable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java
index 352fc95..531618a 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA256.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.security.auth.Destroyable;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java
index c033708..9c7c3eb 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.security.auth.Destroyable;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java
index bd70ac4..25437ef 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/HMACSHA512256.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.security.auth.Destroyable;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java
index 2578be5..117c931 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyDerivation.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkState;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Arrays;
 import javax.security.auth.Destroyable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java
index c8ffe8f..1890d74 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/KeyExchange.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 import javax.annotation.Nullable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java
index 9655988..54471a1 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/LibSodium.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import javax.annotation.Nullable;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java
index 2d188a9..9c92401 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/PasswordHash.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.annotation.Nullable;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java
index c95dd23..952c1ca 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SHA256Hash.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 import javax.security.auth.Destroyable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java
index 29d5759..4583d79 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretBox.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Arrays;
 import javax.annotation.Nullable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java
index 584f74a..2b14fcf 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretDecryptionStream.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.security.auth.Destroyable;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java
index d045cd2..1da6361 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SecretEncryptionStream.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.security.auth.Destroyable;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java
index 07c597b..b443b14 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Signature.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 // Documentation copied under the ISC License, from
 // https://github.com/jedisct1/libsodium-doc/blob/424b7480562c2e063bc8c52c452ef891621c8480/public-key_cryptography/public-key_signatures.md
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Arrays;
 import java.util.Objects;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java
index 14c915c..163b7e3 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/Sodium.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java
index 6da067c..87800dd 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 /**
  * An exception that is thrown when an error occurs using the native sodium library.
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java
index d006edb..982c437 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/SodiumVersion.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 /**
  * Details of a sodium native library version.
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java
index 9cf9ae0..4af499b 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.annotation.Nullable;
 import javax.security.auth.Destroyable;
diff --git a/crypto/src/main/java/net/consensys/cava/crypto/sodium/package-info.java b/crypto/src/main/java/net/consensys/cava/crypto/sodium/package-info.java
index 22b04db..ca8224b 100644
--- a/crypto/src/main/java/net/consensys/cava/crypto/sodium/package-info.java
+++ b/crypto/src/main/java/net/consensys/cava/crypto/sodium/package-info.java
@@ -5,8 +5,8 @@
  * Classes and utilities in this package provide an interface to the native Sodium crypto library
  * (https://www.libsodium.org/), which must be installed on the same system as the JVM. It will be searched for in
  * common library locations, or it can be loaded explicitly using
- * {@link net.consensys.cava.crypto.sodium.Sodium#searchLibrary(java.nio.file.Path...)} or
- * {@link net.consensys.cava.crypto.sodium.Sodium#loadLibrary(java.nio.file.Path)}.
+ * {@link org.apache.tuweni.crypto.sodium.Sodium#searchLibrary(java.nio.file.Path...)} or
+ * {@link org.apache.tuweni.crypto.sodium.Sodium#loadLibrary(java.nio.file.Path)}.
  *
  * <p>
  * Classes in this package also depend upon the JNR-FFI library being available on the classpath, along with its
@@ -14,6 +14,6 @@
  * 'com.github.jnr:jnr-ffi'.
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java b/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java
index 44dcb8f..7bcd54a 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/HashTest.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto;
+package org.apache.tuweni.crypto;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.*;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java b/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java
index 78592c4..3cc61af 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/SECP256K1Test.java
@@ -10,21 +10,21 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto;
+package org.apache.tuweni.crypto;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static net.consensys.cava.bytes.Bytes.fromHexString;
+import static org.apache.tuweni.bytes.Bytes.fromHexString;
 import static org.junit.jupiter.api.Assertions.*;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.SECP256K1.KeyPair;
-import net.consensys.cava.crypto.SECP256K1.PublicKey;
-import net.consensys.cava.crypto.SECP256K1.SecretKey;
-import net.consensys.cava.crypto.SECP256K1.Signature;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.SECP256K1.KeyPair;
+import org.apache.tuweni.crypto.SECP256K1.PublicKey;
+import org.apache.tuweni.crypto.SECP256K1.SecretKey;
+import org.apache.tuweni.crypto.SECP256K1.Signature;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
 
 import java.math.BigInteger;
 import java.nio.file.Files;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java b/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java
index b16576b..266731c 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/mikuli/SignatureTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.mikuli;
+package org.apache.tuweni.crypto.mikuli;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java
index 82be56f..b84da6e 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AES256GCMTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java
index b079cd9..b47c550 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AllocatedTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java
index 70a6d33..2053b73 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/AuthTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java
index a0882ea..d6e0217 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/BoxTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java
index 9cec40b..84dec45 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/ConcatenateTest.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java
index c469b74..591ae07 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/DiffieHelmanTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java
index 080ed9f..2e6947a 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/GenericHashTest.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java
index 1faf9c9..597bd70 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA256Test.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java
index 0ed1dc2..9107aa2 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512256Test.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java
index d191880..b6a1f6c 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/HMACSHA512Test.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java
index df8cb6b..edf0fc5 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/KeyDerivationTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.sodium.KeyDerivation.MasterKey;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.sodium.KeyDerivation.MasterKey;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java
index 8ac0aed..899c6df 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/PasswordHashTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -19,10 +19,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.sodium.PasswordHash.Algorithm;
-import net.consensys.cava.crypto.sodium.PasswordHash.Salt;
-import net.consensys.cava.crypto.sodium.PasswordHash.VerificationResult;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.sodium.PasswordHash.Algorithm;
+import org.apache.tuweni.crypto.sodium.PasswordHash.Salt;
+import org.apache.tuweni.crypto.sodium.PasswordHash.VerificationResult;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java
index 1360f39..46e542f 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SHA256HashTest.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java
index b465111..79d6a56 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SecretBoxTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java
index 7fe5be7..bb79c0a 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SignatureTest.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java
index 0ba65ba..42761cc 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/SodiumTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java b/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java
index a53fabd..672c5e1 100644
--- a/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java
+++ b/crypto/src/test/java/net/consensys/cava/crypto/sodium/XChaCha20Poly1305Test.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.crypto.sodium;
+package org.apache.tuweni.crypto.sodium;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt
index ecd23f4..aeac65f 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/AtomicLongProperty.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
 import java.util.concurrent.atomic.AtomicLong
 import kotlin.reflect.KProperty
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt
index 8d2d9b2..446b689 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/DiscoveryService.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
 import com.google.common.cache.Cache
 import com.google.common.cache.CacheBuilder
@@ -36,18 +36,18 @@ import kotlinx.coroutines.launch
 import kotlinx.coroutines.withTimeout
 import kotlinx.coroutines.withTimeoutOrNull
 import kotlinx.coroutines.yield
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.concurrent.AsyncCompletion
-import net.consensys.cava.concurrent.AsyncResult
-import net.consensys.cava.concurrent.coroutines.CoroutineLatch
-import net.consensys.cava.concurrent.coroutines.asyncCompletion
-import net.consensys.cava.concurrent.coroutines.asyncResult
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.kademlia.orderedInsert
-import net.consensys.cava.kademlia.xorDistCmp
-import net.consensys.cava.net.coroutines.CommonCoroutineGroup
-import net.consensys.cava.net.coroutines.CoroutineChannelGroup
-import net.consensys.cava.net.coroutines.CoroutineDatagramChannel
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.AsyncResult
+import org.apache.tuweni.concurrent.coroutines.CoroutineLatch
+import org.apache.tuweni.concurrent.coroutines.asyncCompletion
+import org.apache.tuweni.concurrent.coroutines.asyncResult
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.kademlia.orderedInsert
+import org.apache.tuweni.kademlia.xorDistCmp
+import org.apache.tuweni.net.coroutines.CommonCoroutineGroup
+import org.apache.tuweni.net.coroutines.CoroutineChannelGroup
+import org.apache.tuweni.net.coroutines.CoroutineDatagramChannel
 import org.logl.LogMessage.patternFormat
 import org.logl.LoggerProvider
 import java.io.IOException
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt
index 5068f16..82d312b 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Endpoint.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.rlp.RLPException
-import net.consensys.cava.rlp.RLPReader
-import net.consensys.cava.rlp.RLPWriter
+import org.apache.tuweni.rlp.RLPException
+import org.apache.tuweni.rlp.RLPReader
+import org.apache.tuweni.rlp.RLPWriter
 import java.net.InetAddress
 import java.net.InetSocketAddress
 import java.net.UnknownHostException
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt
index 43072dd..f57b129 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/EnodeUri.kt
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.crypto.SECP256K1
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.crypto.SECP256K1
 import java.net.URI
 import java.util.regex.Pattern
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt
index 33e174d..a316be2 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Node.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.rlp.RLPReader
-import net.consensys.cava.rlp.RLPWriter
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.rlp.RLPReader
+import org.apache.tuweni.rlp.RLPWriter
 
 internal data class Node(
   val endpoint: Endpoint,
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt
index 4ccd6cc..89e354a 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Packet.kt
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
-
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.crypto.Hash
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.rlp.RLP
-import net.consensys.cava.rlp.RLPException
-import net.consensys.cava.rlp.RLPWriter
+package org.apache.tuweni.devp2p
+
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.crypto.Hash
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.rlp.RLP
+import org.apache.tuweni.rlp.RLPException
+import org.apache.tuweni.rlp.RLPWriter
 import java.nio.ByteBuffer
 
 internal class DecodingException(message: String, cause: Throwable? = null) : Exception(message, cause)
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt
index 3c73f4d..6a569dd 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PacketType.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.crypto.SECP256K1
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.crypto.SECP256K1
 
 internal enum class PacketType(
   val typeId: Byte
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt
index b72dab7..4b81fa6 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/Peer.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.crypto.SECP256K1
+import org.apache.tuweni.crypto.SECP256K1
 
 /**
  * An Ethereum P2P network peer.
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt
index c872ced..464a3d3 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRepository.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
 import kotlinx.coroutines.GlobalScope
-import net.consensys.cava.concurrent.AsyncResult
-import net.consensys.cava.concurrent.coroutines.asyncResult
-import net.consensys.cava.crypto.SECP256K1
+import org.apache.tuweni.concurrent.AsyncResult
+import org.apache.tuweni.concurrent.coroutines.asyncResult
+import org.apache.tuweni.crypto.SECP256K1
 import java.net.URI
 import java.util.concurrent.ConcurrentHashMap
 
diff --git a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt
index a587a46..4c5a771 100644
--- a/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt
+++ b/devp2p/src/main/kotlin/net/consensys/cava/devp2p/PeerRoutingTable.kt
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
 import com.google.common.cache.Cache
 import com.google.common.cache.CacheBuilder
-import net.consensys.cava.crypto.Hash.keccak256
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.kademlia.KademliaRoutingTable
+import org.apache.tuweni.crypto.Hash.keccak256
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.kademlia.KademliaRoutingTable
 
 /**
  * A routing table for ÐΞVp2p peers.
diff --git a/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java b/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java
index 5784ffa..512a6d8 100644
--- a/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java
+++ b/devp2p/src/test/java/net/consensys/cava/devp2p/DiscoveryServiceJavaTest.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p;
+package org.apache.tuweni.devp2p;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import java.net.URI;
 import java.util.Collections;
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt
index 275ce75..a32e2cc 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/DiscoveryServiceTest.kt
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.runBlocking
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.junit.BouncyCastleExtension
-import net.consensys.cava.net.coroutines.CoroutineDatagramChannel
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.junit.BouncyCastleExtension
+import org.apache.tuweni.net.coroutines.CoroutineDatagramChannel
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertFalse
 import org.junit.jupiter.api.Assertions.assertNotNull
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt
index 798bb58..b142a48 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EndpointTest.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.rlp.RLP
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertNotEquals
 import org.junit.jupiter.api.Test
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt
index c4b7d48..6da2e40 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/EphemeralPeerRepositoryTest.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
 import kotlinx.coroutines.runBlocking
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.junit.BouncyCastleExtension
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.junit.BouncyCastleExtension
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertNotNull
 import org.junit.jupiter.api.Assertions.assertNull
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt
index c768fc8..87d3d2f 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/FindNodePacketTest.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.junit.BouncyCastleExtension
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.junit.BouncyCastleExtension
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertTrue
 import org.junit.jupiter.api.Test
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt
index f620aa8..bcb222c 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/NeighborsPacketTest.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.junit.BouncyCastleExtension
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.junit.BouncyCastleExtension
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertTrue
 import org.junit.jupiter.api.Test
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt
index bcbbb16..32705b4 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PingPacketTest.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.junit.BouncyCastleExtension
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.junit.BouncyCastleExtension
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertTrue
 import org.junit.jupiter.api.Test
diff --git a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt
index dea1630..f5ac011 100644
--- a/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt
+++ b/devp2p/src/test/kotlin/net/consensys/cava/devp2p/PongPacketTest.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.devp2p
+package org.apache.tuweni.devp2p
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.junit.BouncyCastleExtension
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.junit.BouncyCastleExtension
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertTrue
 import org.junit.jupiter.api.Test
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java
index 0625cd7..036bec8 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/BlockRLPTestSuite.java
@@ -10,24 +10,24 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.reference;
+package org.apache.tuweni.eth.reference;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1.Signature;
-import net.consensys.cava.eth.Address;
-import net.consensys.cava.eth.Block;
-import net.consensys.cava.eth.BlockBody;
-import net.consensys.cava.eth.BlockHeader;
-import net.consensys.cava.eth.Hash;
-import net.consensys.cava.eth.Transaction;
-import net.consensys.cava.io.Resources;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.ethereum.Gas;
-import net.consensys.cava.units.ethereum.Wei;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1.Signature;
+import org.apache.tuweni.eth.Address;
+import org.apache.tuweni.eth.Block;
+import org.apache.tuweni.eth.BlockBody;
+import org.apache.tuweni.eth.BlockHeader;
+import org.apache.tuweni.eth.Hash;
+import org.apache.tuweni.eth.Transaction;
+import org.apache.tuweni.io.Resources;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.ethereum.Gas;
+import org.apache.tuweni.units.ethereum.Wei;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java
index 3380618..1d0739c 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/MerkleTrieTestSuite.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.reference;
+package org.apache.tuweni.eth.reference;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.io.Resources;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.trie.MerklePatriciaTrie;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.io.Resources;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.trie.MerklePatriciaTrie;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java
index 2f29d2a..69aee9d 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/RLPReferenceTestSuite.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.reference;
+package org.apache.tuweni.eth.reference;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.io.Resources;
-import net.consensys.cava.rlp.RLP;
-import net.consensys.cava.rlp.RLPException;
-import net.consensys.cava.rlp.RLPReader;
-import net.consensys.cava.rlp.RLPWriter;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.io.Resources;
+import org.apache.tuweni.rlp.RLP;
+import org.apache.tuweni.rlp.RLPException;
+import org.apache.tuweni.rlp.RLPReader;
+import org.apache.tuweni.rlp.RLPWriter;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java
index 7c6690e..11ae68f 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/SSZTestSuite.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.reference;
+package org.apache.tuweni.eth.reference;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.io.Resources;
-import net.consensys.cava.ssz.SSZ;
-import net.consensys.cava.ssz.SSZException;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.io.Resources;
+import org.apache.tuweni.ssz.SSZ;
+import org.apache.tuweni.ssz.SSZException;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java
index 79463dc..e9abadc 100644
--- a/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java
+++ b/eth-reference-tests/src/test/java/net/consensys/cava/eth/reference/TransactionTestSuite.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.reference;
+package org.apache.tuweni.eth.reference;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.eth.Address;
-import net.consensys.cava.eth.Transaction;
-import net.consensys.cava.io.Resources;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.rlp.RLPException;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.eth.Address;
+import org.apache.tuweni.eth.Transaction;
+import org.apache.tuweni.io.Resources;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.rlp.RLPException;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt
index 76df17f..afe6279 100644
--- a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt
+++ b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockHeaderFields.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.repository
+package org.apache.tuweni.eth.repository
 
 /**
  * Block header index fields.
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt
index af6ba5c..7ab7f7e 100644
--- a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt
+++ b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainIndex.kt
@@ -10,27 +10,27 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.repository
-
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.eth.Address
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.eth.TransactionReceipt
-import net.consensys.cava.eth.repository.BlockHeaderFields.COINBASE
-import net.consensys.cava.eth.repository.BlockHeaderFields.DIFFICULTY
-import net.consensys.cava.eth.repository.BlockHeaderFields.EXTRA_DATA
-import net.consensys.cava.eth.repository.BlockHeaderFields.GAS_LIMIT
-import net.consensys.cava.eth.repository.BlockHeaderFields.GAS_USED
-import net.consensys.cava.eth.repository.BlockHeaderFields.NUMBER
-import net.consensys.cava.eth.repository.BlockHeaderFields.OMMERS_HASH
-import net.consensys.cava.eth.repository.BlockHeaderFields.PARENT_HASH
-import net.consensys.cava.eth.repository.BlockHeaderFields.STATE_ROOT
-import net.consensys.cava.eth.repository.BlockHeaderFields.TIMESTAMP
-import net.consensys.cava.eth.repository.BlockHeaderFields.TOTAL_DIFFICULTY
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.ethereum.Gas
+package org.apache.tuweni.eth.repository
+
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.eth.Address
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.eth.TransactionReceipt
+import org.apache.tuweni.eth.repository.BlockHeaderFields.COINBASE
+import org.apache.tuweni.eth.repository.BlockHeaderFields.DIFFICULTY
+import org.apache.tuweni.eth.repository.BlockHeaderFields.EXTRA_DATA
+import org.apache.tuweni.eth.repository.BlockHeaderFields.GAS_LIMIT
+import org.apache.tuweni.eth.repository.BlockHeaderFields.GAS_USED
+import org.apache.tuweni.eth.repository.BlockHeaderFields.NUMBER
+import org.apache.tuweni.eth.repository.BlockHeaderFields.OMMERS_HASH
+import org.apache.tuweni.eth.repository.BlockHeaderFields.PARENT_HASH
+import org.apache.tuweni.eth.repository.BlockHeaderFields.STATE_ROOT
+import org.apache.tuweni.eth.repository.BlockHeaderFields.TIMESTAMP
+import org.apache.tuweni.eth.repository.BlockHeaderFields.TOTAL_DIFFICULTY
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.ethereum.Gas
 import org.apache.lucene.document.Document
 import org.apache.lucene.document.Field
 import org.apache.lucene.document.NumericDocValuesField
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt
index 29821d7..a899b62 100644
--- a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt
+++ b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/BlockchainRepository.kt
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.repository
+package org.apache.tuweni.eth.repository
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.eth.Block
-import net.consensys.cava.eth.BlockBody
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.eth.TransactionReceipt
-import net.consensys.cava.kv.KeyValueStore
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.eth.Block
+import org.apache.tuweni.eth.BlockBody
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.eth.TransactionReceipt
+import org.apache.tuweni.kv.KeyValueStore
 
 /**
  * Repository housing blockchain information.
diff --git a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt
index 407b080..b574096 100644
--- a/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt
+++ b/eth-repository/src/main/kotlin/net/consensys/cava/eth/repository/TransactionReceiptFields.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.repository
+package org.apache.tuweni.eth.repository
 
 /**
  * Transaction receipt index fields.
diff --git a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt b/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt
index 7e34ae5..fa9b3d3 100644
--- a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt
+++ b/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainIndexTest.kt
@@ -10,22 +10,22 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.repository
-
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.eth.Address
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.eth.Log
-import net.consensys.cava.eth.LogsBloomFilter
-import net.consensys.cava.eth.TransactionReceipt
-import net.consensys.cava.junit.BouncyCastleExtension
-import net.consensys.cava.junit.LuceneIndex
-import net.consensys.cava.junit.LuceneIndexWriter
-import net.consensys.cava.junit.LuceneIndexWriterExtension
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.ethereum.Gas
+package org.apache.tuweni.eth.repository
+
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.eth.Address
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.eth.Log
+import org.apache.tuweni.eth.LogsBloomFilter
+import org.apache.tuweni.eth.TransactionReceipt
+import org.apache.tuweni.junit.BouncyCastleExtension
+import org.apache.tuweni.junit.LuceneIndex
+import org.apache.tuweni.junit.LuceneIndexWriter
+import org.apache.tuweni.junit.LuceneIndexWriterExtension
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.ethereum.Gas
 import org.apache.lucene.index.DirectoryReader
 import org.apache.lucene.index.IndexWriter
 import org.apache.lucene.index.Term
diff --git a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt b/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt
index c1aaff7..0ab22ee 100644
--- a/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt
+++ b/eth-repository/src/test/kotlin/net/consensys/cava/eth/repository/BlockchainRepositoryTest.kt
@@ -10,28 +10,28 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth.repository
+package org.apache.tuweni.eth.repository
 
 import kotlinx.coroutines.runBlocking
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.eth.Address
-import net.consensys.cava.eth.Block
-import net.consensys.cava.eth.BlockBody
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.eth.Log
-import net.consensys.cava.eth.LogsBloomFilter
-import net.consensys.cava.eth.Transaction
-import net.consensys.cava.eth.TransactionReceipt
-import net.consensys.cava.junit.BouncyCastleExtension
-import net.consensys.cava.junit.LuceneIndexWriter
-import net.consensys.cava.junit.LuceneIndexWriterExtension
-import net.consensys.cava.kv.MapKeyValueStore
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.ethereum.Gas
-import net.consensys.cava.units.ethereum.Wei
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.eth.Address
+import org.apache.tuweni.eth.Block
+import org.apache.tuweni.eth.BlockBody
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.eth.Log
+import org.apache.tuweni.eth.LogsBloomFilter
+import org.apache.tuweni.eth.Transaction
+import org.apache.tuweni.eth.TransactionReceipt
+import org.apache.tuweni.junit.BouncyCastleExtension
+import org.apache.tuweni.junit.LuceneIndexWriter
+import org.apache.tuweni.junit.LuceneIndexWriterExtension
+import org.apache.tuweni.kv.MapKeyValueStore
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.ethereum.Gas
+import org.apache.tuweni.units.ethereum.Wei
 import org.apache.lucene.index.IndexWriter
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
diff --git a/eth/src/main/java/net/consensys/cava/eth/Address.java b/eth/src/main/java/net/consensys/cava/eth/Address.java
index c42f29b..ce9ece3 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Address.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Address.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import com.google.common.base.Objects;
 
diff --git a/eth/src/main/java/net/consensys/cava/eth/Block.java b/eth/src/main/java/net/consensys/cava/eth/Block.java
index 0b62fcf..3629d7e 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Block.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Block.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.rlp.RLP;
-import net.consensys.cava.rlp.RLPException;
-import net.consensys.cava.rlp.RLPReader;
-import net.consensys.cava.rlp.RLPWriter;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.rlp.RLP;
+import org.apache.tuweni.rlp.RLPException;
+import org.apache.tuweni.rlp.RLPReader;
+import org.apache.tuweni.rlp.RLPWriter;
 
 import com.google.common.base.Objects;
 
diff --git a/eth/src/main/java/net/consensys/cava/eth/BlockBody.java b/eth/src/main/java/net/consensys/cava/eth/BlockBody.java
index f5f9c17..418f4c7 100644
--- a/eth/src/main/java/net/consensys/cava/eth/BlockBody.java
+++ b/eth/src/main/java/net/consensys/cava/eth/BlockBody.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.rlp.RLP;
-import net.consensys.cava.rlp.RLPException;
-import net.consensys.cava.rlp.RLPReader;
-import net.consensys.cava.rlp.RLPWriter;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.rlp.RLP;
+import org.apache.tuweni.rlp.RLPException;
+import org.apache.tuweni.rlp.RLPReader;
+import org.apache.tuweni.rlp.RLPWriter;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java b/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java
index 26b2d1f..03436fe 100644
--- a/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java
+++ b/eth/src/main/java/net/consensys/cava/eth/BlockHeader.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.rlp.RLP;
-import net.consensys.cava.rlp.RLPReader;
-import net.consensys.cava.rlp.RLPWriter;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.ethereum.Gas;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.rlp.RLP;
+import org.apache.tuweni.rlp.RLPReader;
+import org.apache.tuweni.rlp.RLPWriter;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.ethereum.Gas;
 
 import java.time.Instant;
 import javax.annotation.Nullable;
diff --git a/eth/src/main/java/net/consensys/cava/eth/Hash.java b/eth/src/main/java/net/consensys/cava/eth/Hash.java
index 752bbb5..774a44c 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Hash.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Hash.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.crypto.Hash.keccak256;
+import static org.apache.tuweni.crypto.Hash.keccak256;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
 
 import com.google.common.base.Objects;
 
diff --git a/eth/src/main/java/net/consensys/cava/eth/Log.java b/eth/src/main/java/net/consensys/cava/eth/Log.java
index a66d350..a89d91f 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Log.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Log.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.rlp.RLPReader;
-import net.consensys.cava.rlp.RLPWriter;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.rlp.RLPReader;
+import org.apache.tuweni.rlp.RLPWriter;
 
 import java.util.List;
 import java.util.Objects;
diff --git a/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java b/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java
index 8e6c227..47e8dad 100644
--- a/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java
+++ b/eth/src/main/java/net/consensys/cava/eth/LogsBloomFilter.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static net.consensys.cava.crypto.Hash.keccak256;
+import static org.apache.tuweni.crypto.Hash.keccak256;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.bytes.MutableBytes;
-import net.consensys.cava.rlp.RLPReader;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.bytes.MutableBytes;
+import org.apache.tuweni.rlp.RLPReader;
 
 import java.util.Collection;
 
diff --git a/eth/src/main/java/net/consensys/cava/eth/Transaction.java b/eth/src/main/java/net/consensys/cava/eth/Transaction.java
index 7c79800..7058444 100644
--- a/eth/src/main/java/net/consensys/cava/eth/Transaction.java
+++ b/eth/src/main/java/net/consensys/cava/eth/Transaction.java
@@ -10,21 +10,21 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.crypto.Hash.keccak256;
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.rlp.RLP;
-import net.consensys.cava.rlp.RLPException;
-import net.consensys.cava.rlp.RLPReader;
-import net.consensys.cava.rlp.RLPWriter;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.ethereum.Gas;
-import net.consensys.cava.units.ethereum.Wei;
+import static org.apache.tuweni.crypto.Hash.keccak256;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.rlp.RLP;
+import org.apache.tuweni.rlp.RLPException;
+import org.apache.tuweni.rlp.RLPReader;
+import org.apache.tuweni.rlp.RLPWriter;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.ethereum.Gas;
+import org.apache.tuweni.units.ethereum.Wei;
 
 import java.math.BigInteger;
 import javax.annotation.Nullable;
diff --git a/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java b/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java
index b5459cc..d37bbe0 100644
--- a/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java
+++ b/eth/src/main/java/net/consensys/cava/eth/TransactionReceipt.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.rlp.RLP;
-import net.consensys.cava.rlp.RLPReader;
-import net.consensys.cava.rlp.RLPWriter;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.rlp.RLP;
+import org.apache.tuweni.rlp.RLPReader;
+import org.apache.tuweni.rlp.RLPWriter;
 
 import java.util.List;
 import java.util.Objects;
diff --git a/eth/src/main/java/net/consensys/cava/eth/package-info.java b/eth/src/main/java/net/consensys/cava/eth/package-info.java
index 56c95f5..d53aa08 100644
--- a/eth/src/main/java/net/consensys/cava/eth/package-info.java
+++ b/eth/src/main/java/net/consensys/cava/eth/package-info.java
@@ -3,9 +3,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-eth' (cava-eth.jar).
+ * 'org.apache.tuweni:cava-eth' (cava-eth.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java b/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java
index 995a600..9c43640 100644
--- a/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/BlockBodyTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
-import static net.consensys.cava.eth.BlockHeaderTest.generateBlockHeader;
-import static net.consensys.cava.eth.TransactionTest.generateTransaction;
+import static org.apache.tuweni.eth.BlockHeaderTest.generateBlockHeader;
+import static org.apache.tuweni.eth.TransactionTest.generateTransaction;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import java.util.Arrays;
 
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java b/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java
index 5d6eca4..cc56aae 100644
--- a/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/BlockHeaderTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.ethereum.Gas;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.ethereum.Gas;
 
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
diff --git a/eth/src/test/java/net/consensys/cava/eth/BlockTest.java b/eth/src/test/java/net/consensys/cava/eth/BlockTest.java
index ceec95f..232a007 100644
--- a/eth/src/test/java/net/consensys/cava/eth/BlockTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/BlockTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
-import static net.consensys.cava.eth.BlockHeaderTest.generateBlockHeader;
-import static net.consensys.cava.eth.TransactionTest.generateTransaction;
+import static org.apache.tuweni.eth.BlockHeaderTest.generateBlockHeader;
+import static org.apache.tuweni.eth.TransactionTest.generateTransaction;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import java.util.Arrays;
 
diff --git a/eth/src/test/java/net/consensys/cava/eth/LogTest.java b/eth/src/test/java/net/consensys/cava/eth/LogTest.java
index cfa3c70..9ceab83 100644
--- a/eth/src/test/java/net/consensys/cava/eth/LogTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/LogTest.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.rlp.RLP;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.rlp.RLP;
 
 import java.util.Arrays;
 
diff --git a/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java b/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java
index e18d2ea..ee5c3d0 100644
--- a/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/LogsBloomFilterTest.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java b/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java
index c490779..299154e 100644
--- a/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/TransactionReceiptTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.rlp.RLP;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.rlp.RLP;
 
 import java.util.Arrays;
 import java.util.Collections;
diff --git a/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java b/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java
index 3628957..3962550 100644
--- a/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java
+++ b/eth/src/test/java/net/consensys/cava/eth/TransactionTest.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.eth;
+package org.apache.tuweni.eth;
 
-import static net.consensys.cava.crypto.Hash.keccak256;
+import static org.apache.tuweni.crypto.Hash.keccak256;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.ethereum.Gas;
-import net.consensys.cava.units.ethereum.Wei;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.ethereum.Gas;
+import org.apache.tuweni.units.ethereum.Wei;
 
 import java.math.BigInteger;
 
diff --git a/io/src/main/java/net/consensys/cava/io/Base64.java b/io/src/main/java/net/consensys/cava/io/Base64.java
index 065f32d..521a61b 100644
--- a/io/src/main/java/net/consensys/cava/io/Base64.java
+++ b/io/src/main/java/net/consensys/cava/io/Base64.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * Utility methods for encoding and decoding base64 strings.
diff --git a/io/src/main/java/net/consensys/cava/io/IOConsumer.java b/io/src/main/java/net/consensys/cava/io/IOConsumer.java
index ffea2dc..3ba9bbc 100644
--- a/io/src/main/java/net/consensys/cava/io/IOConsumer.java
+++ b/io/src/main/java/net/consensys/cava/io/IOConsumer.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
 import java.io.IOException;
 
diff --git a/io/src/main/java/net/consensys/cava/io/NullOutputStream.java b/io/src/main/java/net/consensys/cava/io/NullOutputStream.java
index 4d9d21d..c4254b6 100644
--- a/io/src/main/java/net/consensys/cava/io/NullOutputStream.java
+++ b/io/src/main/java/net/consensys/cava/io/NullOutputStream.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
 import java.io.OutputStream;
 
diff --git a/io/src/main/java/net/consensys/cava/io/Resources.java b/io/src/main/java/net/consensys/cava/io/Resources.java
index 6307cfb..8c37c82 100644
--- a/io/src/main/java/net/consensys/cava/io/Resources.java
+++ b/io/src/main/java/net/consensys/cava/io/Resources.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
-import static net.consensys.cava.io.Streams.enumerationStream;
+import static org.apache.tuweni.io.Streams.enumerationStream;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
diff --git a/io/src/main/java/net/consensys/cava/io/Streams.java b/io/src/main/java/net/consensys/cava/io/Streams.java
index 7161651..d8f3726 100644
--- a/io/src/main/java/net/consensys/cava/io/Streams.java
+++ b/io/src/main/java/net/consensys/cava/io/Streams.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/io/src/main/java/net/consensys/cava/io/file/Files.java b/io/src/main/java/net/consensys/cava/io/file/Files.java
index dc7fa94..d342054 100644
--- a/io/src/main/java/net/consensys/cava/io/file/Files.java
+++ b/io/src/main/java/net/consensys/cava/io/file/Files.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io.file;
+package org.apache.tuweni.io.file;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static java.nio.charset.StandardCharsets.UTF_8;
@@ -20,7 +20,7 @@ import static java.nio.file.StandardCopyOption.ATOMIC_MOVE;
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.io.IOConsumer;
+import org.apache.tuweni.io.IOConsumer;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/io/src/main/java/net/consensys/cava/io/file/package-info.java b/io/src/main/java/net/consensys/cava/io/file/package-info.java
index dff43ec..a074b93 100644
--- a/io/src/main/java/net/consensys/cava/io/file/package-info.java
+++ b/io/src/main/java/net/consensys/cava/io/file/package-info.java
@@ -3,9 +3,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-io' (cava-io.jar).
+ * 'org.apache.tuweni:cava-io' (cava-io.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.io.file;
+package org.apache.tuweni.io.file;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/io/src/main/java/net/consensys/cava/io/package-info.java b/io/src/main/java/net/consensys/cava/io/package-info.java
index 66e5346..7786a7a 100644
--- a/io/src/main/java/net/consensys/cava/io/package-info.java
+++ b/io/src/main/java/net/consensys/cava/io/package-info.java
@@ -3,9 +3,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-io' (cava-io.jar).
+ * 'org.apache.tuweni:cava-io' (cava-io.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/io/src/test/java/net/consensys/cava/io/Base64Test.java b/io/src/test/java/net/consensys/cava/io/Base64Test.java
index 292238a..3e277d4 100644
--- a/io/src/test/java/net/consensys/cava/io/Base64Test.java
+++ b/io/src/test/java/net/consensys/cava/io/Base64Test.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/io/src/test/java/net/consensys/cava/io/ResourcesTest.java b/io/src/test/java/net/consensys/cava/io/ResourcesTest.java
index 39da6b5..551481f 100644
--- a/io/src/test/java/net/consensys/cava/io/ResourcesTest.java
+++ b/io/src/test/java/net/consensys/cava/io/ResourcesTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/io/src/test/java/net/consensys/cava/io/StreamsTest.java b/io/src/test/java/net/consensys/cava/io/StreamsTest.java
index 78db91f..662255c 100644
--- a/io/src/test/java/net/consensys/cava/io/StreamsTest.java
+++ b/io/src/test/java/net/consensys/cava/io/StreamsTest.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io;
+package org.apache.tuweni.io;
 
-import static net.consensys.cava.io.Streams.enumerationStream;
+import static org.apache.tuweni.io.Streams.enumerationStream;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.Arrays;
diff --git a/io/src/test/java/net/consensys/cava/io/file/FilesTest.java b/io/src/test/java/net/consensys/cava/io/file/FilesTest.java
index d7b3209..611ee30 100644
--- a/io/src/test/java/net/consensys/cava/io/file/FilesTest.java
+++ b/io/src/test/java/net/consensys/cava/io/file/FilesTest.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.io.file;
+package org.apache.tuweni.io.file;
 
-import static net.consensys.cava.io.file.Files.copyResource;
-import static net.consensys.cava.io.file.Files.deleteRecursively;
+import static org.apache.tuweni.io.file.Files.copyResource;
+import static org.apache.tuweni.io.file.Files.deleteRecursively;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java b/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java
index e37275d..af88b86 100644
--- a/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/BouncyCastleExtension.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import java.security.Security;
 
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java b/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java
index 4737257..3aacea4 100644
--- a/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java
+++ b/junit/src/main/java/net/consensys/cava/junit/LuceneIndex.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java b/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java
index 0139511..3576a1a 100644
--- a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java
+++ b/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriter.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java b/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java
index 12cf0b6..d9a4dc6 100644
--- a/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/LuceneIndexWriterExtension.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
diff --git a/junit/src/main/java/net/consensys/cava/junit/RedisPort.java b/junit/src/main/java/net/consensys/cava/junit/RedisPort.java
index 681fd32..e80deb2 100644
--- a/junit/src/main/java/net/consensys/cava/junit/RedisPort.java
+++ b/junit/src/main/java/net/consensys/cava/junit/RedisPort.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java b/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java
index f403b52..198f228 100644
--- a/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/RedisServerExtension.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import java.io.IOException;
 import java.net.InetAddress;
diff --git a/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java b/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java
index 77208b5..96b88c3 100644
--- a/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java
+++ b/junit/src/main/java/net/consensys/cava/junit/TempDirectory.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java b/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java
index 71a8736..5a09cea 100644
--- a/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/TempDirectoryExtension.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import static java.nio.file.Files.createTempDirectory;
-import static net.consensys.cava.io.file.Files.deleteRecursively;
+import static org.apache.tuweni.io.file.Files.deleteRecursively;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
diff --git a/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java b/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java
index d953ccd..fc6f133 100644
--- a/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java
+++ b/junit/src/main/java/net/consensys/cava/junit/VertxExtension.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import io.vertx.core.Vertx;
 import org.junit.jupiter.api.extension.AfterAllCallback;
diff --git a/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java b/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java
index 06cd51e..6414404 100644
--- a/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java
+++ b/junit/src/main/java/net/consensys/cava/junit/VertxInstance.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/junit/src/main/java/net/consensys/cava/junit/package-info.java b/junit/src/main/java/net/consensys/cava/junit/package-info.java
index 240f51f..2281450 100644
--- a/junit/src/main/java/net/consensys/cava/junit/package-info.java
+++ b/junit/src/main/java/net/consensys/cava/junit/package-info.java
@@ -3,6 +3,6 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-junit' (cava-junit.jar).
+ * 'org.apache.tuweni:cava-junit' (cava-junit.jar).
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
diff --git a/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java b/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java
index ef56bee..beb9298 100644
--- a/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java
+++ b/junit/src/test/java/net/consensys/cava/junit/LuceneIndexWriterExtensionTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java b/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java
index 8aa85e6..e94e228 100644
--- a/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java
+++ b/junit/src/test/java/net/consensys/cava/junit/RedisServerExtensionTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java b/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java
index fef6a0d..ef7e31e 100644
--- a/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java
+++ b/junit/src/test/java/net/consensys/cava/junit/TempDirectoryExtensionTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.junit;
+package org.apache.tuweni.junit;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
diff --git a/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt b/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt
index 14d5138..6efd83f 100644
--- a/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt
+++ b/kademlia/src/main/kotlin/net/consensys/cava/kademlia/KademliaRoutingTable.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kademlia
+package org.apache.tuweni.kademlia
 
 import com.google.common.cache.Cache
 import com.google.common.cache.CacheBuilder
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt
index 632f79f..862dbdd 100644
--- a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt
+++ b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/KademliaRoutingTableTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kademlia
+package org.apache.tuweni.kademlia
 
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertFalse
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt
index ee85b25..9d3c02d 100644
--- a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt
+++ b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/LogarithmicDistanceTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kademlia
+package org.apache.tuweni.kademlia
 
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
diff --git a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt
index 1bb4d84..e915abb 100644
--- a/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt
+++ b/kademlia/src/test/kotlin/net/consensys/cava/kademlia/OrderedInsertTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kademlia
+package org.apache.tuweni.kademlia
 
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
diff --git a/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java b/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java
index f2ef687..000fafc 100644
--- a/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java
+++ b/kv/src/main/java/net/consensys/cava/kv/RedisBytesCodec.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv;
+package org.apache.tuweni.kv;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.nio.ByteBuffer;
 import javax.annotation.Nullable;
diff --git a/kv/src/main/java/net/consensys/cava/kv/package-info.java b/kv/src/main/java/net/consensys/cava/kv/package-info.java
index f01abc4..14cac5a 100644
--- a/kv/src/main/java/net/consensys/cava/kv/package-info.java
+++ b/kv/src/main/java/net/consensys/cava/kv/package-info.java
@@ -3,9 +3,9 @@
  *
  * <p>
  * These classes are included in the complete Cava distribution, or separately when using the gradle dependency
- * `net.consensys.cava:cava-kv` (`cava-kv.jar`).
+ * `org.apache.tuweni:cava-kv` (`cava-kv.jar`).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.kv;
+package org.apache.tuweni.kv;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt
index 7d89d0f..4dca781 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/InfinispanKeyValueStore.kt
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
 import kotlinx.coroutines.future.await
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 import org.infinispan.Cache
 
 /**
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt
index cb6f59a..7a447e5 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/KeyValueStore.kt
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.GlobalScope
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.concurrent.AsyncCompletion
-import net.consensys.cava.concurrent.AsyncResult
-import net.consensys.cava.concurrent.coroutines.asyncCompletion
-import net.consensys.cava.concurrent.coroutines.asyncResult
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.AsyncResult
+import org.apache.tuweni.concurrent.coroutines.asyncCompletion
+import org.apache.tuweni.concurrent.coroutines.asyncResult
 import java.io.Closeable
 
 /**
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt
index 503b97f..b3d76cc 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/LevelDBKeyValueStore.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 import org.fusesource.leveldbjni.JniDBFactory
 import org.iq80.leveldb.DB
 import org.iq80.leveldb.Options
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt
index da90d65..44862da 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/MapDBKeyValueStore.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 import org.mapdb.DB
 import org.mapdb.DBMaker
 import org.mapdb.DataInput2
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt
index aa547e8..7989ee7 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/MapKeyValueStore.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 
 /**
  * A key-value store backed by an in-memory Map.
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt
index e683cdf..3636199 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/RedisKeyValueStore.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
 import io.lettuce.core.RedisClient
 import io.lettuce.core.RedisURI
@@ -18,7 +18,7 @@ import io.lettuce.core.api.StatefulRedisConnection
 import io.lettuce.core.api.async.RedisAsyncCommands
 import io.lettuce.core.codec.RedisCodec
 import kotlinx.coroutines.future.await
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 import java.net.InetAddress
 import java.util.concurrent.CompletionStage
 
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt
index e6f2232..21d0bbc 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/RocksDBKeyValueStore.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 import org.rocksdb.Options
 import org.rocksdb.RocksDB
 import java.io.IOException
diff --git a/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt b/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt
index f38f908..fa2e035 100644
--- a/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt
+++ b/kv/src/main/kotlin/net/consensys/cava/kv/SQLKeyValueStore.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
 import com.jolbox.bonecp.BoneCP
 import com.jolbox.bonecp.BoneCPConfig
@@ -18,7 +18,7 @@ import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.guava.await
 import kotlinx.coroutines.withContext
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 import java.io.IOException
 
 /**
diff --git a/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java b/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java
index bf6b91e..f1671ee 100644
--- a/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java
+++ b/kv/src/test/java/net/consensys/cava/kv/KeyValueStoreTest.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv;
+package org.apache.tuweni.kv;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
 
 import java.nio.file.Path;
 import java.util.HashMap;
diff --git a/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java b/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java
index 5d223cb..c31e8e9 100644
--- a/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java
+++ b/kv/src/test/java/net/consensys/cava/kv/RedisKeyValueStoreTest.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv;
+package org.apache.tuweni.kv;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.junit.RedisPort;
-import net.consensys.cava.junit.RedisServerExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.junit.RedisPort;
+import org.apache.tuweni.junit.RedisServerExtension;
 
 import java.net.InetAddress;
 
diff --git a/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt b/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt
index ea593ad..585c7ca 100644
--- a/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt
+++ b/kv/src/test/kotlin/net/consensys/cava/kv/KeyValueStoreSpec.kt
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.kv
+package org.apache.tuweni.kv
 
 import com.google.common.io.MoreFiles
 import com.google.common.io.RecursiveDeleteOption
 import com.winterbe.expekt.should
 import kotlinx.coroutines.runBlocking
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.kv.Vars.foo
-import net.consensys.cava.kv.Vars.foobar
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.kv.Vars.foo
+import org.apache.tuweni.kv.Vars.foobar
 import org.infinispan.Cache
 import org.infinispan.configuration.cache.ConfigurationBuilder
 import org.infinispan.manager.DefaultCacheManager
diff --git a/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt
index b4da508..44fc7cf 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/BlockBodiesMessage.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.eth.BlockBody
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.eth.BlockBody
+import org.apache.tuweni.rlp.RLP
 
 internal data class BlockBodiesMessage(
   val reqID: Long,
diff --git a/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt
index 6e1a02d..81402cc 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/BlockHeadersMessage.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.rlp.RLP
 
 internal data class BlockHeadersMessage(
   val reqID: Long,
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt
index 6e7b16e..f009c45 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/GetBlockBodiesMessage.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.rlp.RLP
 
 internal data class GetBlockBodiesMessage(val reqID: Long, val blockHashes: List<Hash>) {
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt
index f566970..532b330 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/GetBlockHeadersMessage.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.rlp.RLP
-import net.consensys.cava.units.bigints.UInt256
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.rlp.RLP
+import org.apache.tuweni.units.bigints.UInt256
 
 internal data class GetBlockHeadersMessage(val reqID: Long, val queries: List<BlockHeaderQuery>) {
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt
index 24b0970..4d4a3ff 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/GetReceiptsMessage.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.rlp.RLP
 
 internal data class GetReceiptsMessage(val reqID: Long, val blockHashes: List<Hash>) {
 
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt b/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt
index 0bba3b9..b865026 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/LESPeerState.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.eth.Hash
+import org.apache.tuweni.eth.Hash
 import java.util.concurrent.ConcurrentHashMap
 
 internal class LESPeerState {
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt b/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt
index e660c17..fdc25b9 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/LESSubProtocolHandler.kt
@@ -10,22 +10,22 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.concurrent.AsyncCompletion
-import net.consensys.cava.concurrent.coroutines.asyncCompletion
-import net.consensys.cava.eth.BlockBody
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.eth.TransactionReceipt
-import net.consensys.cava.eth.repository.BlockchainRepository
-import net.consensys.cava.rlpx.RLPxService
-import net.consensys.cava.rlpx.wire.DisconnectReason
-import net.consensys.cava.rlpx.wire.SubProtocolHandler
-import net.consensys.cava.rlpx.wire.SubProtocolIdentifier
-import net.consensys.cava.units.bigints.UInt256
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.coroutines.asyncCompletion
+import org.apache.tuweni.eth.BlockBody
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.eth.TransactionReceipt
+import org.apache.tuweni.eth.repository.BlockchainRepository
+import org.apache.tuweni.rlpx.RLPxService
+import org.apache.tuweni.rlpx.wire.DisconnectReason
+import org.apache.tuweni.rlpx.wire.SubProtocolHandler
+import org.apache.tuweni.rlpx.wire.SubProtocolIdentifier
+import org.apache.tuweni.units.bigints.UInt256
 import java.util.TreeSet
 import java.util.concurrent.ConcurrentHashMap
 import kotlin.collections.ArrayList
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt b/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt
index 91db81d..9b2b643 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/LESSubprotocol.kt
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
 import kotlinx.coroutines.Dispatchers
-import net.consensys.cava.eth.repository.BlockchainRepository
-import net.consensys.cava.rlpx.RLPxService
-import net.consensys.cava.rlpx.wire.SubProtocol
-import net.consensys.cava.rlpx.wire.SubProtocolHandler
-import net.consensys.cava.rlpx.wire.SubProtocolIdentifier
-import net.consensys.cava.units.bigints.UInt256
+import org.apache.tuweni.eth.repository.BlockchainRepository
+import org.apache.tuweni.rlpx.RLPxService
+import org.apache.tuweni.rlpx.wire.SubProtocol
+import org.apache.tuweni.rlpx.wire.SubProtocolHandler
+import org.apache.tuweni.rlpx.wire.SubProtocolIdentifier
+import org.apache.tuweni.units.bigints.UInt256
 
 /**
  * The LES subprotocol entry point class, to be used in conjunction with RLPxService
@@ -27,7 +27,7 @@ import net.consensys.cava.units.bigints.UInt256
  * This subprotocol is implemented after the specification presented on the *
  * [Ethereum wiki.](https://github.com/ethereum/wiki/wiki/Light-client-protocol)
  *
- * @see net.consensys.cava.rlpx.RLPxService
+ * @see org.apache.tuweni.rlpx.RLPxService
  */
 class LESSubprotocol
 /**
diff --git a/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt b/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt
index f8af681..11d544f 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/LightClient.kt
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.eth.BlockBody
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.eth.TransactionReceipt
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.eth.BlockBody
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.eth.TransactionReceipt
 
 /**
  * Calls to LES functions from the point of view of the consumer of the subprotocol.
diff --git a/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt
index eaab50e..e0c2a07 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/ReceiptsMessage.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.eth.TransactionReceipt
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.eth.TransactionReceipt
+import org.apache.tuweni.rlp.RLP
 
 internal data class ReceiptsMessage(
   val reqID: Long,
diff --git a/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt b/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt
index 01c4ef8..ade38b2 100644
--- a/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt
+++ b/les/src/main/kotlin/net/consensys/cava/les/StatusMessage.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.rlp.RLP
-import net.consensys.cava.units.bigints.UInt256
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.rlp.RLP
+import org.apache.tuweni.units.bigints.UInt256
 
 /**
  *
diff --git a/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt b/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt
index 9e2a5e5..ffda803 100644
--- a/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt
+++ b/les/src/test/kotlin/net/consensys/cava/les/LESSubProtocolHandlerTest.kt
@@ -10,35 +10,35 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
 import kotlinx.coroutines.runBlocking
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.concurrent.AsyncCompletion
-import net.consensys.cava.concurrent.coroutines.await
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.eth.Address
-import net.consensys.cava.eth.Block
-import net.consensys.cava.eth.BlockBody
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.eth.Transaction
-import net.consensys.cava.eth.repository.BlockchainIndex
-import net.consensys.cava.eth.repository.BlockchainRepository
-import net.consensys.cava.junit.BouncyCastleExtension
-import net.consensys.cava.junit.LuceneIndexWriter
-import net.consensys.cava.junit.LuceneIndexWriterExtension
-import net.consensys.cava.junit.VertxExtension
-import net.consensys.cava.kv.MapKeyValueStore
-import net.consensys.cava.les.LESSubprotocol.Companion.LES_ID
-import net.consensys.cava.rlpx.RLPxService
-import net.consensys.cava.rlpx.WireConnectionRepository
-import net.consensys.cava.rlpx.wire.DisconnectReason
-import net.consensys.cava.rlpx.wire.SubProtocolIdentifier
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.ethereum.Gas
-import net.consensys.cava.units.ethereum.Wei
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.coroutines.await
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.eth.Address
+import org.apache.tuweni.eth.Block
+import org.apache.tuweni.eth.BlockBody
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.eth.Transaction
+import org.apache.tuweni.eth.repository.BlockchainIndex
+import org.apache.tuweni.eth.repository.BlockchainRepository
+import org.apache.tuweni.junit.BouncyCastleExtension
+import org.apache.tuweni.junit.LuceneIndexWriter
+import org.apache.tuweni.junit.LuceneIndexWriterExtension
+import org.apache.tuweni.junit.VertxExtension
+import org.apache.tuweni.kv.MapKeyValueStore
+import org.apache.tuweni.les.LESSubprotocol.Companion.LES_ID
+import org.apache.tuweni.rlpx.RLPxService
+import org.apache.tuweni.rlpx.WireConnectionRepository
+import org.apache.tuweni.rlpx.wire.DisconnectReason
+import org.apache.tuweni.rlpx.wire.SubProtocolIdentifier
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.ethereum.Gas
+import org.apache.tuweni.units.ethereum.Wei
 import org.apache.lucene.index.IndexWriter
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertNotNull
diff --git a/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt b/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt
index c80a862..ed7283d 100644
--- a/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt
+++ b/les/src/test/kotlin/net/consensys/cava/les/LESSubprotocolTest.kt
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
+package org.apache.tuweni.les
 
-import net.consensys.cava.eth.repository.BlockchainIndex
-import net.consensys.cava.eth.repository.BlockchainRepository
-import net.consensys.cava.junit.LuceneIndexWriter
-import net.consensys.cava.junit.LuceneIndexWriterExtension
-import net.consensys.cava.junit.TempDirectoryExtension
-import net.consensys.cava.kv.MapKeyValueStore
-import net.consensys.cava.rlpx.wire.SubProtocolIdentifier
-import net.consensys.cava.units.bigints.UInt256
+import org.apache.tuweni.eth.repository.BlockchainIndex
+import org.apache.tuweni.eth.repository.BlockchainRepository
+import org.apache.tuweni.junit.LuceneIndexWriter
+import org.apache.tuweni.junit.LuceneIndexWriterExtension
+import org.apache.tuweni.junit.TempDirectoryExtension
+import org.apache.tuweni.kv.MapKeyValueStore
+import org.apache.tuweni.rlpx.wire.SubProtocolIdentifier
+import org.apache.tuweni.units.bigints.UInt256
 import org.apache.lucene.index.IndexWriter
 import org.junit.jupiter.api.Assertions.assertFalse
 import org.junit.jupiter.api.Assertions.assertTrue
diff --git a/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt b/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt
index c221c8c..5ef5f99 100644
--- a/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt
+++ b/les/src/test/kotlin/net/consensys/cava/les/MessagesTest.kt
@@ -10,23 +10,23 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.les
-
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.crypto.SECP256K1
-import net.consensys.cava.eth.Address
-import net.consensys.cava.eth.BlockBody
-import net.consensys.cava.eth.BlockHeader
-import net.consensys.cava.eth.Hash
-import net.consensys.cava.eth.Log
-import net.consensys.cava.eth.LogsBloomFilter
-import net.consensys.cava.eth.Transaction
-import net.consensys.cava.eth.TransactionReceipt
-import net.consensys.cava.junit.BouncyCastleExtension
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.ethereum.Gas
-import net.consensys.cava.units.ethereum.Wei
+package org.apache.tuweni.les
+
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.crypto.SECP256K1
+import org.apache.tuweni.eth.Address
+import org.apache.tuweni.eth.BlockBody
+import org.apache.tuweni.eth.BlockHeader
+import org.apache.tuweni.eth.Hash
+import org.apache.tuweni.eth.Log
+import org.apache.tuweni.eth.LogsBloomFilter
+import org.apache.tuweni.eth.Transaction
+import org.apache.tuweni.eth.TransactionReceipt
+import org.apache.tuweni.junit.BouncyCastleExtension
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.ethereum.Gas
+import org.apache.tuweni.units.ethereum.Wei
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
 import org.junit.jupiter.api.extension.ExtendWith
diff --git a/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java b/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java
index 2a694a4..863bbcd 100644
--- a/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java
+++ b/merkle-trie/src/main/java/net/consensys/cava/trie/CompactEncoding.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie;
+package org.apache.tuweni.trie;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.MutableBytes;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.MutableBytes;
 
 /**
  * Compact (Hex-prefix) encoding and decoding.
diff --git a/merkle-trie/src/main/java/net/consensys/cava/trie/package-info.java b/merkle-trie/src/main/java/net/consensys/cava/trie/package-info.java
index ad898e4..f689298 100644
--- a/merkle-trie/src/main/java/net/consensys/cava/trie/package-info.java
+++ b/merkle-trie/src/main/java/net/consensys/cava/trie/package-info.java
@@ -6,9 +6,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-merkle-trie' (cava-merkle-trie.jar).
+ * 'org.apache.tuweni:cava-merkle-trie' (cava-merkle-trie.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.trie;
+package org.apache.tuweni.trie;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt
index 75493ad..8433ec5 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/BranchNode.kt
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.bytes.MutableBytes
-import net.consensys.cava.crypto.Hash.keccak256
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.bytes.MutableBytes
+import org.apache.tuweni.crypto.Hash.keccak256
+import org.apache.tuweni.rlp.RLP
 import java.lang.ref.WeakReference
 
 private val NULL_NODE: NullNode<*> = NullNode.instance<Any>()
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt
index b091731..c01fb3d 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/DefaultNodeFactory.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 import java.util.Collections
 
 internal class DefaultNodeFactory<V>(private val valueSerializer: (V) -> Bytes) :
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt
index 773ef4e..fac849d 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/ExtensionNode.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.crypto.Hash.keccak256
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.crypto.Hash.keccak256
+import org.apache.tuweni.rlp.RLP
 import java.lang.ref.WeakReference
 
 internal class ExtensionNode<V>(
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt
index 95d5887..b5787d8 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/GetVisitor.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 
 internal class GetVisitor<V> : NodeVisitor<V> {
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt
index 1b653fa..9f739f6 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/LeafNode.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.crypto.Hash.keccak256
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.crypto.Hash.keccak256
+import org.apache.tuweni.rlp.RLP
 import java.lang.ref.WeakReference
 
 internal class LeafNode<V>(
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt
index ed2d2a6..fb7a617 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerklePatriciaTrie.kt
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.runBlocking
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.concurrent.AsyncCompletion
-import net.consensys.cava.concurrent.AsyncResult
-import net.consensys.cava.trie.CompactEncoding.bytesToPath
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.AsyncResult
+import org.apache.tuweni.trie.CompactEncoding.bytesToPath
 import java.util.function.Function
 import kotlin.text.Charsets.UTF_8
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt
index bcea694..e1da35d 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorage.kt
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.concurrent.AsyncCompletion
-import net.consensys.cava.concurrent.AsyncResult
-import net.consensys.cava.concurrent.coroutines.await
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.AsyncResult
+import org.apache.tuweni.concurrent.coroutines.await
 
 /**
  * Storage for use in a [StoredMerklePatriciaTrie].
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt
index 97bf150..26eb23f 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleStorageException.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
 /**
  * This exception is thrown when there is an issue retrieving or decoding values from [MerkleStorage].
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt
index d938d63..25317c0 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/MerkleTrie.kt
@@ -10,19 +10,19 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.GlobalScope
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.concurrent.AsyncCompletion
-import net.consensys.cava.concurrent.AsyncResult
-import net.consensys.cava.concurrent.coroutines.asyncCompletion
-import net.consensys.cava.concurrent.coroutines.asyncResult
-import net.consensys.cava.crypto.Hash
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.AsyncResult
+import org.apache.tuweni.concurrent.coroutines.asyncCompletion
+import org.apache.tuweni.concurrent.coroutines.asyncResult
+import org.apache.tuweni.crypto.Hash
+import org.apache.tuweni.rlp.RLP
 
 // Workaround for a javadoc generation issue - extracting these method bodies out of the default method and into
 // private funcs appears to resolve it. It would be good to remove this workaround one day.
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt
index d3e18ce..39e746a 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/Node.kt
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
 
 internal interface Node<V> {
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt
index 2410091..138067c 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeFactory.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 
 internal interface NodeFactory<V> {
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt
index 3f627ab..1ebd1f3 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NodeVisitor.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 
 internal interface NodeVisitor<V> {
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt
index ddf0467..f1f54b4 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/NullNode.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.crypto.Hash.keccak256
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.crypto.Hash.keccak256
+import org.apache.tuweni.rlp.RLP
 
 internal class NullNode<V> private constructor() : Node<V> {
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt
index 9bdb650..9f4bbec 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/PutVisitor.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 
 internal class PutVisitor<V>(
   private val nodeFactory: NodeFactory<V>,
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt
index 205ffec..fc78951 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/RemoveVisitor.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes
 
 internal class RemoveVisitor<V> : NodeVisitor<V> {
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt
index 7eb9209..5932bf7 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrie.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.trie.CompactEncoding.bytesToPath
-import net.consensys.cava.trie.MerkleTrie.Companion.EMPTY_TRIE_ROOT_HASH
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.trie.CompactEncoding.bytesToPath
+import org.apache.tuweni.trie.MerkleTrie.Companion.EMPTY_TRIE_ROOT_HASH
 import java.util.function.Function
 
 /**
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt
index a07b87e..3567e89 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNode.kt
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
 import kotlinx.coroutines.CoroutineStart
 import kotlinx.coroutines.Deferred
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.async
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.rlp.RLP
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.rlp.RLP
 import java.lang.ref.SoftReference
 import java.util.concurrent.atomic.AtomicReference
 
diff --git a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt
index 3a268a2..8fadf86 100644
--- a/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt
+++ b/merkle-trie/src/main/kotlin/net/consensys/cava/trie/StoredNodeFactory.kt
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.rlp.RLP
-import net.consensys.cava.rlp.RLPException
-import net.consensys.cava.rlp.RLPReader
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.rlp.RLP
+import org.apache.tuweni.rlp.RLPException
+import org.apache.tuweni.rlp.RLPReader
 import java.util.Collections
 
 internal class StoredNodeFactory<V>(
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java b/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java
index 7fcc4f7..05c95e2 100644
--- a/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java
+++ b/merkle-trie/src/test/java/net/consensys/cava/trie/CompactEncodingTest.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie;
+package org.apache.tuweni.trie;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java b/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java
index 4cb78fd..0191945 100644
--- a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java
+++ b/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTrieJavaTest.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie;
+package org.apache.tuweni.trie;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java b/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java
index f5e48aa..bcacfac 100644
--- a/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java
+++ b/merkle-trie/src/test/java/net/consensys/cava/trie/MerklePatriciaTriePerformanceTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie;
+package org.apache.tuweni.trie;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.concurrent.CompletableAsyncCompletion;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.concurrent.CompletableAsyncCompletion;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import java.security.SecureRandom;
 import java.util.ArrayList;
diff --git a/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java b/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java
index dcdc1af..b75fd2b 100644
--- a/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java
+++ b/merkle-trie/src/test/java/net/consensys/cava/trie/StoredMerklePatriciaTrieJavaTest.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie;
+package org.apache.tuweni.trie;
 
 import static org.junit.jupiter.api.Assertions.*;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt b/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt
index 95263e3..1573044 100644
--- a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt
+++ b/merkle-trie/src/test/kotlin/net/consensys/cava/trie/MerklePatriciaTrieKotlinTest.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
 import kotlinx.coroutines.runBlocking
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.junit.BouncyCastleExtension
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.junit.BouncyCastleExtension
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertNotEquals
 import org.junit.jupiter.api.Assertions.assertNull
diff --git a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt b/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt
index ee08044..ccd64c1 100644
--- a/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt
+++ b/merkle-trie/src/test/kotlin/net/consensys/cava/trie/StoredMerklePatriciaTrieKotlinTest.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.trie
+package org.apache.tuweni.trie
 
 import kotlinx.coroutines.runBlocking
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.bytes.Bytes32
-import net.consensys.cava.junit.BouncyCastleExtension
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.bytes.Bytes32
+import org.apache.tuweni.junit.BouncyCastleExtension
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Assertions.assertNotEquals
 import org.junit.jupiter.api.Assertions.assertNull
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt
index 5c9e87b..55766d2 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineByteChannel.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import java.io.IOException
 import java.nio.ByteBuffer
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt
index 83e62e7..c4ac4f3 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroup.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import org.logl.LoggerProvider
 import java.nio.channels.Channel
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt
index fbb40ea..73eba14 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannel.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import java.io.IOException
 import java.net.SocketAddress
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt
index 6af3efa..ff82a42 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineNetworkChannel.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import java.io.IOException
 import java.net.InetAddress
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt
index 11c8bc3..82acf44 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSelector.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import com.google.common.util.concurrent.ThreadFactoryBuilder
 import kotlinx.coroutines.CancellableContinuation
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt
index 8234413..3ee3dd6 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineServerSocketChannel.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import java.io.IOException
 import java.net.SocketAddress
diff --git a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt
index b402e00..11141c4 100644
--- a/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt
+++ b/net-coroutines/src/main/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannel.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import java.io.IOException
 import java.net.SocketAddress
diff --git a/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java b/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java
index 6e5e30f..3e2ed10 100644
--- a/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java
+++ b/net-coroutines/src/test/java/net/consensys/cava/net/coroutines/SelectorTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines;
+package org.apache.tuweni.net.coroutines;
 
 import static java.nio.channels.SelectionKey.OP_READ;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt
index 2cd9261..630087b 100644
--- a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt
+++ b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineChannelGroupTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import kotlinx.coroutines.async
 import kotlinx.coroutines.runBlocking
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt
index 9b41aaa..3a8d0a7 100644
--- a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt
+++ b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineDatagramChannelTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import kotlinx.coroutines.async
 import kotlinx.coroutines.runBlocking
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt
index 5cbe114..e1a948e 100644
--- a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt
+++ b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSelectorTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import kotlinx.coroutines.CancellationException
 import kotlinx.coroutines.CoroutineStart
diff --git a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt
index 70bf6dc..7764abf 100644
--- a/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt
+++ b/net-coroutines/src/test/kotlin/net/consensys/cava/net/coroutines/CoroutineSocketChannelTest.kt
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.coroutines
+package org.apache.tuweni.net.coroutines
 
 import kotlinx.coroutines.async
 import kotlinx.coroutines.runBlocking
diff --git a/net/src/main/java/net/consensys/cava/net/package-info.java b/net/src/main/java/net/consensys/cava/net/package-info.java
index 3839d81..6184ac4 100644
--- a/net/src/main/java/net/consensys/cava/net/package-info.java
+++ b/net/src/main/java/net/consensys/cava/net/package-info.java
@@ -3,6 +3,6 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-net' (cava-net.jar).
+ * 'org.apache.tuweni:cava-net' (cava-net.jar).
  */
-package net.consensys.cava.net;
+package org.apache.tuweni.net;
diff --git a/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java b/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java
index d3b11c7..dc8f365 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/ClientFingerprintTrustManager.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import static java.lang.String.format;
-import static net.consensys.cava.net.tls.TLS.certificateFingerprint;
+import static org.apache.tuweni.net.tls.TLS.certificateFingerprint;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.net.Socket;
 import java.security.cert.CertificateException;
diff --git a/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java b/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java
index 59b67d1..68bf5ab 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/DelegatingTrustManagerFactory.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java b/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java
index 33fc83a..fb75c77 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/FileBackedFingerprintRepository.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import static java.nio.file.Files.createDirectories;
-import static net.consensys.cava.io.file.Files.atomicReplace;
-import static net.consensys.cava.io.file.Files.createFileIfMissing;
+import static org.apache.tuweni.io.file.Files.atomicReplace;
+import static org.apache.tuweni.io.file.Files.createFileIfMissing;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.io.IOException;
 import java.nio.file.Files;
diff --git a/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java b/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java
index 9aa48cb..952b26c 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/FingerprintRepository.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * Repository of remote peer fingerprints.
diff --git a/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java b/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java
index 81c106a..c1270da 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/ServerFingerprintTrustManager.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import static java.lang.String.format;
-import static net.consensys.cava.net.tls.TLS.certificateFingerprint;
+import static org.apache.tuweni.net.tls.TLS.certificateFingerprint;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.net.InetSocketAddress;
 import java.net.Socket;
diff --git a/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java b/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java
index 54e5f81..2f9c820 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/SingleTrustManagerFactory.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import java.security.KeyStore;
 import javax.net.ssl.ManagerFactoryParameters;
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TLS.java b/net/src/main/java/net/consensys/cava/net/tls/TLS.java
index c83f97a..d81b7dd 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/TLS.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/TLS.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.nio.file.Files.createDirectories;
-import static net.consensys.cava.crypto.Hash.sha2_256;
+import static org.apache.tuweni.crypto.Hash.sha2_256;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java b/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java
index 2f98375..91d0202 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/TLSEnvironmentException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 final class TLSEnvironmentException extends RuntimeException {
 
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java b/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java
index 6182017..ccb22cf 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactories.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java b/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java
index f284c8d..642a9fd 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/TrustManagerFactoryWrapper.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import javax.net.ssl.TrustManagerFactory;
 
diff --git a/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java b/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java
index ac32883..35156c1 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/VertxTrustOptions.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import java.nio.file.Path;
 import javax.net.ssl.TrustManagerFactory;
diff --git a/net/src/main/java/net/consensys/cava/net/tls/package-info.java b/net/src/main/java/net/consensys/cava/net/tls/package-info.java
index 0a8a620..72ec9ed 100644
--- a/net/src/main/java/net/consensys/cava/net/tls/package-info.java
+++ b/net/src/main/java/net/consensys/cava/net/tls/package-info.java
@@ -2,6 +2,6 @@
  * Utilities for doing fingerprint based TLS certificate checking.
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java
index 75b740c..9d8b0a8 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrRecordTest.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
-import static net.consensys.cava.net.tls.SecurityTestUtils.startServer;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.startServer;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java
index 767d3d3..421ca68 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrTofuTest.java
@@ -10,19 +10,19 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
-import static net.consensys.cava.net.tls.SecurityTestUtils.startServer;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.startServer;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java
index 5a7b94c..21c0ce0 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientCaOrWhitelistTest.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.startServer;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.startServer;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java
index 56beddd..b34d1fd 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientRecordTest.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
-import static net.consensys.cava.net.tls.SecurityTestUtils.startServer;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.startServer;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java
index 7eaa37d..12ab3cc 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientTofuTest.java
@@ -10,19 +10,19 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
-import static net.consensys.cava.net.tls.SecurityTestUtils.startServer;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.startServer;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java b/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java
index 98b12c7..e436d37 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ClientWhitelistTest.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.startServer;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.startServer;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java b/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java
index d71418e..9edf535 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/FileBackedFingerprintRepositoryTest.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
 
 import java.io.IOException;
 import java.nio.file.Files;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java b/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java
index 522bfd8..04a434f 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/InsecureTrustOptions.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
 import javax.net.ssl.TrustManagerFactory;
 
diff --git a/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java b/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java
index 9898ba4..40e60e0 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/SecurityTestUtils.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.TLS.readPemFile;
+import static org.apache.tuweni.net.tls.TLS.readPemFile;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java
index a851b22..ffb87d2 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrRecordTest.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java
index df591f2..eca35f1 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrTofaTest.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java
index 8f992b5..ac54cf7 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerCaOrWhitelistTest.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java
index 16e203d..d0a919a 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerRecordTest.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java
index 6e7507c..7ba3124 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerTofaTest.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.SecurityTestUtils.DUMMY_FINGERPRINT;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java b/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java
index a3a1af5..72c9e75 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/ServerWhitelistTest.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.TLS.certificateHexFingerprint;
+import static org.apache.tuweni.net.tls.TLS.certificateHexFingerprint;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
diff --git a/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java b/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java
index d08ed11..e583819 100644
--- a/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java
+++ b/net/src/test/java/net/consensys/cava/net/tls/TLSTest.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.net.tls;
+package org.apache.tuweni.net.tls;
 
-import static net.consensys.cava.net.tls.TLS.readPemFile;
+import static org.apache.tuweni.net.tls.TLS.readPemFile;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.junit.TempDirectory;
-import net.consensys.cava.junit.TempDirectoryExtension;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
 
 import java.io.ByteArrayInputStream;
 import java.nio.file.Files;
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java b/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java
index e1a3499..529ea63 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/EphemeralPeerRepository.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java b/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java
index 5d2dfb0..1026507 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/MessageHashing.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * Produces an identifiable footprint for a message (generally a hash) that can be passed on to other peers to identify
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java b/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java
index bc583e7..bd3a100 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/MessageSender.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import javax.annotation.Nullable;
 
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java b/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java
index c9d8fc9..652daa7 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/Peer.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
 public class Peer {
 }
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java b/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java
index 3281d4a..057e8a6 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/PeerRepository.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
 import java.util.Collection;
 import java.util.List;
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/State.java b/plumtree/src/main/java/net/consensys/cava/plumtree/State.java
index 14a6852..0e5e569 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/State.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/State.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java b/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java
index 65bf93d..b4c4350 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/StateActor.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
 public interface StateActor {
 }
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java b/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java
index 04599be..d83ed72 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/StateActorFactory.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
 public interface StateActorFactory {
 
diff --git a/plumtree/src/main/java/net/consensys/cava/plumtree/package-info.java b/plumtree/src/main/java/net/consensys/cava/plumtree/package-info.java
index dbab1b4..cfcfbb4 100644
--- a/plumtree/src/main/java/net/consensys/cava/plumtree/package-info.java
+++ b/plumtree/src/main/java/net/consensys/cava/plumtree/package-info.java
@@ -3,9 +3,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-plumtree' (cava-plumtree.jar).
+ * 'org.apache.tuweni:cava-plumtree' (cava-plumtree.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java b/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java
index a0127a5..a70b91f 100644
--- a/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java
+++ b/plumtree/src/test/java/net/consensys/cava/plumtree/StateTest.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.plumtree;
+package org.apache.tuweni.plumtree;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.Hash;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.Hash;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java
index 0f1ba8a..a63985b 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/AccumulatingRLPWriter.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.rlp.RLP.encodeByteArray;
-import static net.consensys.cava.rlp.RLP.encodeLength;
-import static net.consensys.cava.rlp.RLP.encodeNumber;
+import static org.apache.tuweni.rlp.RLP.encodeByteArray;
+import static org.apache.tuweni.rlp.RLP.encodeLength;
+import static org.apache.tuweni.rlp.RLP.encodeNumber;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.ArrayDeque;
 import java.util.Deque;
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java
index 40b8d0b..6d8b9a5 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/ByteBufferRLPWriter.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.rlp.RLP.encodeByteArray;
-import static net.consensys.cava.rlp.RLP.encodeLength;
-import static net.consensys.cava.rlp.RLP.encodeNumber;
+import static org.apache.tuweni.rlp.RLP.encodeByteArray;
+import static org.apache.tuweni.rlp.RLP.encodeLength;
+import static org.apache.tuweni.rlp.RLP.encodeNumber;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.nio.BufferOverflowException;
 import java.nio.ByteBuffer;
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java b/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java
index f603460..2158dd4 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPReader.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.function.Function;
 
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java
index 70683f6..be80f68 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/BytesRLPWriter.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Deque;
 
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java
index 9ea7ed6..4d8fb68 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/DelegatingRLPWriter.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 import java.util.function.Consumer;
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java b/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java
index 85733e0..8874067 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/EndOfRLPException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 /**
  * Indicates the end of the RLP source has been reached unexpectedly.
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java b/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java
index 4dd3e7f..4963021 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPEncodingException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 /**
  * Indicates that invalid RLP encoding was encountered.
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java b/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java
index 7d881aa..fc832b6 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/InvalidRLPTypeException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 /**
  * Indicates that an unexpected type was encountered when decoding RLP.
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLP.java b/rlp/src/main/java/net/consensys/cava/rlp/RLP.java
index 1212668..593f2c8 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/RLP.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/RLP.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.math.BigInteger;
 import java.nio.BufferOverflowException;
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java b/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java
index d4d28d7..956b890 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/RLPException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 /**
  * Base type for all RLP encoding and decoding exceptions.
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java b/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java
index fab766d..259b0df 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/RLPReader.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java b/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java
index e96946f..0a3fb43 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/RLPWriter.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 import java.util.List;
diff --git a/rlp/src/main/java/net/consensys/cava/rlp/package-info.java b/rlp/src/main/java/net/consensys/cava/rlp/package-info.java
index e2a7f69..8859488 100644
--- a/rlp/src/main/java/net/consensys/cava/rlp/package-info.java
+++ b/rlp/src/main/java/net/consensys/cava/rlp/package-info.java
@@ -5,9 +5,9 @@
  * <a href="https://github.com/ethereum/wiki/wiki/RLP">https://github.com/ethereum/wiki/wiki/RLP</a>.
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-rlp' (cava-rlp.jar).
+ * 'org.apache.tuweni:cava-rlp' (cava-rlp.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java b/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java
index e1ec120..226177c 100644
--- a/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java
+++ b/rlp/src/test/java/net/consensys/cava/rlp/ByteBufferWriterTest.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static net.consensys.cava.bytes.Bytes.fromHexString;
+import static org.apache.tuweni.bytes.Bytes.fromHexString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java b/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java
index da76137..5df20a4 100644
--- a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java
+++ b/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPReaderTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
-import static net.consensys.cava.bytes.Bytes.fromHexString;
+import static org.apache.tuweni.bytes.Bytes.fromHexString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.math.BigInteger;
 import java.util.Arrays;
diff --git a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java b/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java
index baa4d3e..cf6cc72 100644
--- a/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java
+++ b/rlp/src/test/java/net/consensys/cava/rlp/BytesRLPWriterTest.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlp;
+package org.apache.tuweni.rlp;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static net.consensys.cava.bytes.Bytes.fromHexString;
+import static org.apache.tuweni.bytes.Bytes.fromHexString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 import java.util.Arrays;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java b/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java
index 8a47f04..bb7afe2 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/EthereumIESEncryptionEngine.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java
index 13f1688..29c9d9a 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/HandshakeMessage.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.SECP256K1;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.SECP256K1;
 
 /**
  * Contents of a message sent as part of a RLPx handshake.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java
index 623c2c9..ef5e601 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/InitiatorHandshakeMessage.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.crypto.SECP256K1.KeyPair;
-import net.consensys.cava.crypto.SECP256K1.PublicKey;
-import net.consensys.cava.crypto.SECP256K1.SecretKey;
-import net.consensys.cava.crypto.SECP256K1.Signature;
-import net.consensys.cava.rlp.RLP;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.crypto.SECP256K1.KeyPair;
+import org.apache.tuweni.crypto.SECP256K1.PublicKey;
+import org.apache.tuweni.crypto.SECP256K1.SecretKey;
+import org.apache.tuweni.crypto.SECP256K1.Signature;
+import org.apache.tuweni.rlp.RLP;
 
 /**
  * The initial message sent during a RLPx handshake.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java b/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java
index c2f19a4..20fd4a5 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/InvalidMACException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
 /**
  * Exception thrown when the message contents do not match the Message Authentication Code.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java b/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java
index 0548d3c..7c2ba46 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/MemoryWireConnectionsRepository.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
-import net.consensys.cava.rlpx.wire.WireConnection;
+import org.apache.tuweni.rlpx.wire.WireConnection;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java
index d61953d..0bba653 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnection.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.bytes.MutableBytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.rlp.RLP;
-import net.consensys.cava.rlpx.wire.HelloMessage;
+package org.apache.tuweni.rlpx;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.bytes.MutableBytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.rlp.RLP;
+import org.apache.tuweni.rlpx.wire.HelloMessage;
 
 import java.io.IOException;
 import java.util.Arrays;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java
index 1afad76..2c7ab36 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxConnectionFactory.java
@@ -10,19 +10,19 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
-
-import static net.consensys.cava.bytes.Bytes.concatenate;
-import static net.consensys.cava.crypto.Hash.keccak256;
-import static net.consensys.cava.crypto.SECP256K1.Parameters.CURVE;
-import static net.consensys.cava.crypto.SECP256K1.calculateKeyAgreement;
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.crypto.SECP256K1.KeyPair;
-import net.consensys.cava.crypto.SECP256K1.PublicKey;
-import net.consensys.cava.crypto.SECP256K1.SecretKey;
+package org.apache.tuweni.rlpx;
+
+import static org.apache.tuweni.bytes.Bytes.concatenate;
+import static org.apache.tuweni.crypto.Hash.keccak256;
+import static org.apache.tuweni.crypto.SECP256K1.Parameters.CURVE;
+import static org.apache.tuweni.crypto.SECP256K1.calculateKeyAgreement;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.crypto.SECP256K1.KeyPair;
+import org.apache.tuweni.crypto.SECP256K1.PublicKey;
+import org.apache.tuweni.crypto.SECP256K1.SecretKey;
 
 import java.math.BigInteger;
 import java.security.SecureRandom;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java
index f117a2d..5e47aed 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxMessage.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Objects;
 
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java
index 1863b23..72d2603 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/RLPxService.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.rlpx.wire.DisconnectReason;
-import net.consensys.cava.rlpx.wire.SubProtocolIdentifier;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.rlpx.wire.DisconnectReason;
+import org.apache.tuweni.rlpx.wire.SubProtocolIdentifier;
 
 import java.net.InetSocketAddress;
 
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java
index 165aa55..b0343e1 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/ResponderHandshakeMessage.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.SECP256K1.PublicKey;
-import net.consensys.cava.rlp.RLP;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.SECP256K1.PublicKey;
+import org.apache.tuweni.rlp.RLP;
 
 /**
  * The decrypted contents of a handshake response message.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java b/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java
index 872f6ad..45827be 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/WireConnectionRepository.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
-import net.consensys.cava.rlpx.wire.WireConnection;
+import org.apache.tuweni.rlpx.wire.WireConnection;
 
 /**
  * A repository managing wire connections.
@@ -29,7 +29,7 @@ public interface WireConnectionRepository {
 
   /**
    * Gets a wire connection by its identifier, as provided by
-   * <code>net.consensys.cava.rlpx.wire.DefaultWireConnection#id</code>
+   * <code>org.apache.tuweni.rlpx.wire.DefaultWireConnection#id</code>
    * 
    * @param id the identifier of the wire connection
    * @return the wire connection associated with the identifier, or <code>null</code> if no such wire connection exists.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/package-info.java b/rlpx/src/main/java/net/consensys/cava/rlpx/package-info.java
index 7826860..e574b4a 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/package-info.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/package-info.java
@@ -3,10 +3,10 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-rlpx' (cava-rlpx.jar).
+ * 'org.apache.tuweni:cava-rlpx' (cava-rlpx.jar).
  */
 @ParametersAreNonnullByDefault
 
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java b/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java
index 2f02d92..2ecb989 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/VertxRLPxService.java
@@ -10,26 +10,26 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.vertx;
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.CompletableAsyncCompletion;
-import net.consensys.cava.crypto.SECP256K1.KeyPair;
-import net.consensys.cava.crypto.SECP256K1.PublicKey;
-import net.consensys.cava.rlpx.HandshakeMessage;
-import net.consensys.cava.rlpx.MemoryWireConnectionsRepository;
-import net.consensys.cava.rlpx.RLPxConnection;
-import net.consensys.cava.rlpx.RLPxConnectionFactory;
-import net.consensys.cava.rlpx.RLPxService;
-import net.consensys.cava.rlpx.WireConnectionRepository;
-import net.consensys.cava.rlpx.wire.DefaultWireConnection;
-import net.consensys.cava.rlpx.wire.DisconnectReason;
-import net.consensys.cava.rlpx.wire.SubProtocol;
-import net.consensys.cava.rlpx.wire.SubProtocolHandler;
-import net.consensys.cava.rlpx.wire.SubProtocolIdentifier;
-import net.consensys.cava.rlpx.wire.WireConnection;
+package org.apache.tuweni.rlpx.vertx;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.CompletableAsyncCompletion;
+import org.apache.tuweni.crypto.SECP256K1.KeyPair;
+import org.apache.tuweni.crypto.SECP256K1.PublicKey;
+import org.apache.tuweni.rlpx.HandshakeMessage;
+import org.apache.tuweni.rlpx.MemoryWireConnectionsRepository;
+import org.apache.tuweni.rlpx.RLPxConnection;
+import org.apache.tuweni.rlpx.RLPxConnectionFactory;
+import org.apache.tuweni.rlpx.RLPxService;
+import org.apache.tuweni.rlpx.WireConnectionRepository;
+import org.apache.tuweni.rlpx.wire.DefaultWireConnection;
+import org.apache.tuweni.rlpx.wire.DisconnectReason;
+import org.apache.tuweni.rlpx.wire.SubProtocol;
+import org.apache.tuweni.rlpx.wire.SubProtocolHandler;
+import org.apache.tuweni.rlpx.wire.SubProtocolIdentifier;
+import org.apache.tuweni.rlpx.wire.WireConnection;
 
 import java.net.InetSocketAddress;
 import java.util.LinkedHashMap;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/package-info.java b/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/package-info.java
index 3536718..fd4aa85 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/package-info.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/vertx/package-info.java
@@ -3,10 +3,10 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-rlpx' (cava-rlpx.jar).
+ * 'org.apache.tuweni:cava-rlpx' (cava-rlpx.jar).
  */
 @ParametersAreNonnullByDefault
 
-package net.consensys.cava.rlpx.vertx;
+package org.apache.tuweni.rlpx.vertx;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java
index 68b88ad..e763418 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/Capability.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 import java.util.Objects;
 
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java
index c3d73a3..adaa68f 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultSubProtocolIdentifier.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 /**
  * Default implementation of a sub protocol identifier
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java
index 008639c..1c64e26 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DefaultWireConnection.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.CompletableAsyncCompletion;
-import net.consensys.cava.rlpx.RLPxMessage;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.CompletableAsyncCompletion;
+import org.apache.tuweni.rlpx.RLPxMessage;
 
 import java.util.LinkedHashMap;
 import java.util.List;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java
index 0a282af..2d3b2ad 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectMessage.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.rlp.RLP;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.rlp.RLP;
 
 final class DisconnectMessage implements WireProtocolMessage {
 
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java
index d2d1486..fe1b959 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/DisconnectReason.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 /**
  * Enumeration of all reasons disconnect may happen.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java
index 6b26cb7..06b9f2a 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/HelloMessage.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.rlp.RLP;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.rlp.RLP;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java
index 0bf5ecb..5edd7e3 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PingMessage.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 final class PingMessage implements WireProtocolMessage {
 
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java
index 55c4ba8..3b955b1 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/PongMessage.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 final class PongMessage implements WireProtocolMessage {
 
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java
index bcbf4df..aea446b 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocol.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 
-import net.consensys.cava.rlpx.RLPxService;
+import org.apache.tuweni.rlpx.RLPxService;
 
 /**
  * Defines a subprotocol to be used for wire connections
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java
index f58ba68..4018c75 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolHandler.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.concurrent.AsyncCompletion;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncCompletion;
 
 /**
  * Handler managing messages and new connections of peers related for a given subprotocol.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java
index 37319c7..7d11c67 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/SubProtocolIdentifier.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 /**
  * Identifier of a subprotocol, comprised of a name and version.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java
index 6d64b89..f9376af 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireConnection.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 
 /**
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java
index 9b5fb4d..e5e87e4 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/WireProtocolMessage.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * A set of bytes made available to a subprotocol after it has been successfully decrypted.
diff --git a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/package-info.java b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/package-info.java
index da25d49..1c37089 100644
--- a/rlpx/src/main/java/net/consensys/cava/rlpx/wire/package-info.java
+++ b/rlpx/src/main/java/net/consensys/cava/rlpx/wire/package-info.java
@@ -3,10 +3,10 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-rlpx' (cava-rlpx.jar).
+ * 'org.apache.tuweni:cava-rlpx' (cava-rlpx.jar).
  */
 @ParametersAreNonnullByDefault
 
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java
index be78e61..ec38ae6 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/RLPxConnectionFactoryTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx;
+package org.apache.tuweni.rlpx;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -18,13 +18,13 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.crypto.SECP256K1.KeyPair;
-import net.consensys.cava.crypto.SECP256K1.SecretKey;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.crypto.SECP256K1.KeyPair;
+import org.apache.tuweni.crypto.SECP256K1.SecretKey;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import java.security.SecureRandom;
 import java.util.concurrent.TimeUnit;
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java
index 4e5e80a..501a53f 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxAcceptanceTest.java
@@ -10,26 +10,26 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.vertx;
+package org.apache.tuweni.rlpx.vertx;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.CompletableAsyncCompletion;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
-import net.consensys.cava.rlpx.MemoryWireConnectionsRepository;
-import net.consensys.cava.rlpx.RLPxService;
-import net.consensys.cava.rlpx.wire.DefaultWireConnection;
-import net.consensys.cava.rlpx.wire.SubProtocol;
-import net.consensys.cava.rlpx.wire.SubProtocolHandler;
-import net.consensys.cava.rlpx.wire.SubProtocolIdentifier;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.CompletableAsyncCompletion;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
+import org.apache.tuweni.rlpx.MemoryWireConnectionsRepository;
+import org.apache.tuweni.rlpx.RLPxService;
+import org.apache.tuweni.rlpx.wire.DefaultWireConnection;
+import org.apache.tuweni.rlpx.wire.SubProtocol;
+import org.apache.tuweni.rlpx.wire.SubProtocolHandler;
+import org.apache.tuweni.rlpx.wire.SubProtocolIdentifier;
 
 import java.io.BufferedWriter;
 import java.io.OutputStreamWriter;
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java
index 19691fa..c715afe 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/vertx/VertxRLPxServiceTest.java
@@ -10,19 +10,19 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.vertx;
+package org.apache.tuweni.rlpx.vertx;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
-import net.consensys.cava.rlpx.MemoryWireConnectionsRepository;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
+import org.apache.tuweni.rlpx.MemoryWireConnectionsRepository;
 
 import java.io.BufferedWriter;
 import java.io.OutputStreamWriter;
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java
index 23b6464..eb271da 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DefaultWireConnectionTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.rlpx.RLPxMessage;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.rlpx.RLPxMessage;
 
 import java.util.Collections;
 import java.util.LinkedHashMap;
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java
index 39f1ab4..780fc7e 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/DisconnectMessageTest.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java
index f155206..8ce6bbe 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/HelloMessageTest.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.Collections;
 
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java
index 3f1a197..10a2000 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/PingPongTest.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.rlpx.RLPxMessage;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.rlpx.RLPxMessage;
 
 import java.util.LinkedHashMap;
 import java.util.concurrent.atomic.AtomicReference;
diff --git a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java
index 1f4d78b..548cd90 100644
--- a/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java
+++ b/rlpx/src/test/java/net/consensys/cava/rlpx/wire/RLPxConnectionMessageExchangeTest.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.rlpx.wire;
+package org.apache.tuweni.rlpx.wire;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.rlpx.RLPxConnection;
-import net.consensys.cava.rlpx.RLPxConnectionFactory;
-import net.consensys.cava.rlpx.RLPxMessage;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.rlpx.RLPxConnection;
+import org.apache.tuweni.rlpx.RLPxConnectionFactory;
+import org.apache.tuweni.rlpx.RLPxMessage;
 
 import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
diff --git a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java
index 28a7018..65a9691 100644
--- a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java
+++ b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentity.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.discovery;
+package org.apache.tuweni.scuttlebutt.discovery;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.scuttlebutt.Identity;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.scuttlebutt.Identity;
 
 import java.net.InetSocketAddress;
 import java.util.Objects;
diff --git a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
index 4afe6cd..c04e2cc 100644
--- a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
+++ b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryService.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.discovery;
+package org.apache.tuweni.scuttlebutt.discovery;
 
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.CompletableAsyncCompletion;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.CompletableAsyncCompletion;
 
 import java.net.InetAddress;
 import java.util.ArrayList;
diff --git a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/package-info.java b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/package-info.java
index 7548cd7..96415e1 100644
--- a/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/package-info.java
+++ b/scuttlebutt-discovery/src/main/java/net/consensys/cava/scuttlebutt/discovery/package-info.java
@@ -6,9 +6,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-scuttlebutt-discovery' (cava-scuttlebutt-discovery.jar).
+ * 'org.apache.tuweni:cava-scuttlebutt-discovery' (cava-scuttlebutt-discovery.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.scuttlebutt.discovery;
+package org.apache.tuweni.scuttlebutt.discovery;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java b/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java
index d3c12bd..65bdbe7 100644
--- a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java
+++ b/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/LocalIdentityTest.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.discovery;
+package org.apache.tuweni.scuttlebutt.discovery;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.crypto.sodium.Sodium;
-import net.consensys.cava.scuttlebutt.Identity;
+import org.apache.tuweni.crypto.sodium.Sodium;
+import org.apache.tuweni.scuttlebutt.Identity;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java b/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
index aa1faf0..f5af1a5 100644
--- a/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
+++ b/scuttlebutt-discovery/src/test/java/net/consensys/cava/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.discovery;
+package org.apache.tuweni.scuttlebutt.discovery;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -18,11 +18,11 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.crypto.sodium.Sodium;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
-import net.consensys.cava.scuttlebutt.Identity;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.crypto.sodium.Sodium;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
+import org.apache.tuweni.scuttlebutt.Identity;
 
 import java.io.BufferedWriter;
 import java.io.OutputStreamWriter;
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java
index ca7b92e..4f1ac41 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/HandshakeException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
 /**
  * Exceptions thrown during handshake because of invalid messages or different network identifiers.
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
index 0eda1db..c4b3bc3 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClient.java
@@ -10,20 +10,20 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.sodium.Allocated;
-import net.consensys.cava.crypto.sodium.Box;
-import net.consensys.cava.crypto.sodium.Concatenate;
-import net.consensys.cava.crypto.sodium.DiffieHelman;
-import net.consensys.cava.crypto.sodium.HMACSHA512256;
-import net.consensys.cava.crypto.sodium.SHA256Hash;
-import net.consensys.cava.crypto.sodium.SecretBox;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.scuttlebutt.Identity;
-import net.consensys.cava.scuttlebutt.Invite;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.sodium.Allocated;
+import org.apache.tuweni.crypto.sodium.Box;
+import org.apache.tuweni.crypto.sodium.Concatenate;
+import org.apache.tuweni.crypto.sodium.DiffieHelman;
+import org.apache.tuweni.crypto.sodium.HMACSHA512256;
+import org.apache.tuweni.crypto.sodium.SHA256Hash;
+import org.apache.tuweni.crypto.sodium.SecretBox;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.scuttlebutt.Identity;
+import org.apache.tuweni.scuttlebutt.Invite;
 
 /**
  * Class responsible for performing a Secure Scuttlebutt handshake with a remote peer, as defined in the
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
index fe8c0c8..1d5df38 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeServer.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.sodium.Allocated;
-import net.consensys.cava.crypto.sodium.Box;
-import net.consensys.cava.crypto.sodium.Concatenate;
-import net.consensys.cava.crypto.sodium.DiffieHelman;
-import net.consensys.cava.crypto.sodium.HMACSHA512256;
-import net.consensys.cava.crypto.sodium.SHA256Hash;
-import net.consensys.cava.crypto.sodium.SecretBox;
-import net.consensys.cava.crypto.sodium.Signature;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.sodium.Allocated;
+import org.apache.tuweni.crypto.sodium.Box;
+import org.apache.tuweni.crypto.sodium.Concatenate;
+import org.apache.tuweni.crypto.sodium.DiffieHelman;
+import org.apache.tuweni.crypto.sodium.HMACSHA512256;
+import org.apache.tuweni.crypto.sodium.SHA256Hash;
+import org.apache.tuweni.crypto.sodium.SecretBox;
+import org.apache.tuweni.crypto.sodium.Signature;
 
 /**
  * Class responsible for performing a Secure Scuttlebutt handshake with a remote peer, as defined in the
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java
index 3e4ba92..91632d6 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStream.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.MutableBytes;
-import net.consensys.cava.crypto.sodium.SHA256Hash;
-import net.consensys.cava.crypto.sodium.SecretBox;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.MutableBytes;
+import org.apache.tuweni.crypto.sodium.SHA256Hash;
+import org.apache.tuweni.crypto.sodium.SecretBox;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
index 9eb8fb8..3db0ad8 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamClient.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * Interface used to encrypt and decrypt messages to and from a server.
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
index 416512d..07cd41b 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamServer.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * Interface used to encrypt and decrypt messages to and from a client.
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java
index 794ca5f..e70179a 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/StreamException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
 public final class StreamException extends RuntimeException {
 
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/package-info.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/package-info.java
index 185594b..e219a8e 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/package-info.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/package-info.java
@@ -6,9 +6,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-scuttlebutt-handshake' (cava-scuttlebutt-handshake.jar).
+ * 'org.apache.tuweni:cava-scuttlebutt-handshake' (cava-scuttlebutt-handshake.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java
index 70e184b..c0e0cc8 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandler.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake.vertx;
+package org.apache.tuweni.scuttlebutt.handshake.vertx;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * Handler managing a stream over SecureScuttlebutt originating from the Vert.x client
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
index f23e5ca..048bd2b 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ClientHandlerFactory.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake.vertx;
+package org.apache.tuweni.scuttlebutt.handshake.vertx;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.function.Consumer;
 
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
index 71df380..ffc1492 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxClient.java
@@ -10,20 +10,20 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake.vertx;
-
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.concurrent.CompletableAsyncResult;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.scuttlebutt.handshake.HandshakeException;
-import net.consensys.cava.scuttlebutt.handshake.SecureScuttlebuttHandshakeClient;
-import net.consensys.cava.scuttlebutt.handshake.SecureScuttlebuttStreamClient;
-import net.consensys.cava.scuttlebutt.handshake.SecureScuttlebuttStreamServer;
-import net.consensys.cava.scuttlebutt.handshake.StreamException;
+package org.apache.tuweni.scuttlebutt.handshake.vertx;
+
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.concurrent.CompletableAsyncResult;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.scuttlebutt.handshake.HandshakeException;
+import org.apache.tuweni.scuttlebutt.handshake.SecureScuttlebuttHandshakeClient;
+import org.apache.tuweni.scuttlebutt.handshake.SecureScuttlebuttStreamClient;
+import org.apache.tuweni.scuttlebutt.handshake.SecureScuttlebuttStreamServer;
+import org.apache.tuweni.scuttlebutt.handshake.StreamException;
 
 import io.vertx.core.Vertx;
 import io.vertx.core.buffer.Buffer;
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
index 95249db..fce6768 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/SecureScuttlebuttVertxServer.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake.vertx;
-
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncCompletion;
-import net.consensys.cava.concurrent.CompletableAsyncCompletion;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.scuttlebutt.handshake.HandshakeException;
-import net.consensys.cava.scuttlebutt.handshake.SecureScuttlebuttHandshakeServer;
-import net.consensys.cava.scuttlebutt.handshake.SecureScuttlebuttStreamServer;
-import net.consensys.cava.scuttlebutt.handshake.StreamException;
+package org.apache.tuweni.scuttlebutt.handshake.vertx;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.CompletableAsyncCompletion;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.scuttlebutt.handshake.HandshakeException;
+import org.apache.tuweni.scuttlebutt.handshake.SecureScuttlebuttHandshakeServer;
+import org.apache.tuweni.scuttlebutt.handshake.SecureScuttlebuttStreamServer;
+import org.apache.tuweni.scuttlebutt.handshake.StreamException;
 
 import java.net.InetSocketAddress;
 
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java
index 163dbd9..b5a9277 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandler.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake.vertx;
+package org.apache.tuweni.scuttlebutt.handshake.vertx;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 /**
  * Handler managing a stream over SecureScuttlebutt originating from the Vert.x server
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
index 9528571..e50baa8 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/ServerHandlerFactory.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake.vertx;
+package org.apache.tuweni.scuttlebutt.handshake.vertx;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.function.Consumer;
 
diff --git a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/package-info.java b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/package-info.java
index ae7e59b..ba15361 100644
--- a/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/package-info.java
+++ b/scuttlebutt-handshake/src/main/java/net/consensys/cava/scuttlebutt/handshake/vertx/package-info.java
@@ -6,9 +6,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-scuttlebutt-handshake' (cava-scuttlebutt-handshake.jar).
+ * 'org.apache.tuweni:cava-scuttlebutt-handshake' (cava-scuttlebutt-handshake.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.scuttlebutt.handshake.vertx;
+package org.apache.tuweni.scuttlebutt.handshake.vertx;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
index a0ea4e9..3870ee6 100644
--- a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
+++ b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttHandshakeClientTest.java
@@ -10,20 +10,20 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.sodium.SecretBox;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.crypto.sodium.Sodium;
-import net.consensys.cava.junit.BouncyCastleExtension;
-import net.consensys.cava.scuttlebutt.Identity;
-import net.consensys.cava.scuttlebutt.Invite;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.sodium.SecretBox;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.crypto.sodium.Sodium;
+import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.scuttlebutt.Identity;
+import org.apache.tuweni.scuttlebutt.Invite;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
index 2b475c4..93b052c 100644
--- a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
+++ b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/SecureScuttlebuttStreamTest.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake;
+package org.apache.tuweni.scuttlebutt.handshake;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.sodium.SHA256Hash;
-import net.consensys.cava.crypto.sodium.Sodium;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.sodium.SHA256Hash;
+import org.apache.tuweni.crypto.sodium.Sodium;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
index b6eb21b..84f8780 100644
--- a/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
+++ b/scuttlebutt-handshake/src/test/java/net/consensys/cava/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
@@ -10,20 +10,20 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.handshake.vertx;
+package org.apache.tuweni.scuttlebutt.handshake.vertx;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
-import net.consensys.cava.scuttlebutt.rpc.RPCCodec;
-import net.consensys.cava.scuttlebutt.rpc.RPCFlag;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
+import org.apache.tuweni.scuttlebutt.rpc.RPCCodec;
+import org.apache.tuweni.scuttlebutt.rpc.RPCFlag;
 
 import java.io.BufferedWriter;
 import java.io.OutputStreamWriter;
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java
index 4164deb..bf63217 100644
--- a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java
+++ b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCCodec.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java
index 0c94b93..3ab2088 100644
--- a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java
+++ b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCFlag.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
 /**
  * Defines constants for dealing with SecureScuttlebutt RPC flags.
diff --git a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java
index 2a4c426..3cb7553 100644
--- a/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java
+++ b/scuttlebutt-rpc/src/main/java/net/consensys/cava/scuttlebutt/rpc/RPCMessage.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.io.IOException;
 
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java
index 60d6194..4e8ef97 100644
--- a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java
+++ b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/PatchworkIntegrationTest.java
@@ -10,22 +10,22 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.concurrent.AsyncResult;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.io.Base64;
-import net.consensys.cava.junit.VertxExtension;
-import net.consensys.cava.junit.VertxInstance;
-import net.consensys.cava.scuttlebutt.handshake.vertx.ClientHandler;
-import net.consensys.cava.scuttlebutt.handshake.vertx.SecureScuttlebuttVertxClient;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.concurrent.AsyncResult;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.io.Base64;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
+import org.apache.tuweni.scuttlebutt.handshake.vertx.ClientHandler;
+import org.apache.tuweni.scuttlebutt.handshake.vertx.SecureScuttlebuttVertxClient;
 
 import java.io.BufferedWriter;
 import java.io.File;
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java
index 2596b38..872118b 100644
--- a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java
+++ b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCEncodingTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.nio.charset.StandardCharsets;
 
diff --git a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java
index 0938956..4a50ec1 100644
--- a/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java
+++ b/scuttlebutt-rpc/src/test/java/net/consensys/cava/scuttlebutt/rpc/RPCFlagTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt.rpc;
+package org.apache.tuweni.scuttlebutt.rpc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java
index 31d07cf..fcc9173 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519KeyPairIdentity.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.crypto.sodium.Signature;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.crypto.sodium.Signature;
 
 import java.util.Objects;
 
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java
index 80d51fd..300e51a 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Ed25519PublicKeyIdentity.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.crypto.sodium.Signature;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.crypto.sodium.Signature;
 
 import java.util.Objects;
 
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java
index fd4c970..5bcdcce 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Identity.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.crypto.sodium.Signature;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.crypto.sodium.Signature;
 
 /**
  * A Scuttlebutt identity, backed by a public key.
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java
index 257db2b..2b17fcd 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/Invite.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
-import net.consensys.cava.crypto.sodium.Signature;
+import org.apache.tuweni.crypto.sodium.Signature;
 
 /**
  * An invite code as defined by the Secure Scuttlebutt protocol guide.
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java
index df2fa3b..9b11bee 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1KeyPairIdentity.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.crypto.sodium.Signature;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.crypto.sodium.Signature;
 
 import java.util.Objects;
 
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java
index ebd7797..1868bd9 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/SECP256K1PublicKeyIdentity.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.crypto.sodium.Signature;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.crypto.sodium.Signature;
 
 import java.util.Objects;
 
diff --git a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/package-info.java b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/package-info.java
index 312be37..d440d98 100644
--- a/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/package-info.java
+++ b/scuttlebutt/src/main/java/net/consensys/cava/scuttlebutt/package-info.java
@@ -6,9 +6,9 @@
  *
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-scuttlebutt' (cava-scuttlebutt.jar).
+ * 'org.apache.tuweni:cava-scuttlebutt' (cava-scuttlebutt.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java b/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java
index f69a419..036138f 100644
--- a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java
+++ b/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/IdentityTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -19,11 +19,11 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.crypto.SECP256K1;
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.crypto.sodium.Sodium;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.crypto.SECP256K1;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.crypto.sodium.Sodium;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java b/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java
index 201823f..ef7a7c6 100644
--- a/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java
+++ b/scuttlebutt/src/test/java/net/consensys/cava/scuttlebutt/InviteTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.scuttlebutt;
+package org.apache.tuweni.scuttlebutt;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import net.consensys.cava.crypto.sodium.Signature;
-import net.consensys.cava.crypto.sodium.Sodium;
+import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.crypto.sodium.Sodium;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java b/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java
index fcaa63e..9de08a1 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/ByteBufferSSZWriter.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.nio.ByteBuffer;
 
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java b/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java
index 7767654..6516d64 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZReader.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.nio.ByteOrder.LITTLE_ENDIAN;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.bigints.UInt384;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.bigints.UInt384;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java b/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java
index 821f17b..397b358 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/BytesSSZWriter.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java b/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java
index e965290..d40bbb8 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/EndOfSSZException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 /**
  * Indicates the end of the SSZ source has been reached unexpectedly.
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java b/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java
index 7178687..c6fdc72 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/InvalidSSZTypeException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 /**
  * Indicates that an unexpected type was encountered when decoding SSZ.
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java b/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java
index ef1420c..f1a62af 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/SSZ.java
@@ -10,18 +10,18 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.nio.ByteOrder.LITTLE_ENDIAN;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.Hash;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.bigints.UInt384;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.Hash;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.bigints.UInt384;
 
 import java.math.BigInteger;
 import java.nio.BufferOverflowException;
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java b/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java
index 8e46fd7..bdc876f 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/SSZException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 /**
  * Base type for all SSZ encoding and decoding exceptions.
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java b/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java
index 3497149..f82722b 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/SSZReader.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.bigints.UInt384;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.bigints.UInt384;
 
 import java.math.BigInteger;
 import java.util.List;
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java b/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java
index a9026e7..0ee7e82 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/SSZWriter.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
-import net.consensys.cava.units.bigints.UInt384;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
+import org.apache.tuweni.units.bigints.UInt384;
 
 import java.math.BigInteger;
 import java.util.List;
diff --git a/ssz/src/main/java/net/consensys/cava/ssz/package-info.java b/ssz/src/main/java/net/consensys/cava/ssz/package-info.java
index a70179d..74c66a9 100644
--- a/ssz/src/main/java/net/consensys/cava/ssz/package-info.java
+++ b/ssz/src/main/java/net/consensys/cava/ssz/package-info.java
@@ -5,9 +5,9 @@
  * "https://github.com/ethereum/eth2.0-specs/blob/master/specs/simple-serialize.md">https://github.com/ethereum/eth2.0-specs/blob/master/specs/simple-serialize.md</a>.
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-ssz' (cava-ssz.jar).
+ * 'org.apache.tuweni:cava-ssz' (cava-ssz.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt
index 42600ec..23a5310 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZReader.kt
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz.experimental
+package org.apache.tuweni.ssz.experimental
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.bigints.UInt384
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.bigints.UInt384
 import java.math.BigInteger
 
 @ExperimentalUnsignedTypes
-internal class BytesSSZReader(private val delegate: net.consensys.cava.ssz.SSZReader) : SSZReader {
+internal class BytesSSZReader(private val delegate: org.apache.tuweni.ssz.SSZReader) : SSZReader {
   override fun readBytes(limit: Int): Bytes =
     delegate.readBytes(limit)
 
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt
index 8b161bc..218786c 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/BytesSSZWriter.kt
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz.experimental
+package org.apache.tuweni.ssz.experimental
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.bigints.UInt384
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.bigints.UInt384
 import java.math.BigInteger
 
 @ExperimentalUnsignedTypes
-internal class BytesSSZWriter(private val delegate: net.consensys.cava.ssz.SSZWriter) : SSZWriter {
+internal class BytesSSZWriter(private val delegate: org.apache.tuweni.ssz.SSZWriter) : SSZWriter {
   override fun writeSSZ(value: Bytes) =
     delegate.writeSSZ(value)
 
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt
index a48f275..28ef22d 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZ.kt
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz.experimental
+package org.apache.tuweni.ssz.experimental
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.ssz.EndOfSSZException
-import net.consensys.cava.ssz.InvalidSSZTypeException
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.ssz.EndOfSSZException
+import org.apache.tuweni.ssz.InvalidSSZTypeException
 import java.nio.BufferOverflowException
 import java.nio.ByteBuffer
 import java.nio.ReadOnlyBufferException
@@ -33,7 +33,7 @@ object SSZ {
    * @param fn A consumer that will be provided with a {@link SSZWriter} that can consume values.
    * @return The SSZ encoding in a {@link Bytes} value.
    */
-  fun encode(fn: (SSZWriter) -> Unit): Bytes = net.consensys.cava.ssz.SSZ.encode { w -> fn(BytesSSZWriter(w)) }
+  fun encode(fn: (SSZWriter) -> Unit): Bytes = org.apache.tuweni.ssz.SSZ.encode { w -> fn(BytesSSZWriter(w)) }
 
   /**
    * Encode values to a {@link ByteBuffer}.
@@ -46,7 +46,7 @@ object SSZ {
    * @throws ReadOnlyBufferException If the provided buffer is read-only.
    */
   fun <T : ByteBuffer> encodeTo(buffer: T, fn: (SSZWriter) -> Unit): T =
-    net.consensys.cava.ssz.SSZ.encodeTo(buffer) { w -> fn(BytesSSZWriter(w)) }
+    org.apache.tuweni.ssz.SSZ.encodeTo(buffer) { w -> fn(BytesSSZWriter(w)) }
 
   /**
    * Encode an unsigned integer to a {@link Bytes} value.
@@ -57,7 +57,7 @@ object SSZ {
    * @throws IllegalArgumentException If the value is too large for the specified {@code bitLength}.
    */
   fun encodeUInt(value: UInt, bitLength: Int): Bytes =
-    net.consensys.cava.ssz.SSZ.encodeULong(value.toLong(), bitLength)
+    org.apache.tuweni.ssz.SSZ.encodeULong(value.toLong(), bitLength)
 
   /**
    * Encode an unsigned long integer to a {@link Bytes} value.
@@ -68,7 +68,7 @@ object SSZ {
    * @throws IllegalArgumentException If the value is too large for the specified {@code bitLength}.
    */
   fun encodeULong(value: ULong, bitLength: Int): Bytes =
-    net.consensys.cava.ssz.SSZ.encodeULong(value.toLong(), bitLength)
+    org.apache.tuweni.ssz.SSZ.encodeULong(value.toLong(), bitLength)
 
   /**
    * Encode an 8-bit unsigned integer to a {@link Bytes} value.
@@ -117,7 +117,7 @@ object SSZ {
    * @return The result from the reading function.
    */
   fun <T> decode(source: Bytes, fn: (SSZReader) -> T): T =
-    net.consensys.cava.ssz.SSZ.decode(source) { r -> fn(BytesSSZReader(r)) }
+    org.apache.tuweni.ssz.SSZ.decode(source) { r -> fn(BytesSSZReader(r)) }
 
   /**
    * Read a SSZ encoded unsigned integer from a {@link Bytes} value.
@@ -130,7 +130,7 @@ object SSZ {
    * @throws EndOfSSZException If there are no more SSZ values to read.
    */
   fun decodeUInt(source: Bytes, bitLength: Int): UInt =
-    net.consensys.cava.ssz.SSZ.decodeUInt(source, bitLength).toUInt()
+    org.apache.tuweni.ssz.SSZ.decodeUInt(source, bitLength).toUInt()
 
   /**
    * Read a SSZ encoded unsigned long integer from a {@link Bytes} value.
@@ -143,7 +143,7 @@ object SSZ {
    * @throws EndOfSSZException If there are no more SSZ values to read.
    */
   fun decodeULong(source: Bytes, bitLength: Int): ULong =
-    net.consensys.cava.ssz.SSZ.decodeULong(source, bitLength).toULong()
+    org.apache.tuweni.ssz.SSZ.decodeULong(source, bitLength).toULong()
 
   /**
    * Read an 8-bit unsigned integer from the SSZ source.
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt
index bc0429e..7c0954b 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZReader.kt
@@ -10,20 +10,20 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz.experimental
+package org.apache.tuweni.ssz.experimental
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.ssz.EndOfSSZException
-import net.consensys.cava.ssz.InvalidSSZTypeException
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.bigints.UInt384
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.ssz.EndOfSSZException
+import org.apache.tuweni.ssz.InvalidSSZTypeException
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.bigints.UInt384
 import java.math.BigInteger
 import java.nio.charset.StandardCharsets.UTF_8
 
 /**
  * A reader for consuming values from an SSZ encoded source.
  */
-// Does not extend net.consensys.cava.ssz.SSZReader (unlike SSZWriter) as the return types vary for the UInt methods.
+// Does not extend org.apache.tuweni.ssz.SSZReader (unlike SSZWriter) as the return types vary for the UInt methods.
 @ExperimentalUnsignedTypes
 interface SSZReader {
 
diff --git a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt
index 50adf5d..11b9e9c 100644
--- a/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt
+++ b/ssz/src/main/kotlin/net/consensys/cava/ssz/experimental/SSZWriter.kt
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz.experimental
+package org.apache.tuweni.ssz.experimental
 
-import net.consensys.cava.bytes.Bytes
-import net.consensys.cava.ssz.SSZ
-import net.consensys.cava.units.bigints.UInt256
-import net.consensys.cava.units.bigints.UInt384
+import org.apache.tuweni.bytes.Bytes
+import org.apache.tuweni.ssz.SSZ
+import org.apache.tuweni.units.bigints.UInt256
+import org.apache.tuweni.units.bigints.UInt384
 import java.math.BigInteger
 
 @ExperimentalUnsignedTypes
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java b/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java
index 11dd3cf..ae9392f 100644
--- a/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java
+++ b/ssz/src/test/java/net/consensys/cava/ssz/ByteBufferWriterTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static net.consensys.cava.bytes.Bytes.fromHexString;
+import static org.apache.tuweni.bytes.Bytes.fromHexString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java b/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java
index 18dfdf5..c2eec4f 100644
--- a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java
+++ b/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZReaderTest.java
@@ -10,15 +10,15 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
-import static net.consensys.cava.bytes.Bytes.fromHexString;
+import static org.apache.tuweni.bytes.Bytes.fromHexString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes48;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes48;
 
 import java.math.BigInteger;
 import java.util.Arrays;
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java b/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java
index 399e05d..e0ddf3b 100644
--- a/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java
+++ b/ssz/src/test/java/net/consensys/cava/ssz/BytesSSZWriterTest.java
@@ -10,17 +10,17 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static net.consensys.cava.bytes.Bytes.fromHexString;
+import static org.apache.tuweni.bytes.Bytes.fromHexString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 import java.util.Arrays;
diff --git a/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java b/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java
index 47cbd15..1ea9ea8 100644
--- a/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java
+++ b/ssz/src/test/java/net/consensys/cava/ssz/HashTreeRootTest.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz;
+package org.apache.tuweni.ssz;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.crypto.Hash;
-import net.consensys.cava.junit.BouncyCastleExtension;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.crypto.Hash;
+import org.apache.tuweni.junit.BouncyCastleExtension;
 
 import org.bouncycastle.util.Arrays;
 import org.junit.jupiter.api.Test;
diff --git a/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt b/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt
index c758256..6ec0115 100644
--- a/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt
+++ b/ssz/src/test/kotlin/net/consensys/cava/ssz/experimental/SSZTest.kt
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.ssz.experimental
+package org.apache.tuweni.ssz.experimental
 
-import net.consensys.cava.bytes.Bytes.fromHexString
+import org.apache.tuweni.bytes.Bytes.fromHexString
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
 
diff --git a/toml/README.md b/toml/README.md
index 8c1513f..9d59977 100644
--- a/toml/README.md
+++ b/toml/README.md
@@ -30,19 +30,19 @@ It can also be included independently, using the cava-toml jar, which is publish
 With Maven:
 ```
 <dependency>
-  <groupId>net.consensys.cava</groupId>
+  <groupId>org.apache.tuweni</groupId>
   <artifactId>cava-toml</artifactId>
   <version>0.6.0</version>
 </dependency>
 ```
 
-With Gradle: `compile 'net.consensys.cava:cava-toml:0.6.0'`
+With Gradle: `compile 'org.apache.tuweni:cava-toml:0.6.0'`
 
 ## Links
 
 - [GitHub project](https://github.com/consensys/cava)
 - [Online Java documentation](https://consensys.github.io/cava/docs/java/latest/net/consensys/cava/toml/package-summary.html)
-- [Online Kotlin documentation](https://consensys.github.io/cava/docs/kotlin/latest/cava/net.consensys.cava.toml/index.html)
+- [Online Kotlin documentation](https://consensys.github.io/cava/docs/kotlin/latest/cava/org.apache.tuweni.toml/index.html)
 - [Issue tracker: Report a defect or feature request](https://github.com/google/cava/issues/new)
 - [StackOverflow: Ask "how-to" and "why-didn't-it-work" questions](https://stackoverflow.com/questions/ask?tags=cava+toml+java)
 - [cava-discuss: For open-ended questions and discussion](http://groups.google.com/group/cava-discuss)
diff --git a/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlLexer.g4 b/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlLexer.g4
index 327c2ab..875a604 100644
--- a/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlLexer.g4
+++ b/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlLexer.g4
@@ -5,7 +5,7 @@ channels { COMMENTS, WHITESPACE }
 tokens { TripleQuotationMark, TripleApostrophe, StringChar, Comma }
 
 @header {
-package net.consensys.cava.toml.internal;
+package org.apache.tuweni.toml.internal;
 }
 
 @members {
diff --git a/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlParser.g4 b/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlParser.g4
index f9dc122..810b75a 100644
--- a/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlParser.g4
+++ b/toml/src/main/antlr/net/consensys/cava/toml/internal/TomlParser.g4
@@ -3,7 +3,7 @@ parser grammar TomlParser;
 options { tokenVocab=TomlLexer; }
 
 @header {
-package net.consensys.cava.toml.internal;
+package org.apache.tuweni.toml.internal;
 }
 
 // Document parser
diff --git a/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java b/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java
index d261128..05dc52b 100644
--- a/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java
+++ b/toml/src/main/java/net/consensys/cava/toml/AccumulatingErrorListener.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import static net.consensys.cava.toml.TomlPosition.positionAt;
+import static org.apache.tuweni.toml.TomlPosition.positionAt;
 
-import net.consensys.cava.toml.internal.TomlLexer;
+import org.apache.tuweni.toml.internal.TomlLexer;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java b/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java
index e207599..bd9cb0d 100644
--- a/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/ArrayVisitor.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlParser.ArrayValueContext;
-import net.consensys.cava.toml.internal.TomlParser.ValContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+import org.apache.tuweni.toml.internal.TomlParser.ArrayValueContext;
+import org.apache.tuweni.toml.internal.TomlParser.ValContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 final class ArrayVisitor extends TomlParserBaseVisitor<MutableTomlArray> {
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java b/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java
index 6562dde..458e000 100644
--- a/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java
+++ b/toml/src/main/java/net/consensys/cava/toml/ErrorReporter.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 interface ErrorReporter {
   void reportError(TomlParseError error);
diff --git a/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java b/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java
index 0d8febb..22de053 100644
--- a/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/InlineTableVisitor.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlParser.KeyContext;
-import net.consensys.cava.toml.internal.TomlParser.KeyvalContext;
-import net.consensys.cava.toml.internal.TomlParser.ValContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+import org.apache.tuweni.toml.internal.TomlParser.KeyContext;
+import org.apache.tuweni.toml.internal.TomlParser.KeyvalContext;
+import org.apache.tuweni.toml.internal.TomlParser.ValContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 import java.util.List;
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java b/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java
index f404da8..1b1d59f 100644
--- a/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java
+++ b/toml/src/main/java/net/consensys/cava/toml/JsonSerializer.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.toml.TomlType.typeFor;
+import static org.apache.tuweni.toml.TomlType.typeFor;
 
 import java.io.IOException;
 import java.util.Collections;
diff --git a/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java b/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java
index 980c58a..2cc1d33 100644
--- a/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/KeyVisitor.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlParser.QuotedKeyContext;
-import net.consensys.cava.toml.internal.TomlParser.UnquotedKeyContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+import org.apache.tuweni.toml.internal.TomlParser.QuotedKeyContext;
+import org.apache.tuweni.toml.internal.TomlParser.UnquotedKeyContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java b/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java
index 2660ea0..71cffc0 100644
--- a/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/LineVisitor.java
@@ -10,16 +10,16 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import static net.consensys.cava.toml.TomlVersion.V0_4_0;
+import static org.apache.tuweni.toml.TomlVersion.V0_4_0;
 
-import net.consensys.cava.toml.internal.TomlParser.ArrayTableContext;
-import net.consensys.cava.toml.internal.TomlParser.KeyContext;
-import net.consensys.cava.toml.internal.TomlParser.KeyvalContext;
-import net.consensys.cava.toml.internal.TomlParser.StandardTableContext;
-import net.consensys.cava.toml.internal.TomlParser.ValContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+import org.apache.tuweni.toml.internal.TomlParser.ArrayTableContext;
+import org.apache.tuweni.toml.internal.TomlParser.KeyContext;
+import org.apache.tuweni.toml.internal.TomlParser.KeyvalContext;
+import org.apache.tuweni.toml.internal.TomlParser.StandardTableContext;
+import org.apache.tuweni.toml.internal.TomlParser.ValContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 import java.util.List;
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java b/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java
index 8f1e0cf..3dcab41 100644
--- a/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/LocalDateVisitor.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlParser.DayContext;
-import net.consensys.cava.toml.internal.TomlParser.MonthContext;
-import net.consensys.cava.toml.internal.TomlParser.YearContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+import org.apache.tuweni.toml.internal.TomlParser.DayContext;
+import org.apache.tuweni.toml.internal.TomlParser.MonthContext;
+import org.apache.tuweni.toml.internal.TomlParser.YearContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 import java.time.DateTimeException;
 import java.time.LocalDate;
diff --git a/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java b/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java
index 365e88d..7a38523 100644
--- a/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/LocalTimeVisitor.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlParser.HourContext;
-import net.consensys.cava.toml.internal.TomlParser.MinuteContext;
-import net.consensys.cava.toml.internal.TomlParser.SecondContext;
-import net.consensys.cava.toml.internal.TomlParser.SecondFractionContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+import org.apache.tuweni.toml.internal.TomlParser.HourContext;
+import org.apache.tuweni.toml.internal.TomlParser.MinuteContext;
+import org.apache.tuweni.toml.internal.TomlParser.SecondContext;
+import org.apache.tuweni.toml.internal.TomlParser.SecondFractionContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 import java.time.LocalTime;
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java b/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java
index f2b8ca2..72a9cdb 100644
--- a/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java
+++ b/toml/src/main/java/net/consensys/cava/toml/MutableTomlArray.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.toml.TomlType.typeFor;
-import static net.consensys.cava.toml.TomlType.typeNameFor;
+import static org.apache.tuweni.toml.TomlType.typeFor;
+import static org.apache.tuweni.toml.TomlType.typeNameFor;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java b/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java
index b0651a5..b3e1f4d 100644
--- a/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java
+++ b/toml/src/main/java/net/consensys/cava/toml/MutableTomlTable.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import static net.consensys.cava.toml.Parser.parseDottedKey;
-import static net.consensys.cava.toml.TomlPosition.positionAt;
-import static net.consensys.cava.toml.TomlType.typeFor;
+import static org.apache.tuweni.toml.Parser.parseDottedKey;
+import static org.apache.tuweni.toml.TomlPosition.positionAt;
+import static org.apache.tuweni.toml.TomlType.typeFor;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/toml/src/main/java/net/consensys/cava/toml/Parser.java b/toml/src/main/java/net/consensys/cava/toml/Parser.java
index 4cc07c4..24de490 100644
--- a/toml/src/main/java/net/consensys/cava/toml/Parser.java
+++ b/toml/src/main/java/net/consensys/cava/toml/Parser.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlLexer;
-import net.consensys.cava.toml.internal.TomlParser;
+import org.apache.tuweni.toml.internal.TomlLexer;
+import org.apache.tuweni.toml.internal.TomlParser;
 
 import java.util.List;
 import java.util.Map;
diff --git a/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java b/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java
index 410e378..ff55658 100644
--- a/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/QuotedStringVisitor.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlParser.BasicUnescapedContext;
-import net.consensys.cava.toml.internal.TomlParser.EscapedContext;
-import net.consensys.cava.toml.internal.TomlParser.LiteralBodyContext;
-import net.consensys.cava.toml.internal.TomlParser.MlBasicUnescapedContext;
-import net.consensys.cava.toml.internal.TomlParser.MlLiteralBodyContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+import org.apache.tuweni.toml.internal.TomlParser.BasicUnescapedContext;
+import org.apache.tuweni.toml.internal.TomlParser.EscapedContext;
+import org.apache.tuweni.toml.internal.TomlParser.LiteralBodyContext;
+import org.apache.tuweni.toml.internal.TomlParser.MlBasicUnescapedContext;
+import org.apache.tuweni.toml.internal.TomlParser.MlLiteralBodyContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 final class QuotedStringVisitor extends TomlParserBaseVisitor<StringBuilder> {
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/TokenName.java b/toml/src/main/java/net/consensys/cava/toml/TokenName.java
index 32dc131..744a8fd 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TokenName.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TokenName.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlLexer;
+import org.apache.tuweni.toml.internal.TomlLexer;
 
 import java.util.Arrays;
 import java.util.BitSet;
diff --git a/toml/src/main/java/net/consensys/cava/toml/Toml.java b/toml/src/main/java/net/consensys/cava/toml/Toml.java
index e0205f1..d4b2def 100644
--- a/toml/src/main/java/net/consensys/cava/toml/Toml.java
+++ b/toml/src/main/java/net/consensys/cava/toml/Toml.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import static java.util.Objects.requireNonNull;
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlArray.java b/toml/src/main/java/net/consensys/cava/toml/TomlArray.java
index b776ca2..94c92c5 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlArray.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlArray.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import static net.consensys.cava.toml.TomlType.typeNameFor;
+import static org.apache.tuweni.toml.TomlType.typeNameFor;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java b/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java
index b9a7b1e..d62e685 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlInvalidTypeException.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 /**
  * An exception thrown when an invalid type is encountered.
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java b/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java
index 91fbf22..933872a 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlParseError.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 /**
  * An error that occurred while parsing.
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java b/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java
index 5055ed7..30c0449 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlParseResult.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import java.util.List;
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java b/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java
index 077df50..3f8d796 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlPosition.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import org.antlr.v4.runtime.ParserRuleContext;
 import org.antlr.v4.runtime.Token;
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlTable.java b/toml/src/main/java/net/consensys/cava/toml/TomlTable.java
index 2543366..72e482c 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlTable.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlTable.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import static java.util.Objects.requireNonNull;
-import static net.consensys.cava.toml.Parser.parseDottedKey;
-import static net.consensys.cava.toml.Toml.joinKeyPath;
-import static net.consensys.cava.toml.TomlType.typeNameFor;
+import static org.apache.tuweni.toml.Parser.parseDottedKey;
+import static org.apache.tuweni.toml.Toml.joinKeyPath;
+import static org.apache.tuweni.toml.TomlType.typeNameFor;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlType.java b/toml/src/main/java/net/consensys/cava/toml/TomlType.java
index 0ca68cf..a77071e 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlType.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlType.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
diff --git a/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java b/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java
index 307e807..d360aa9 100644
--- a/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java
+++ b/toml/src/main/java/net/consensys/cava/toml/TomlVersion.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import javax.annotation.Nullable;
 
diff --git a/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java b/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java
index afd0e88..3a51f68 100644
--- a/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/ValueVisitor.java
@@ -10,27 +10,27 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
-
-import net.consensys.cava.toml.internal.TomlParser.ArrayContext;
-import net.consensys.cava.toml.internal.TomlParser.ArrayValuesContext;
-import net.consensys.cava.toml.internal.TomlParser.BinIntContext;
-import net.consensys.cava.toml.internal.TomlParser.DecIntContext;
-import net.consensys.cava.toml.internal.TomlParser.FalseBoolContext;
-import net.consensys.cava.toml.internal.TomlParser.HexIntContext;
-import net.consensys.cava.toml.internal.TomlParser.InlineTableContext;
-import net.consensys.cava.toml.internal.TomlParser.InlineTableValuesContext;
-import net.consensys.cava.toml.internal.TomlParser.LocalDateContext;
-import net.consensys.cava.toml.internal.TomlParser.LocalDateTimeContext;
-import net.consensys.cava.toml.internal.TomlParser.LocalTimeContext;
-import net.consensys.cava.toml.internal.TomlParser.OctIntContext;
-import net.consensys.cava.toml.internal.TomlParser.OffsetDateTimeContext;
-import net.consensys.cava.toml.internal.TomlParser.RegularFloatContext;
-import net.consensys.cava.toml.internal.TomlParser.RegularFloatInfContext;
-import net.consensys.cava.toml.internal.TomlParser.RegularFloatNaNContext;
-import net.consensys.cava.toml.internal.TomlParser.StringContext;
-import net.consensys.cava.toml.internal.TomlParser.TrueBoolContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+package org.apache.tuweni.toml;
+
+import org.apache.tuweni.toml.internal.TomlParser.ArrayContext;
+import org.apache.tuweni.toml.internal.TomlParser.ArrayValuesContext;
+import org.apache.tuweni.toml.internal.TomlParser.BinIntContext;
+import org.apache.tuweni.toml.internal.TomlParser.DecIntContext;
+import org.apache.tuweni.toml.internal.TomlParser.FalseBoolContext;
+import org.apache.tuweni.toml.internal.TomlParser.HexIntContext;
+import org.apache.tuweni.toml.internal.TomlParser.InlineTableContext;
+import org.apache.tuweni.toml.internal.TomlParser.InlineTableValuesContext;
+import org.apache.tuweni.toml.internal.TomlParser.LocalDateContext;
+import org.apache.tuweni.toml.internal.TomlParser.LocalDateTimeContext;
+import org.apache.tuweni.toml.internal.TomlParser.LocalTimeContext;
+import org.apache.tuweni.toml.internal.TomlParser.OctIntContext;
+import org.apache.tuweni.toml.internal.TomlParser.OffsetDateTimeContext;
+import org.apache.tuweni.toml.internal.TomlParser.RegularFloatContext;
+import org.apache.tuweni.toml.internal.TomlParser.RegularFloatInfContext;
+import org.apache.tuweni.toml.internal.TomlParser.RegularFloatNaNContext;
+import org.apache.tuweni.toml.internal.TomlParser.StringContext;
+import org.apache.tuweni.toml.internal.TomlParser.TrueBoolContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
diff --git a/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java b/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java
index 2725439..882ee1f 100644
--- a/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java
+++ b/toml/src/main/java/net/consensys/cava/toml/ZoneOffsetVisitor.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import net.consensys.cava.toml.internal.TomlParser.HourOffsetContext;
-import net.consensys.cava.toml.internal.TomlParser.MinuteOffsetContext;
-import net.consensys.cava.toml.internal.TomlParserBaseVisitor;
+import org.apache.tuweni.toml.internal.TomlParser.HourOffsetContext;
+import org.apache.tuweni.toml.internal.TomlParser.MinuteOffsetContext;
+import org.apache.tuweni.toml.internal.TomlParserBaseVisitor;
 
 import java.time.DateTimeException;
 import java.time.ZoneOffset;
diff --git a/toml/src/main/java/net/consensys/cava/toml/package-info.java b/toml/src/main/java/net/consensys/cava/toml/package-info.java
index c447812..cf51f82 100644
--- a/toml/src/main/java/net/consensys/cava/toml/package-info.java
+++ b/toml/src/main/java/net/consensys/cava/toml/package-info.java
@@ -5,9 +5,9 @@
  * <a href="https://github.com/toml-lang/toml/">https://github.com/toml-lang/toml/</a>.
  * <p>
  * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
- * 'net.consensys.cava:cava-toml' (cava-toml.jar).
+ * 'org.apache.tuweni:cava-toml' (cava-toml.jar).
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java b/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java
index ee120eb..a8c4726 100644
--- a/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java
+++ b/toml/src/test/java/net/consensys/cava/toml/MutableTomlArrayTest.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import static net.consensys.cava.toml.TomlPosition.positionAt;
+import static org.apache.tuweni.toml.TomlPosition.positionAt;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
diff --git a/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java b/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java
index 3012a70..e99908c 100644
--- a/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java
+++ b/toml/src/test/java/net/consensys/cava/toml/MutableTomlTableTest.java
@@ -10,9 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
-import static net.consensys.cava.toml.TomlPosition.positionAt;
+import static org.apache.tuweni.toml.TomlPosition.positionAt;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
diff --git a/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java b/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java
index 56b43a9..2150abf 100644
--- a/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java
+++ b/toml/src/test/java/net/consensys/cava/toml/TokenNameTest.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import net.consensys.cava.toml.internal.TomlLexer;
+import org.apache.tuweni.toml.internal.TomlLexer;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/toml/src/test/java/net/consensys/cava/toml/TomlTest.java b/toml/src/test/java/net/consensys/cava/toml/TomlTest.java
index 0ebe81c..a240af3 100644
--- a/toml/src/test/java/net/consensys/cava/toml/TomlTest.java
+++ b/toml/src/test/java/net/consensys/cava/toml/TomlTest.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.toml;
+package org.apache.tuweni.toml;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java
index 7ad087a..f5720d2 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt256Value.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
 
 import java.math.BigInteger;
 import java.util.function.Function;
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java
index 7972dbf..ff27cde 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt384Value.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes48;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes48;
 
 import java.math.BigInteger;
 import java.util.function.Function;
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java
index 37c5664..39afc45 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/BaseUInt64Value.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import static java.util.Objects.requireNonNull;
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.math.BigInteger;
 import java.util.function.Function;
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java
index f8d008a..476c0fd 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
-import net.consensys.cava.bytes.MutableBytes;
-import net.consensys.cava.bytes.MutableBytes32;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
+import org.apache.tuweni.bytes.MutableBytes;
+import org.apache.tuweni.bytes.MutableBytes32;
 
 import java.math.BigInteger;
 import java.util.Arrays;
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java
index 78710d1..10800f5 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256Domain.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import com.google.common.collect.DiscreteDomain;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java
index 1a2f7a7..cf1bad0 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256Value.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes32;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes32;
 
 import java.math.BigInteger;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java
index bea5b82..47f88b3 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256ValueDomain.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import java.util.function.Function;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java
index 1a2a0d5..2173390 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt256s.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 /** Static utility methods on UInt256 values. */
 public final class UInt256s {
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java
index 1909fea..62b0983 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384.java
@@ -10,14 +10,14 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes48;
-import net.consensys.cava.bytes.MutableBytes;
-import net.consensys.cava.bytes.MutableBytes48;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes48;
+import org.apache.tuweni.bytes.MutableBytes;
+import org.apache.tuweni.bytes.MutableBytes48;
 
 import java.math.BigInteger;
 import java.util.Arrays;
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java
index 872ae14..5c2287f 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384Domain.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import com.google.common.collect.DiscreteDomain;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java
index dcc9da3..b0b74a8 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384Value.java
@@ -10,11 +10,11 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.Bytes48;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes48;
 
 import java.math.BigInteger;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java
index 217f36c..a5fb1bb 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384ValueDomain.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import java.util.function.Function;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java
index 6d4788e..828ce45 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt384s.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 /** Static utility methods on UInt384 values. */
 public final class UInt384s {
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java
index 78d58c3..9577e08 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.MutableBytes;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.MutableBytes;
 
 import java.math.BigInteger;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java
index cbf8fc1..6734fc6 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64Domain.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import com.google.common.collect.DiscreteDomain;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java
index e9e5551..d8b71e9 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64Value.java
@@ -10,10 +10,10 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 
-import net.consensys.cava.bytes.Bytes;
+import org.apache.tuweni.bytes.Bytes;
 
 import java.math.BigInteger;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java
index f3f9d22..3025494 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64ValueDomain.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import java.util.function.Function;
 
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java b/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java
index 18e19e8..b1648e1 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/UInt64s.java
@@ -10,7 +10,7 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 /** Static utility methods on UInt64 values. */
 public final class UInt64s {
diff --git a/units/src/main/java/net/consensys/cava/units/bigints/package-info.java b/units/src/main/java/net/consensys/cava/units/bigints/package-info.java
index 5350331..cd26027 100644
--- a/units/src/main/java/net/consensys/cava/units/bigints/package-info.java
+++ b/units/src/main/java/net/consensys/cava/units/bigints/package-info.java
@@ -2,6 +2,6 @@
  * Classes and utilities for working with 256 bit integers.
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.units.bigints;
+package org.apache.tuweni.units.bigints;
 
 import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java b/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java
index fa06a3b..3c6d335 100644
--- a/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java
+++ b/units/src/main/java/net/consensys/cava/units/ethereum/Gas.java
@@ -10,13 +10,13 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.ethereum;
+package org.apache.tuweni.units.ethereum;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.bytes.Bytes;
-import net.consensys.cava.bytes.MutableBytes;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.bytes.MutableBytes;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 
diff --git a/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java b/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java
index 1beb12f..03331ed 100644
--- a/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java
+++ b/units/src/main/java/net/consensys/cava/units/ethereum/Wei.java
@@ -10,12 +10,12 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package net.consensys.cava.units.ethereum;
+package org.apache.tuweni.units.ethereum;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import net.consensys.cava.units.bigints.BaseUInt256Value;
-import net.consensys.cava.units.bigints.UInt256;
+import org.apache.tuweni.units.bigints.BaseUInt256Value;
+import org.apache.tuweni.units.bigints.UInt256;
 
 import java.math.BigInteger;
 
diff --git a/units/src/main/java/net/consensys/cava/units/ethereum/package-info.java b/units/src/main/java/net/consensys/cava/units/ethereum/package-info.java
index 0b2e044..1853a65 100644
--- a/units/src/main/java/net/consensys/cava/units/ethereum/package-info.java
+++ b/units/src/main/java/net/consensys/cava/units/ethereum/package-info.java
@@ -2,6 +2,6 @@
  * Classes and utilities for working with Ethereum units.
  */
 @ParametersAreNonnullByDefault
-package net.consensys.cava.units.ethereum;
+package org.apache.tuweni.units.ethereum;
... 155 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 23/32: Merge pull request #4 from apache/jrhea-patch-1

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 3b609fb6b31e64fea9287c8ab4c6c6751bd5ee5a
Merge: b7588a8 e425f38
Author: Jonny Rhea <jo...@gmail.com>
AuthorDate: Tue Apr 16 18:18:21 2019 -0500

    Merge pull request #4 from apache/jrhea-patch-1
    
    Update README.md

 README.md | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 24/32: Add ability to push snapshots to nexus

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit d04378ae5ab70ed0669f119ecb85fb8bf14c45bb
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Wed Apr 17 15:32:51 2019 +0200

    Add ability to push snapshots to nexus
---
 build.gradle | 89 ++++++++++++++++++------------------------------------------
 1 file changed, 27 insertions(+), 62 deletions(-)

diff --git a/build.gradle b/build.gradle
index 9a7dac5..af2caa8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,19 +2,18 @@ import java.util.regex.Pattern
 import net.ltgt.gradle.errorprone.CheckSeverity
 
 buildscript {
-  repositories {
-    maven { url 'https://consensys.bintray.com/consensys/' }
-    jcenter()
+  repositories { jcenter() // jcenter
   }
 }
+
 plugins {
   id 'com.diffplug.gradle.spotless' version '3.16.0'
   id 'net.ltgt.errorprone' version '0.6'
   id 'io.spring.dependency-management' version '1.0.6.RELEASE'
   id 'com.github.hierynomus.license' version '0.15.0'
-  id 'com.jfrog.bintray' version '1.8.3'
   id 'org.jetbrains.kotlin.jvm' version '1.3.20'
   id 'org.jetbrains.dokka' version '0.9.17'
+  id 'maven-publish'
 }
 
 description = 'A set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages'
@@ -41,12 +40,7 @@ static String buildTag() {
   if (System.getenv('BUILD_RELEASE') == 'true') {
     return ''
   }
-  if (System.getenv('CIRCLECI')) {
-    def buildNumber = System.getenv('CIRCLE_SHA1').take(4).toUpperCase() +
-      String.format('%02X', System.getenv('CIRCLE_BUILD_NUM').toInteger() % 256, 16)
-    return '-' + buildNumber + '-snapshot'
-  }
-  return '-dev'
+  return '-SNAPSHOT'
 }
 
 
@@ -128,15 +122,6 @@ subprojects {
 
 
 //////
-// Top-level target for deploy (bintrayUpload depends on it)
-
-task deploy() {}
-
-configurations.archives.artifacts.removeAll { PublishArtifact publishArtifact ->
-  (publishArtifact.type == 'jar' && publishArtifact.name == 'tuweni')}
-
-
-//////
 // Project defaults
 
 allprojects {
@@ -145,7 +130,6 @@ allprojects {
   apply plugin: 'io.spring.dependency-management'
   apply plugin: 'jacoco'
   apply plugin: 'net.ltgt.errorprone'
-  apply plugin: 'com.jfrog.bintray'
   apply plugin: 'maven-publish'
   apply plugin: 'org.jetbrains.dokka'
   apply plugin: 'signing'
@@ -273,6 +257,10 @@ allprojects {
       attributes('Implementation-Title': baseName,
       'Implementation-Version': project.version)
     }
+    from(project.projectDir) {
+      include 'LICENSE'
+      into 'META-INF'
+    }
   }
 
   if (project.name != 'eth-reference-tests') {
@@ -291,6 +279,17 @@ allprojects {
     }
 
     publishing {
+      repositories {
+        maven {
+          credentials {
+            username System.getenv('NEXUS_USER')
+            password System.getenv('NEXUS_PASSWORD')
+          }
+          def releasesRepoUrl = "https://repository.apache.org/service/local/staging/deploy/maven2"
+          def snapshotsRepoUrl = "https://repository.apache.org/content/repositories/snapshots"
+          url = buildVersion.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
+        }
+      }
       publications {
         MavenDeployment(MavenPublication) { publication ->
           if (project != rootProject) {
@@ -319,22 +318,24 @@ allprojects {
             }
             developers {
               developer {
-                name = 'Chris Leishman'
-                email = 'chris@leishman.org'
-                organization = 'Apache'
-                organizationUrl = 'https://tuweni.apache.org'
-              }
-              developer {
                 name = 'Antoine Toulme'
                 email = 'antoine@lunar-ocean.com'
                 organization = 'Apache'
                 organizationUrl = 'https://tuweni.apache.org'
               }
             }
+            issueManagement {
+              system = "jira"
+              url = "https://issues.apache.org/jira/projects/TUWENI"
+            }
           }
+
           pom.withXml {
             // use inline versions rather than pom dependency management
             asNode().remove(asNode().dependencyManagement[0])
+            if (asNode().dependencies[0]) {
+              asNode().remove(asNode().dependencies[0])
+            }
 
             def dependenciesNode = asNode().appendNode('dependencies')
             def addDependencyNode = { dep, optional ->
@@ -416,42 +417,6 @@ allprojects {
       }
       tasks.publishMavenDeploymentPublicationToMavenLocal { dependsOn project.tasks.signArchives }
     }
-
-    def artifactIdMatcher = Pattern.compile("(.*)-\\d.*")
-    bintray {
-      user = System.getenv('BINTRAY_USER')
-      key = System.getenv('BINTRAY_KEY')
-      publications = ['MavenDeployment']
-      filesSpec {
-        project.extensions.getByType(PublishingExtension).publications.all { publication ->
-          publication.getArtifacts().all {
-            def ascFile = new File(it.file.getParentFile(), it.file.getName() + '.asc')
-            if (ascFile.exists()) {
-              def matcher = artifactIdMatcher.matcher(it.file.getName())
-              matcher.find()
-              def artifactId = matcher.group(1)
-              from ascFile.getAbsolutePath()
-              into publication.groupId.replaceAll('\\.', '/') + '/' + artifactId + '/' + publication.version + '/'
-            }
-          }
-        }
-      }
-      dryRun = !(System.getenv('BINTRAY_DEPLOY') == 'true')
-      publish = true
-      pkg {
-        repo = 'consensys'
-        name = 'tuweni'
-        userOrg = 'consensys'
-        licenses = ['Apache-2.0']
-        version {
-          name = project.version
-          desc = 'Tuweni distribution'
-          released = new Date()
-          vcsTag = project.version
-        }
-      }
-    }
-    deploy.dependsOn bintrayUpload
   }
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 15/32: Add KEYS file. Add key for toulmean@apache.org

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 0b4bc93a238556f8a598955106a99e120df9cdcc
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Wed Apr 3 20:49:51 2019 -0700

    Add KEYS file. Add key for toulmean@apache.org
---
 KEYS | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/KEYS b/KEYS
new file mode 100644
index 0000000..af7473b
--- /dev/null
+++ b/KEYS
@@ -0,0 +1,46 @@
+This file contains the PGP keys of various developers.
+
+Users: pgp < KEYS
+       gpg --import KEYS
+Developers:
+        pgp -kxa <your name> and append it to this file.
+        (pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
+        (gpg --list-sigs <your name>
+             && gpg --armor --export <your name>) >> this file.
+
+pub   2048R/5E469BCB 2016-03-10
+uid       [ultimate] Antoine Toulme <to...@apache.org>
+sig 3        5E469BCB 2016-03-10  Antoine Toulme <to...@apache.org>
+sub   2048R/C380C925 2016-03-10
+sig          5E469BCB 2016-03-10  Antoine Toulme <to...@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: GPGTools - https://gpgtools.org
+
+mQENBFbhCrABCADBZJYY7g949txfE5JLHdp7AUE6Dd0g2pnYUjUHwjhW/oswym4U
+AA9QIWORZcJx9C3DnilUwVtJS5TGc/RrB7P0EDQ499kKP5gdd+aFNiiVta+CXT0u
+ic7KKYDnIlWWB/cxZCHdeGoLsd3tzY1D+Zt+asUP1Vaf8zUP1DGERJdBZFEs8Lpq
+5A9rD2KInc3XYnEebJa3zcxNTN1EqHHnGAIf1oOZKeWvBQVeYUw9JyA1qvNBrbXW
+uLjj4I3EJUzJ4BYjqbxDQmKlPVyxdaUfeuBAwZm6k9xrYRZLQkMNT2TfR4uWeVHY
+VwKMZKkJs4ZLtb32K3SzR3zUN1dkwHcsSFkFABEBAAG0JEFudG9pbmUgVG91bG1l
+IDx0b3VsbWVhbkBhcGFjaGUub3JnPokBNwQTAQoAIQUCVuEKsAIbAwULCQgHAwUV
+CgkICwUWAgMBAAIeAQIXgAAKCRABO3qJXkaby1frB/97UCrhW1+t+pPQ4ZeAzsLO
+DdFxEHUBKsh/08K7gXqGt+C8sMWUL84yzrXJYMT4U3AI+JndSruxuFKa/k3xTp03
+UkWWu7wG1OBp5LX2GXOZrtcIqYSRj0OIoiMxQalW83ThCK1bXEhNYM8AWvIhYmE+
+C07Aev40zg1QZoKzqzxYFNdt6eerjVU+DUz5JQY/h51bsDF3hGhr1ZTSImy2whgG
+fD6V0sm8OeVlqkr2JLMpzK07w71HD4x/OxConRZO6HJiQH96JJvrJb7sgnEH+yTq
+rxLUviNr17NI7Cz4yQ0UM2RQlOWRwNaiS2yyqEFldfSZL6iXHvWsLzsCTD4VPdZt
+uQENBFbhCrABCADHlgW/e2Y+EkHrM4/HSr0gi9UZdnmhCrtk6hEDdU13BLAqoSpR
+YhUEa24m9r3BA6KpiIUVe3SJqKOdKYMGsUi9nUX+x6I8qGCxy+9YaTxiJxEZq41r
+go9z8meNJRfzPKOmCvN8htXIXMNsfk41j6FuHpAkVixjPquGWhbgGatjXcsejJKJ
++sYKmeVmOcW+OZ6dm+HKJAa63M5OAheJRn/MzvFHmlLU7GUT63nLJ3BypETT6s6G
+kD7sB0hfuiP9rX3z0jYpoKCZ6NLe0kCUknIG/eGvKTAliQnTFGvgU8hXWyJtCCq0
+2TdX1pTY5RbfDjiR7uUwbsI+LHyALj+wqI69ABEBAAGJAR8EGAEKAAkFAlbhCrAC
+GwwACgkQATt6iV5Gm8s0ZwgAiuBAkjWKlg5WXFc1NlVn4lS7+IjJRL0qOwgHVaFS
+BF28XPN4NTC2yxDLWYi5A83/2lXeKpoS+mzyH2adWHf167w0jVul0Qy/SxS6YyEk
+NIUCirFjt/TQujlB47/a3UxUe0txxYj3e4FADe0gs1XEbpKzv2mKJgNK/GyM1+GA
+I7UuE4Y9W1PONDTweeUC9dYfVTQepmvatYsljmE5aAp7bCwdqp3tYYCgmHEQL5GM
+HSqfJZu8rAo7mHRsd56Q3RQSXft6gWlclf2Fd4BX3lFVwJPQLJ2J+FoUWUN3Kvri
+SytM5SUx7NT8IMCYqRKwKc3tNhYstquDgTe2VOgkhuxUAg==
+=fVHy
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 01/32: Initial code load: https://github.com/ConsenSys/cava/archive/v1.0-asf.tar.gz

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 73e4230d73d448acbd115e99e121f7c760c6156e
Author: Jim Jagielski <ji...@gmail.com>
AuthorDate: Tue Apr 2 15:22:24 2019 -0400

    Initial code load: https://github.com/ConsenSys/cava/archive/v1.0-asf.tar.gz
---
 .circleci/config.yml                               |  144 +
 .editorconfig                                      |    5 +
 .gitattributes                                     |    3 +
 .gitignore                                         |   30 +
 .gitmodules                                        |    6 +
 .idea/codeStyles/Project.xml                       |   16 +
 .idea/codeStyles/codeStyleConfig.xml               |    5 +
 CONTRIBUTING.md                                    |   61 +
 LICENSE                                            |  201 ++
 PACKAGES.md                                        |  137 +
 README.md                                          |   53 +
 build.gradle                                       |  528 ++++
 bytes/build.gradle                                 |   12 +
 .../net/consensys/cava/bytes/AbstractBytes.java    |   67 +
 .../consensys/cava/bytes/ArrayWrappingBytes.java   |  194 ++
 .../consensys/cava/bytes/ArrayWrappingBytes32.java |   56 +
 .../consensys/cava/bytes/ArrayWrappingBytes48.java |   56 +
 .../consensys/cava/bytes/BufferWrappingBytes.java  |  109 +
 .../consensys/cava/bytes/ByteBufWrappingBytes.java |  113 +
 .../cava/bytes/ByteBufferWrappingBytes.java        |  129 +
 .../main/java/net/consensys/cava/bytes/Bytes.java  | 1466 ++++++++++
 .../java/net/consensys/cava/bytes/Bytes32.java     |  282 ++
 .../java/net/consensys/cava/bytes/Bytes48.java     |  283 ++
 .../java/net/consensys/cava/bytes/BytesValues.java |   89 +
 .../consensys/cava/bytes/ConcatenatedBytes.java    |  213 ++
 .../consensys/cava/bytes/DelegatingBytes32.java    |  240 ++
 .../consensys/cava/bytes/DelegatingBytes48.java    |  240 ++
 .../cava/bytes/DelegatingMutableBytes32.java       |  280 ++
 .../cava/bytes/DelegatingMutableBytes48.java       |  280 ++
 .../cava/bytes/MutableArrayWrappingBytes.java      |   92 +
 .../cava/bytes/MutableArrayWrappingBytes32.java    |   34 +
 .../cava/bytes/MutableArrayWrappingBytes48.java    |   34 +
 .../cava/bytes/MutableBufferWrappingBytes.java     |   76 +
 .../cava/bytes/MutableByteBufWrappingBytes.java    |   81 +
 .../cava/bytes/MutableByteBufferWrappingBytes.java |   70 +
 .../net/consensys/cava/bytes/MutableBytes.java     |  363 +++
 .../net/consensys/cava/bytes/MutableBytes32.java   |  110 +
 .../net/consensys/cava/bytes/MutableBytes48.java   |  110 +
 .../net/consensys/cava/bytes/package-info.java     |   11 +
 .../net/consensys/cava/bytes/BufferBytesTest.java  |   38 +
 .../net/consensys/cava/bytes/ByteBufBytesTest.java |   38 +
 .../consensys/cava/bytes/ByteBufferBytesTest.java  |   38 +
 .../java/net/consensys/cava/bytes/Bytes32Test.java |   69 +
 .../java/net/consensys/cava/bytes/Bytes48Test.java |   69 +
 .../java/net/consensys/cava/bytes/BytesTest.java   |  465 +++
 .../net/consensys/cava/bytes/CommonBytesTests.java |  659 +++++
 .../cava/bytes/ConcatenatedBytesTest.java          |   99 +
 concurrent-coroutines/build.gradle                 |   11 +
 .../cava/concurrent/coroutines/AsyncCompletion.kt  |  194 ++
 .../cava/concurrent/coroutines/AsyncResult.kt      |  179 ++
 .../cava/concurrent/coroutines/CoroutineLatch.kt   |  101 +
 .../cava/concurrent/coroutines/Retryable.kt        |  154 +
 .../concurrent/coroutines/CoroutineLatchTest.kt    |  114 +
 .../cava/concurrent/coroutines/RetryableTest.kt    |  105 +
 concurrent/build.gradle                            |   12 +
 .../consensys/cava/concurrent/AsyncCompletion.java |  478 +++
 .../net/consensys/cava/concurrent/AsyncResult.java |  517 ++++
 .../consensys/cava/concurrent/AtomicSlotMap.java   |  253 ++
 .../concurrent/CompletableAsyncCompletion.java     |   36 +
 .../cava/concurrent/CompletableAsyncResult.java    |   40 +
 .../DefaultCompletableAsyncCompletion.java         |  374 +++
 .../concurrent/DefaultCompletableAsyncResult.java  |  409 +++
 .../net/consensys/cava/concurrent/ExpiringMap.java |  458 +++
 .../net/consensys/cava/concurrent/ExpiringSet.java |  277 ++
 .../consensys/cava/concurrent/package-info.java    |   11 +
 .../cava/concurrent/AtomicSlotMapTest.java         |  130 +
 .../DefaultCompletableAsyncCompletionTest.java     |  291 ++
 .../DefaultCompletableAsyncResultTest.java         |  199 ++
 .../consensys/cava/concurrent/ExpiringMapTest.java |  144 +
 .../consensys/cava/concurrent/ExpiringSetTest.java |  119 +
 config/build.gradle                                |   11 +
 .../net/consensys/cava/config/Configuration.java   |  371 +++
 .../consensys/cava/config/ConfigurationError.java  |   83 +
 .../consensys/cava/config/ConfigurationErrors.java |   78 +
 .../cava/config/ConfigurationValidator.java        |   34 +
 .../consensys/cava/config/DocumentPosition.java    |   90 +
 .../consensys/cava/config/EmptyConfiguration.java  |  148 +
 .../InvalidConfigurationPropertyTypeException.java |   54 +
 .../config/NoConfigurationPropertyException.java   |   27 +
 .../consensys/cava/config/PropertyValidator.java   |  203 ++
 .../consensys/cava/config/PropertyValidators.java  |   27 +
 .../java/net/consensys/cava/config/Schema.java     |  410 +++
 .../net/consensys/cava/config/SchemaBuilder.java   |  673 +++++
 .../cava/config/TomlBackedConfiguration.java       |  302 ++
 .../net/consensys/cava/config/TomlSerializer.java  |  182 ++
 .../net/consensys/cava/config/package-info.java    |   10 +
 .../cava/config/PropertyValidatorTest.java         |   84 +
 .../consensys/cava/config/SchemaBuilderTest.java   |   78 +
 .../cava/config/TomlBackedConfigurationTest.java   |  567 ++++
 crypto/build.gradle                                |   22 +
 .../main/java/net/consensys/cava/crypto/Hash.java  |  245 ++
 .../InvalidSEC256K1SecretKeyStoreException.java    |   19 +
 .../java/net/consensys/cava/crypto/SECP256K1.java  |  945 ++++++
 .../consensys/cava/crypto/mikuli/AtePairing.java   |   33 +
 .../net/consensys/cava/crypto/mikuli/BLS12381.java |  136 +
 .../net/consensys/cava/crypto/mikuli/G1Point.java  |   99 +
 .../net/consensys/cava/crypto/mikuli/G2Point.java  |   97 +
 .../net/consensys/cava/crypto/mikuli/GTPoint.java  |   53 +
 .../net/consensys/cava/crypto/mikuli/Group.java    |   23 +
 .../net/consensys/cava/crypto/mikuli/KeyPair.java  |   58 +
 .../consensys/cava/crypto/mikuli/PublicKey.java    |  114 +
 .../net/consensys/cava/crypto/mikuli/Scalar.java   |   48 +
 .../consensys/cava/crypto/mikuli/SecretKey.java    |   78 +
 .../consensys/cava/crypto/mikuli/Signature.java    |  107 +
 .../cava/crypto/mikuli/SignatureAndPublicKey.java  |   71 +
 .../consensys/cava/crypto/mikuli/package-info.java |   11 +
 .../net/consensys/cava/crypto/package-info.java    |    8 +
 .../consensys/cava/crypto/sodium/AES256GCM.java    | 1034 +++++++
 .../consensys/cava/crypto/sodium/Allocated.java    |  134 +
 .../net/consensys/cava/crypto/sodium/Auth.java     |  243 ++
 .../java/net/consensys/cava/crypto/sodium/Box.java | 1217 ++++++++
 .../consensys/cava/crypto/sodium/Concatenate.java  |  148 +
 .../sodium/DefaultDetachedEncryptionResult.java    |   46 +
 .../crypto/sodium/DetachedEncryptionResult.java    |   41 +
 .../consensys/cava/crypto/sodium/DiffieHelman.java |  464 +++
 .../consensys/cava/crypto/sodium/GenericHash.java  |  215 ++
 .../consensys/cava/crypto/sodium/HMACSHA256.java   |  199 ++
 .../consensys/cava/crypto/sodium/HMACSHA512.java   |  199 ++
 .../cava/crypto/sodium/HMACSHA512256.java          |  199 ++
 .../cava/crypto/sodium/KeyDerivation.java          |  309 ++
 .../consensys/cava/crypto/sodium/KeyExchange.java  |  705 +++++
 .../consensys/cava/crypto/sodium/LibSodium.java    | 2618 +++++++++++++++++
 .../consensys/cava/crypto/sodium/PasswordHash.java | 1022 +++++++
 .../consensys/cava/crypto/sodium/SHA256Hash.java   |  239 ++
 .../consensys/cava/crypto/sodium/SecretBox.java    | 1787 ++++++++++++
 .../cava/crypto/sodium/SecretDecryptionStream.java |   44 +
 .../cava/crypto/sodium/SecretEncryptionStream.java |   91 +
 .../consensys/cava/crypto/sodium/Signature.java    |  671 +++++
 .../net/consensys/cava/crypto/sodium/Sodium.java   | 3030 ++++++++++++++++++++
 .../cava/crypto/sodium/SodiumException.java        |   26 +
 .../cava/crypto/sodium/SodiumVersion.java          |   59 +
 .../cava/crypto/sodium/XChaCha20Poly1305.java      |  908 ++++++
 .../consensys/cava/crypto/sodium/package-info.java |   19 +
 .../java/net/consensys/cava/crypto/HashTest.java   |  118 +
 .../net/consensys/cava/crypto/SECP256K1Test.java   |  349 +++
 .../cava/crypto/mikuli/SignatureTest.java          |  121 +
 .../cava/crypto/sodium/AES256GCMTest.java          |  106 +
 .../cava/crypto/sodium/AllocatedTest.java          |   47 +
 .../net/consensys/cava/crypto/sodium/AuthTest.java |   42 +
 .../net/consensys/cava/crypto/sodium/BoxTest.java  |  194 ++
 .../cava/crypto/sodium/ConcatenateTest.java        |   42 +
 .../cava/crypto/sodium/DiffieHelmanTest.java       |   38 +
 .../cava/crypto/sodium/GenericHashTest.java        |   37 +
 .../cava/crypto/sodium/HMACSHA256Test.java         |   54 +
 .../cava/crypto/sodium/HMACSHA512256Test.java      |   54 +
 .../cava/crypto/sodium/HMACSHA512Test.java         |   54 +
 .../cava/crypto/sodium/KeyDerivationTest.java      |   43 +
 .../cava/crypto/sodium/PasswordHashTest.java       |  118 +
 .../cava/crypto/sodium/SHA256HashTest.java         |   37 +
 .../cava/crypto/sodium/SecretBoxTest.java          |  200 ++
 .../cava/crypto/sodium/SignatureTest.java          |   54 +
 .../consensys/cava/crypto/sodium/SodiumTest.java   |   89 +
 .../cava/crypto/sodium/XChaCha20Poly1305Test.java  |   94 +
 dependency-versions.gradle                         |   59 +
 devp2p/build.gradle                                |   22 +
 .../consensys/cava/devp2p/AtomicLongProperty.kt    |   34 +
 .../net/consensys/cava/devp2p/DiscoveryService.kt  |  867 ++++++
 .../kotlin/net/consensys/cava/devp2p/Endpoint.kt   |  123 +
 .../kotlin/net/consensys/cava/devp2p/EnodeUri.kt   |   62 +
 .../main/kotlin/net/consensys/cava/devp2p/Node.kt  |   41 +
 .../kotlin/net/consensys/cava/devp2p/Packet.kt     |  364 +++
 .../kotlin/net/consensys/cava/devp2p/PacketType.kt |   80 +
 .../main/kotlin/net/consensys/cava/devp2p/Peer.kt  |   88 +
 .../net/consensys/cava/devp2p/PeerRepository.kt    |  191 ++
 .../net/consensys/cava/devp2p/PeerRoutingTable.kt  |   95 +
 .../cava/devp2p/DiscoveryServiceJavaTest.java      |   71 +
 .../consensys/cava/devp2p/DiscoveryServiceTest.kt  |  282 ++
 .../net/consensys/cava/devp2p/EndpointTest.kt      |   95 +
 .../cava/devp2p/EphemeralPeerRepositoryTest.kt     |  251 ++
 .../consensys/cava/devp2p/FindNodePacketTest.kt    |   62 +
 .../consensys/cava/devp2p/NeighborsPacketTest.kt   |   81 +
 .../net/consensys/cava/devp2p/PingPacketTest.kt    |  102 +
 .../net/consensys/cava/devp2p/PongPacketTest.kt    |   65 +
 eth-reference-tests/build.gradle                   |   17 +
 .../cava/eth/reference/BlockRLPTestSuite.java      |  144 +
 .../cava/eth/reference/MerkleTrieTestSuite.java    |   99 +
 .../cava/eth/reference/RLPReferenceTestSuite.java  |  137 +
 .../consensys/cava/eth/reference/SSZTestSuite.java |  178 ++
 .../cava/eth/reference/TransactionTestSuite.java   |  144 +
 eth-repository/build.gradle                        |   16 +
 .../cava/eth/repository/BlockHeaderFields.kt       |   37 +
 .../cava/eth/repository/BlockchainIndex.kt         |  634 ++++
 .../cava/eth/repository/BlockchainRepository.kt    |  348 +++
 .../eth/repository/TransactionReceiptFields.kt     |   35 +
 .../cava/eth/repository/BlockchainIndexTest.kt     |  342 +++
 .../eth/repository/BlockchainRepositoryTest.kt     |  477 +++
 eth/build.gradle                                   |   15 +
 .../main/java/net/consensys/cava/eth/Address.java  |   99 +
 .../main/java/net/consensys/cava/eth/Block.java    |  134 +
 .../java/net/consensys/cava/eth/BlockBody.java     |  133 +
 .../java/net/consensys/cava/eth/BlockHeader.java   |  383 +++
 eth/src/main/java/net/consensys/cava/eth/Hash.java |  116 +
 eth/src/main/java/net/consensys/cava/eth/Log.java  |  118 +
 .../net/consensys/cava/eth/LogsBloomFilter.java    |  132 +
 .../java/net/consensys/cava/eth/Transaction.java   |  439 +++
 .../net/consensys/cava/eth/TransactionReceipt.java |  231 ++
 .../java/net/consensys/cava/eth/package-info.java  |   11 +
 .../java/net/consensys/cava/eth/BlockBodyTest.java |   46 +
 .../net/consensys/cava/eth/BlockHeaderTest.java    |   56 +
 .../java/net/consensys/cava/eth/BlockTest.java     |   47 +
 .../test/java/net/consensys/cava/eth/LogTest.java  |   37 +
 .../consensys/cava/eth/LogsBloomFilterTest.java    |   48 +
 .../consensys/cava/eth/TransactionReceiptTest.java |   63 +
 .../net/consensys/cava/eth/TransactionTest.java    |   79 +
 gradle.properties                                  |    1 +
 gradle/check-licenses.gradle                       |  156 +
 gradle/eclipse-java-consensys-style.xml            |  343 +++
 gradle/greclipse-gradle-consensys-style.properties |   51 +
 gradle/spotless.license.java                       |   12 +
 gradle/wrapper/gradle-wrapper.jar                  |  Bin 0 -> 56177 bytes
 gradle/wrapper/gradle-wrapper.properties           |    5 +
 gradlew                                            |  172 ++
 gradlew.bat                                        |   84 +
 io/build.gradle                                    |   14 +
 io/src/main/java/net/consensys/cava/io/Base64.java |   68 +
 .../java/net/consensys/cava/io/IOConsumer.java     |   30 +
 .../net/consensys/cava/io/NullOutputStream.java    |   24 +
 .../main/java/net/consensys/cava/io/Resources.java |  334 +++
 .../main/java/net/consensys/cava/io/Streams.java   |   75 +
 .../java/net/consensys/cava/io/file/Files.java     |  200 ++
 .../net/consensys/cava/io/file/package-info.java   |   11 +
 .../java/net/consensys/cava/io/package-info.java   |   11 +
 .../java/net/consensys/cava/io/Base64Test.java     |   47 +
 .../java/net/consensys/cava/io/ResourcesTest.java  |   71 +
 .../java/net/consensys/cava/io/StreamsTest.java    |   34 +
 .../java/net/consensys/cava/io/file/FilesTest.java |   63 +
 .../io/file/resourceresolver/subdir/test3.yaml     |    0
 .../cava/io/file/resourceresolver/test1.txt        |    0
 .../cava/io/file/resourceresolver/test2.txt        |    0
 .../resources/net/consensys/cava/io/file/test.txt  |    3 +
 io/src/test/resources/resourceresolver-test.jar    |  Bin 0 -> 2446 bytes
 junit/build.gradle                                 |   18 +
 .../cava/junit/BouncyCastleExtension.java          |   31 +
 .../java/net/consensys/cava/junit/LuceneIndex.java |   26 +
 .../consensys/cava/junit/LuceneIndexWriter.java    |   26 +
 .../cava/junit/LuceneIndexWriterExtension.java     |   79 +
 .../java/net/consensys/cava/junit/RedisPort.java   |   27 +
 .../consensys/cava/junit/RedisServerExtension.java |  110 +
 .../net/consensys/cava/junit/TempDirectory.java    |   26 +
 .../cava/junit/TempDirectoryExtension.java         |   63 +
 .../net/consensys/cava/junit/VertxExtension.java   |   54 +
 .../net/consensys/cava/junit/VertxInstance.java    |   26 +
 .../net/consensys/cava/junit/package-info.java     |    8 +
 .../cava/junit/LuceneIndexWriterExtensionTest.java |   38 +
 .../cava/junit/RedisServerExtensionTest.java       |   38 +
 .../cava/junit/TempDirectoryExtensionTest.java     |   32 +
 kademlia/build.gradle                              |   12 +
 .../cava/kademlia/KademliaRoutingTable.kt          |  285 ++
 .../cava/kademlia/KademliaRoutingTableTest.kt      |  153 +
 .../cava/kademlia/LogarithmicDistanceTest.kt       |   51 +
 .../consensys/cava/kademlia/OrderedInsertTest.kt   |   54 +
 kv/build.gradle                                    |   34 +
 .../net/consensys/cava/kv/RedisBytesCodec.java     |   55 +
 .../java/net/consensys/cava/kv/package-info.java   |   11 +
 .../consensys/cava/kv/InfinispanKeyValueStore.kt   |   48 +
 .../kotlin/net/consensys/cava/kv/KeyValueStore.kt  |   91 +
 .../net/consensys/cava/kv/LevelDBKeyValueStore.kt  |   93 +
 .../net/consensys/cava/kv/MapDBKeyValueStore.kt    |   98 +
 .../net/consensys/cava/kv/MapKeyValueStore.kt      |   58 +
 .../net/consensys/cava/kv/RedisKeyValueStore.kt    |  111 +
 .../net/consensys/cava/kv/RocksDBKeyValueStore.kt  |  105 +
 .../net/consensys/cava/kv/SQLKeyValueStore.kt      |  113 +
 .../net/consensys/cava/kv/KeyValueStoreTest.java   |   74 +
 .../consensys/cava/kv/RedisKeyValueStoreTest.java  |   66 +
 .../net/consensys/cava/kv/KeyValueStoreSpec.kt     |  264 ++
 les/build.gradle                                   |   25 +
 .../net/consensys/cava/les/BlockBodiesMessage.kt   |   47 +
 .../net/consensys/cava/les/BlockHeadersMessage.kt  |   52 +
 .../consensys/cava/les/GetBlockBodiesMessage.kt    |   40 +
 .../consensys/cava/les/GetBlockHeadersMessage.kt   |   72 +
 .../net/consensys/cava/les/GetReceiptsMessage.kt   |   40 +
 .../kotlin/net/consensys/cava/les/LESPeerState.kt  |   32 +
 .../consensys/cava/les/LESSubProtocolHandler.kt    |  192 ++
 .../net/consensys/cava/les/LESSubprotocol.kt       |   83 +
 .../kotlin/net/consensys/cava/les/LightClient.kt   |   58 +
 .../net/consensys/cava/les/ReceiptsMessage.kt      |   51 +
 .../kotlin/net/consensys/cava/les/StatusMessage.kt |  162 ++
 .../cava/les/LESSubProtocolHandlerTest.kt          |  478 +++
 .../net/consensys/cava/les/LESSubprotocolTest.kt   |  101 +
 .../kotlin/net/consensys/cava/les/MessagesTest.kt  |  226 ++
 merkle-trie/build.gradle                           |   17 +
 .../net/consensys/cava/trie/CompactEncoding.java   |  131 +
 .../java/net/consensys/cava/trie/package-info.java |   14 +
 .../kotlin/net/consensys/cava/trie/BranchNode.kt   |  145 +
 .../net/consensys/cava/trie/DefaultNodeFactory.kt  |   56 +
 .../net/consensys/cava/trie/ExtensionNode.kt       |   78 +
 .../kotlin/net/consensys/cava/trie/GetVisitor.kt   |   55 +
 .../kotlin/net/consensys/cava/trie/LeafNode.kt     |   65 +
 .../net/consensys/cava/trie/MerklePatriciaTrie.kt  |  112 +
 .../net/consensys/cava/trie/MerkleStorage.kt       |   73 +
 .../consensys/cava/trie/MerkleStorageException.kt  |   37 +
 .../kotlin/net/consensys/cava/trie/MerkleTrie.kt   |  142 +
 .../main/kotlin/net/consensys/cava/trie/Node.kt    |   33 +
 .../kotlin/net/consensys/cava/trie/NodeFactory.kt  |   26 +
 .../kotlin/net/consensys/cava/trie/NodeVisitor.kt  |   26 +
 .../kotlin/net/consensys/cava/trie/NullNode.kt     |   44 +
 .../kotlin/net/consensys/cava/trie/PutVisitor.kt   |   92 +
 .../net/consensys/cava/trie/RemoveVisitor.kt       |   58 +
 .../cava/trie/StoredMerklePatriciaTrie.kt          |  194 ++
 .../kotlin/net/consensys/cava/trie/StoredNode.kt   |  112 +
 .../net/consensys/cava/trie/StoredNodeFactory.kt   |  203 ++
 .../consensys/cava/trie/CompactEncodingTest.java   |   52 +
 .../cava/trie/MerklePatriciaTrieJavaTest.java      |  246 ++
 .../trie/MerklePatriciaTriePerformanceTest.java    |  103 +
 .../trie/StoredMerklePatriciaTrieJavaTest.java     |  305 ++
 .../cava/trie/MerklePatriciaTrieKotlinTest.kt      |  265 ++
 .../trie/StoredMerklePatriciaTrieKotlinTest.kt     |  324 +++
 net-coroutines/build.gradle                        |   14 +
 .../cava/net/coroutines/CoroutineByteChannel.kt    |  311 ++
 .../cava/net/coroutines/CoroutineChannelGroup.kt   |  205 ++
 .../net/coroutines/CoroutineDatagramChannel.kt     |  180 ++
 .../cava/net/coroutines/CoroutineNetworkChannel.kt |  156 +
 .../cava/net/coroutines/CoroutineSelector.kt       |  466 +++
 .../net/coroutines/CoroutineServerSocketChannel.kt |  111 +
 .../cava/net/coroutines/CoroutineSocketChannel.kt  |  125 +
 .../cava/net/coroutines/SelectorTest.java          |  169 ++
 .../net/coroutines/CoroutineChannelGroupTest.kt    |  103 +
 .../net/coroutines/CoroutineDatagramChannelTest.kt |   92 +
 .../cava/net/coroutines/CoroutineSelectorTest.kt   |  233 ++
 .../net/coroutines/CoroutineSocketChannelTest.kt   |  137 +
 net/build.gradle                                   |   21 +
 .../java/net/consensys/cava/net/package-info.java  |    8 +
 .../net/tls/ClientFingerprintTrustManager.java     |  132 +
 .../net/tls/DelegatingTrustManagerFactory.java     |  232 ++
 .../net/tls/FileBackedFingerprintRepository.java   |  172 ++
 .../cava/net/tls/FingerprintRepository.java        |   48 +
 .../net/tls/ServerFingerprintTrustManager.java     |  127 +
 .../cava/net/tls/SingleTrustManagerFactory.java    |   39 +
 .../main/java/net/consensys/cava/net/tls/TLS.java  |  194 ++
 .../cava/net/tls/TLSEnvironmentException.java      |   24 +
 .../cava/net/tls/TrustManagerFactories.java        |  723 +++++
 .../cava/net/tls/TrustManagerFactoryWrapper.java   |   54 +
 .../consensys/cava/net/tls/VertxTrustOptions.java  |  649 +++++
 .../net/consensys/cava/net/tls/package-info.java   |    7 +
 .../cava/net/tls/ClientCaOrRecordTest.java         |  230 ++
 .../consensys/cava/net/tls/ClientCaOrTofuTest.java |  191 ++
 .../cava/net/tls/ClientCaOrWhitelistTest.java      |  161 ++
 .../consensys/cava/net/tls/ClientRecordTest.java   |  211 ++
 .../net/consensys/cava/net/tls/ClientTofuTest.java |  172 ++
 .../cava/net/tls/ClientWhitelistTest.java          |  169 ++
 .../tls/FileBackedFingerprintRepositoryTest.java   |   75 +
 .../cava/net/tls/InsecureTrustOptions.java         |   36 +
 .../consensys/cava/net/tls/SecurityTestUtils.java  |   76 +
 .../cava/net/tls/ServerCaOrRecordTest.java         |  207 ++
 .../consensys/cava/net/tls/ServerCaOrTofaTest.java |  163 ++
 .../cava/net/tls/ServerCaOrWhitelistTest.java      |  156 +
 .../consensys/cava/net/tls/ServerRecordTest.java   |  210 ++
 .../net/consensys/cava/net/tls/ServerTofaTest.java |  166 ++
 .../cava/net/tls/ServerWhitelistTest.java          |  157 +
 .../java/net/consensys/cava/net/tls/TLSTest.java   |  112 +
 plumtree/build.gradle                              |   12 +
 .../cava/plumtree/EphemeralPeerRepository.java     |   74 +
 .../consensys/cava/plumtree/MessageHashing.java    |   25 +
 .../net/consensys/cava/plumtree/MessageSender.java |   39 +
 .../java/net/consensys/cava/plumtree/Peer.java     |   16 +
 .../consensys/cava/plumtree/PeerRepository.java    |   73 +
 .../java/net/consensys/cava/plumtree/State.java    |  198 ++
 .../net/consensys/cava/plumtree/StateActor.java    |   16 +
 .../consensys/cava/plumtree/StateActorFactory.java |   18 +
 .../net/consensys/cava/plumtree/package-info.java  |   11 +
 .../net/consensys/cava/plumtree/StateTest.java     |  223 ++
 rlp/build.gradle                                   |   12 +
 .../consensys/cava/rlp/AccumulatingRLPWriter.java  |   96 +
 .../consensys/cava/rlp/ByteBufferRLPWriter.java    |   80 +
 .../net/consensys/cava/rlp/BytesRLPReader.java     |  269 ++
 .../net/consensys/cava/rlp/BytesRLPWriter.java     |   32 +
 .../consensys/cava/rlp/DelegatingRLPWriter.java    |   78 +
 .../net/consensys/cava/rlp/EndOfRLPException.java  |   22 +
 .../cava/rlp/InvalidRLPEncodingException.java      |   22 +
 .../cava/rlp/InvalidRLPTypeException.java          |   22 +
 rlp/src/main/java/net/consensys/cava/rlp/RLP.java  |  504 ++++
 .../java/net/consensys/cava/rlp/RLPException.java  |   30 +
 .../java/net/consensys/cava/rlp/RLPReader.java     |  402 +++
 .../java/net/consensys/cava/rlp/RLPWriter.java     |  140 +
 .../java/net/consensys/cava/rlp/package-info.java  |   13 +
 .../consensys/cava/rlp/ByteBufferWriterTest.java   |  162 ++
 .../net/consensys/cava/rlp/BytesRLPReaderTest.java |  222 ++
 .../net/consensys/cava/rlp/BytesRLPWriterTest.java |  174 ++
 rlpx/build.gradle                                  |   21 +
 .../cava/rlpx/EthereumIESEncryptionEngine.java     |  534 ++++
 .../net/consensys/cava/rlpx/HandshakeMessage.java  |   32 +
 .../cava/rlpx/InitiatorHandshakeMessage.java       |   94 +
 .../consensys/cava/rlpx/InvalidMACException.java   |   27 +
 .../cava/rlpx/MemoryWireConnectionsRepository.java |   51 +
 .../net/consensys/cava/rlpx/RLPxConnection.java    |  315 ++
 .../consensys/cava/rlpx/RLPxConnectionFactory.java |  333 +++
 .../java/net/consensys/cava/rlpx/RLPxMessage.java  |   74 +
 .../java/net/consensys/cava/rlpx/RLPxService.java  |   85 +
 .../cava/rlpx/ResponderHandshakeMessage.java       |   69 +
 .../cava/rlpx/WireConnectionRepository.java        |   52 +
 .../java/net/consensys/cava/rlpx/package-info.java |   12 +
 .../cava/rlpx/vertx/VertxRLPxService.java          |  390 +++
 .../consensys/cava/rlpx/vertx/package-info.java    |   12 +
 .../net/consensys/cava/rlpx/wire/Capability.java   |   56 +
 .../rlpx/wire/DefaultSubProtocolIdentifier.java    |   37 +
 .../cava/rlpx/wire/DefaultWireConnection.java      |  242 ++
 .../cava/rlpx/wire/DisconnectMessage.java          |   47 +
 .../consensys/cava/rlpx/wire/DisconnectReason.java |   39 +
 .../net/consensys/cava/rlpx/wire/HelloMessage.java |  148 +
 .../net/consensys/cava/rlpx/wire/PingMessage.java  |   33 +
 .../net/consensys/cava/rlpx/wire/PongMessage.java  |   32 +
 .../net/consensys/cava/rlpx/wire/SubProtocol.java  |   49 +
 .../cava/rlpx/wire/SubProtocolHandler.java         |   47 +
 .../cava/rlpx/wire/SubProtocolIdentifier.java      |   35 +
 .../consensys/cava/rlpx/wire/WireConnection.java   |   26 +
 .../cava/rlpx/wire/WireProtocolMessage.java        |   32 +
 .../net/consensys/cava/rlpx/wire/package-info.java |   12 +
 .../cava/rlpx/RLPxConnectionFactoryTest.java       |  263 ++
 .../cava/rlpx/vertx/VertxAcceptanceTest.java       |  310 ++
 .../cava/rlpx/vertx/VertxRLPxServiceTest.java      |  229 ++
 .../cava/rlpx/wire/DefaultWireConnectionTest.java  |  224 ++
 .../cava/rlpx/wire/DisconnectMessageTest.java      |   31 +
 .../consensys/cava/rlpx/wire/HelloMessageTest.java |   46 +
 .../net/consensys/cava/rlpx/wire/PingPongTest.java |   88 +
 .../wire/RLPxConnectionMessageExchangeTest.java    |  123 +
 scuttlebutt-discovery/build.gradle                 |   19 +
 .../cava/scuttlebutt/discovery/LocalIdentity.java  |  123 +
 .../ScuttlebuttLocalDiscoveryService.java          |  192 ++
 .../cava/scuttlebutt/discovery/package-info.java   |   14 +
 .../scuttlebutt/discovery/LocalIdentityTest.java   |   71 +
 .../ScuttlebuttLocalDiscoveryServiceTest.java      |  136 +
 scuttlebutt-handshake/build.gradle                 |   24 +
 .../scuttlebutt/handshake/HandshakeException.java  |   23 +
 .../SecureScuttlebuttHandshakeClient.java          |  283 ++
 .../SecureScuttlebuttHandshakeServer.java          |  273 ++
 .../handshake/SecureScuttlebuttStream.java         |  152 +
 .../handshake/SecureScuttlebuttStreamClient.java   |   46 +
 .../handshake/SecureScuttlebuttStreamServer.java   |   56 +
 .../scuttlebutt/handshake/StreamException.java     |   20 +
 .../cava/scuttlebutt/handshake/package-info.java   |   14 +
 .../scuttlebutt/handshake/vertx/ClientHandler.java |   33 +
 .../handshake/vertx/ClientHandlerFactory.java      |   31 +
 .../vertx/SecureScuttlebuttVertxClient.java        |  218 ++
 .../vertx/SecureScuttlebuttVertxServer.java        |  193 ++
 .../scuttlebutt/handshake/vertx/ServerHandler.java |   33 +
 .../handshake/vertx/ServerHandlerFactory.java      |   31 +
 .../scuttlebutt/handshake/vertx/package-info.java  |   14 +
 .../SecureScuttlebuttHandshakeClientTest.java      |  152 +
 .../handshake/SecureScuttlebuttStreamTest.java     |  160 ++
 .../handshake/vertx/VertxIntegrationTest.java      |  144 +
 scuttlebutt-rpc/build.gradle                       |   23 +
 .../consensys/cava/scuttlebutt/rpc/RPCCodec.java   |  130 +
 .../consensys/cava/scuttlebutt/rpc/RPCFlag.java    |  124 +
 .../consensys/cava/scuttlebutt/rpc/RPCMessage.java |  140 +
 .../scuttlebutt/rpc/PatchworkIntegrationTest.java  |  183 ++
 .../cava/scuttlebutt/rpc/RPCEncodingTest.java      |   85 +
 .../cava/scuttlebutt/rpc/RPCFlagTest.java          |   56 +
 scuttlebutt/build.gradle                           |   14 +
 .../cava/scuttlebutt/Ed25519KeyPairIdentity.java   |   82 +
 .../cava/scuttlebutt/Ed25519PublicKeyIdentity.java |   83 +
 .../net/consensys/cava/scuttlebutt/Identity.java   |  192 ++
 .../net/consensys/cava/scuttlebutt/Invite.java     |  102 +
 .../cava/scuttlebutt/SECP256K1KeyPairIdentity.java |   78 +
 .../scuttlebutt/SECP256K1PublicKeyIdentity.java    |   83 +
 .../consensys/cava/scuttlebutt/package-info.java   |   14 +
 .../consensys/cava/scuttlebutt/IdentityTest.java   |  167 ++
 .../net/consensys/cava/scuttlebutt/InviteTest.java |   54 +
 settings.gradle                                    |   28 +
 ssz/build.gradle                                   |   17 +
 .../consensys/cava/ssz/ByteBufferSSZWriter.java    |   36 +
 .../net/consensys/cava/ssz/BytesSSZReader.java     |  250 ++
 .../net/consensys/cava/ssz/BytesSSZWriter.java     |   35 +
 .../net/consensys/cava/ssz/EndOfSSZException.java  |   22 +
 .../cava/ssz/InvalidSSZTypeException.java          |   22 +
 ssz/src/main/java/net/consensys/cava/ssz/SSZ.java  | 1861 ++++++++++++
 .../java/net/consensys/cava/ssz/SSZException.java  |   30 +
 .../java/net/consensys/cava/ssz/SSZReader.java     |  621 ++++
 .../java/net/consensys/cava/ssz/SSZWriter.java     |  673 +++++
 .../java/net/consensys/cava/ssz/package-info.java  |   13 +
 .../cava/ssz/experimental/BytesSSZReader.kt        |   87 +
 .../cava/ssz/experimental/BytesSSZWriter.kt        |  117 +
 .../net/consensys/cava/ssz/experimental/SSZ.kt     |  187 ++
 .../consensys/cava/ssz/experimental/SSZReader.kt   |  524 ++++
 .../consensys/cava/ssz/experimental/SSZWriter.kt   |  566 ++++
 .../consensys/cava/ssz/ByteBufferWriterTest.java   |  127 +
 .../net/consensys/cava/ssz/BytesSSZReaderTest.java |  197 ++
 .../net/consensys/cava/ssz/BytesSSZWriterTest.java |  429 +++
 .../net/consensys/cava/ssz/HashTreeRootTest.java   |  113 +
 .../net/consensys/cava/ssz/experimental/SSZTest.kt |   38 +
 toml/README.md                                     |   48 +
 toml/build.gradle                                  |   29 +
 .../net/consensys/cava/toml/internal/TomlLexer.g4  |  189 ++
 .../net/consensys/cava/toml/internal/TomlParser.g4 |  174 ++
 .../cava/toml/AccumulatingErrorListener.java       |  124 +
 .../java/net/consensys/cava/toml/ArrayVisitor.java |   49 +
 .../net/consensys/cava/toml/ErrorReporter.java     |   17 +
 .../consensys/cava/toml/InlineTableVisitor.java    |   51 +
 .../net/consensys/cava/toml/JsonSerializer.java    |  168 ++
 .../java/net/consensys/cava/toml/KeyVisitor.java   |   48 +
 .../java/net/consensys/cava/toml/LineVisitor.java  |  112 +
 .../net/consensys/cava/toml/LocalDateVisitor.java  |  102 +
 .../net/consensys/cava/toml/LocalTimeVisitor.java  |  119 +
 .../net/consensys/cava/toml/MutableTomlArray.java  |  156 +
 .../net/consensys/cava/toml/MutableTomlTable.java  |  236 ++
 .../main/java/net/consensys/cava/toml/Parser.java  |  100 +
 .../consensys/cava/toml/QuotedStringVisitor.java   |   99 +
 .../java/net/consensys/cava/toml/TokenName.java    |   73 +
 .../main/java/net/consensys/cava/toml/Toml.java    |  246 ++
 .../java/net/consensys/cava/toml/TomlArray.java    |  304 ++
 .../cava/toml/TomlInvalidTypeException.java        |   23 +
 .../net/consensys/cava/toml/TomlParseError.java    |   43 +
 .../net/consensys/cava/toml/TomlParseResult.java   |   35 +
 .../java/net/consensys/cava/toml/TomlPosition.java |  102 +
 .../java/net/consensys/cava/toml/TomlTable.java    | 1168 ++++++++
 .../java/net/consensys/cava/toml/TomlType.java     |   61 +
 .../java/net/consensys/cava/toml/TomlVersion.java  |   62 +
 .../java/net/consensys/cava/toml/ValueVisitor.java |  173 ++
 .../net/consensys/cava/toml/ZoneOffsetVisitor.java |   84 +
 .../java/net/consensys/cava/toml/package-info.java |   13 +
 .../consensys/cava/toml/MutableTomlArrayTest.java  |   90 +
 .../consensys/cava/toml/MutableTomlTableTest.java  |  194 ++
 .../net/consensys/cava/toml/TokenNameTest.java     |   36 +
 .../java/net/consensys/cava/toml/TomlTest.java     |  563 ++++
 .../net/consensys/cava/toml/example-v0.4.0.toml    |  244 ++
 .../net/consensys/cava/toml/hard_example.toml      |   33 +
 .../consensys/cava/toml/hard_example_unicode.toml  |   36 +
 .../cava/toml/toml-v0.5.0-spec-example.toml        |   33 +
 units/build.gradle                                 |   11 +
 .../cava/units/bigints/BaseUInt256Value.java       |  335 +++
 .../cava/units/bigints/BaseUInt384Value.java       |  335 +++
 .../cava/units/bigints/BaseUInt64Value.java        |  334 +++
 .../net/consensys/cava/units/bigints/UInt256.java  |  782 +++++
 .../cava/units/bigints/UInt256Domain.java          |   52 +
 .../consensys/cava/units/bigints/UInt256Value.java |  388 +++
 .../cava/units/bigints/UInt256ValueDomain.java     |   65 +
 .../net/consensys/cava/units/bigints/UInt256s.java |   42 +
 .../net/consensys/cava/units/bigints/UInt384.java  |  782 +++++
 .../cava/units/bigints/UInt384Domain.java          |   52 +
 .../consensys/cava/units/bigints/UInt384Value.java |  388 +++
 .../cava/units/bigints/UInt384ValueDomain.java     |   65 +
 .../net/consensys/cava/units/bigints/UInt384s.java |   42 +
 .../net/consensys/cava/units/bigints/UInt64.java   |  559 ++++
 .../consensys/cava/units/bigints/UInt64Domain.java |   52 +
 .../consensys/cava/units/bigints/UInt64Value.java  |  382 +++
 .../cava/units/bigints/UInt64ValueDomain.java      |   65 +
 .../net/consensys/cava/units/bigints/UInt64s.java  |   42 +
 .../consensys/cava/units/bigints/package-info.java |    7 +
 .../net/consensys/cava/units/ethereum/Gas.java     |  151 +
 .../net/consensys/cava/units/ethereum/Wei.java     |   93 +
 .../cava/units/ethereum/package-info.java          |    7 +
 .../net/consensys/cava/units/package-info.java     |    8 +
 .../cava/units/bigints/BaseUInt256ValueTest.java   |  904 ++++++
 .../cava/units/bigints/BaseUInt384ValueTest.java   |  813 ++++++
 .../cava/units/bigints/BaseUInt64ValueTest.java    |  745 +++++
 .../consensys/cava/units/bigints/UInt256Test.java  |  928 ++++++
 .../consensys/cava/units/bigints/UInt384Test.java  |  947 ++++++
 .../consensys/cava/units/bigints/UInt64Test.java   |  760 +++++
 .../net/consensys/cava/units/ethereum/GasTest.java |   86 +
 .../net/consensys/cava/units/ethereum/WeiTest.java |   63 +
 549 files changed, 92440 insertions(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 0000000..24f8d83
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,144 @@
+version: 2
+jobs:
+  build:
+    docker:
+      - image: circleci/openjdk:11-jdk-sid
+
+    working_directory: ~/repo
+
+    environment:
+      TERM: dumb
+      JAVA_TOOL_OPTIONS: -Xmx768m
+      GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2
+      GRADLE_MAX_TEST_FORKS: 2
+
+    steps:
+      - checkout
+      - run:
+          name: Check submodule status
+          command: git submodule status | tee ~/submodule-status
+
+      - restore_cache:
+          name: Restoring cached submodules
+          keys:
+          - v1-submodules-{{ checksum "~/submodule-status" }}
+
+      - run:
+          name: Update submodules
+          command: git submodule update --init --recursive
+
+      - run:
+          name: Install Sodium Library
+          command: |
+            sudo sh -c "echo 'deb http://deb.debian.org/debian unstable main contrib non-free' > /etc/apt/sources.list"
+            sudo apt-get update
+            sudo apt-get install -y libsodium23
+
+      - restore_cache:
+          name: Restoring cached gradle dependencies
+          keys:
+          - v1-gradle-dir-{{ checksum "build.gradle" }}
+          - v1-gradle-dir-
+
+      - run:
+          name: Downloading dependencies
+          command: ./gradlew allDependencies checkLicenses
+
+      - run:
+          name: Compiling
+          command: ./gradlew spotlessCheck assemble
+
+      - run:
+          name: Collecting artifacts
+          command: |
+            mkdir -p ~/jars
+            find . -type f -regex ".*/build/libs/.*jar" -exec cp {} ~/jars/ \;
+          when: always
+
+      - store_artifacts:
+          name: Uploading artifacts
+          path: ~/jars
+          destination: jars
+          when: always
+
+      - run:
+          name: Running tests
+          command: ./gradlew --stacktrace test
+
+      - run:
+          name: Collecting test results
+          command: |
+            ./gradlew jacocoTestReport
+            mkdir -p ~/test-results/
+            find . -type f -regex ".*/build/test-results/.*xml" -exec cp {} ~/test-results/ \;
+          when: always
+
+      - store_test_results:
+          name: Uploading test results
+          path: ~/test-results
+          destination: tests
+          when: always
+
+      - run:
+          name: Collecting reports
+          command: |
+            mkdir -p ~/reports/license
+            (cd ./build/reports/license && tar c .) | (cd ~/reports/license && tar x)
+            find . -type d -regex ".*/build/reports/tests/test" | while read dir; do
+                  module=`echo $dir | sed -e 's/build\/reports\/tests\/test//'`
+                  mkdir -p ~/reports/test/"$module"
+                  (cd "$dir" && tar c .) | (cd ~/reports/test/"$module" && tar x)
+              done
+              find . -type d -regex ".*/build/reports/jacoco/test/html" | while read dir; do
+                  module=`echo $dir | sed -e 's/build\/reports\/jacoco\/test\/html//'`
+                  mkdir -p ~/reports/jacoco/"$module"
+                  (cd "$dir" && tar c .) | (cd ~/reports/jacoco/"$module" && tar x)
+              done
+          when: always
+
+      - store_artifacts:
+          name: Uploading reports
+          path: ~/reports
+          destination: reports
+
+      - run:
+          name: Building JavaDoc
+          command: ./gradlew :javadoc
+
+      - store_artifacts:
+          name: Uploading JavaDoc
+          path: build/docs/javadoc
+          destination: javadoc
+
+      - run:
+          name: Building Dokka docs
+          command: ./gradlew :dokka
+
+      - store_artifacts:
+          name: Uploading Dokka docs
+          path: build/docs/dokka
+          destination: dokka
+
+      - deploy:
+          name: Deploying snapshot to Bintray (release branches only)
+          command: |
+            if [ -z "${CIRCLE_PULL_REQUEST}" ] && echo "${CIRCLE_BRANCH}" | grep -q -E '^master$|^[0-9]+\.[0-9]+$'; then
+              echo "Start deployment"
+              BINTRAY_DEPLOY=true ./gradlew deploy
+            else
+              echo "Start dry run deployment"
+              ./gradlew deploy
+            fi
+
+      - save_cache:
+          name: Caching gradle dependencies
+          paths:
+          - .gradle
+          - ~/.gradle
+          key: v1-gradle-dir-{{ checksum "build.gradle" }}-{{ .Branch }}-{{ .BuildNum }}
+
+      - save_cache:
+          name: Caching submodules
+          paths:
+            - .git/modules
+          key: v1-submodules-{{ checksum "~/submodule-status" }}
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..470eda2
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,5 @@
+[*.{kt,kts}]
+indent_size=2
+continuation_indent_size=2
+insert_final_newline=true
+max_line_length=120
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..e9de15c
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,3 @@
+* text eol=lf
+*.jar -text
+*.bat -text
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..957d9b3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,30 @@
+*.bak
+*.swp
+*.tmp
+*~.nib
+*.iml
+*.launch
+*.swp
+*.tokens
+.classpath
+.externalToolBuilders/
+.gradle/
+.vscode/
+*.code-workspace
+.idea/*
+!.idea/codeStyles/
+.loadpath
+.metadata
+.prefs
+.project
+.recommenders/
+.settings
+.springBeans
+.vertx
+bin/
+classes/
+local.properties
+target/
+tmp/
+build/
+out/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..bfe62e7
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "eth-reference-tests/src/test/resources/tests"]
+	path = eth-reference-tests/src/test/resources/tests
+	url = https://github.com/ethereum/tests.git
+[submodule "eth-reference-tests/src/test/resources/eth2.0-tests"]
+	path = eth-reference-tests/src/test/resources/eth2.0-tests
+	url = https://github.com/ethereum/eth2.0-tests.git
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..8b54990
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,16 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <JavaCodeStyleSettings>
+      <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
+      <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
+    </JavaCodeStyleSettings>
+    <JetCodeStyleSettings>
+      <option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
+      <option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </JetCodeStyleSettings>
+    <codeStyleSettings language="kotlin">
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </codeStyleSettings>
+  </code_scheme>
+</component>
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+<component name="ProjectCodeStyleConfiguration">
+  <state>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..723abef
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,61 @@
+# Contributing to Cava
+
+Welcome to the Cava repository! This document describes the procedure and guidelines for contributing to the Cava project. The subsequent sections encapsulate the criteria used to evaluate additions to, and modifications of, the existing codebase.
+
+## Contributor Workflow
+
+The codebase is maintained using the "*contributor workflow*" where everyone without exception contributes patch proposals using "*pull-requests*". This facilitates social contribution, easy testing and peer review.
+
+To contribute a patch, the workflow is as follows:
+
+* Fork repository
+* Create topic branch
+* Commit patch
+* Create pull-request, adhering to the coding conventions herein set forth
+
+In general a commit serves a single purpose and diffs should be easily comprehensible. For this reason do not mix any formatting fixes or code moves with actual code changes.
+
+## Style Guide
+
+`La mode se démode, le style jamais.`
+
+Guided by the immortal words of Gabrielle Bonheur, we strive to adhere strictly to best stylistic practices for each line of code in this software.
+
+At this stage one should expect comments and reviews from fellow contributors. You can add more commits to your pull request by committing them locally and pushing to your fork until you have satisfied all feedback. Before merging, you should aim to have a clean commit history where each commit identifies an specific change, or where all
+commits are squashed together.
+
+#### Stylistic
+
+The fundamental resource Cava contributors should familiarize themselves with is Oracle's [Code Conventions for the Java TM Programming Language](http://www.oracle.com/technetwork/java/codeconvtoc-136057.html), to establish a general programme on Java coding. Furthermore, all pull-requests should be formatted according to the (slightly modified) [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html), as it will be checked by our continuous integration architecture, [...]
+
+#### Architectural Best Practices
+
+Questions on architectural best practices will be guided by the principles set forth in [Effective Java](http://index-of.es/Java/Effective%20Java.pdf) by Joshua Bloch
+
+#### Clear Commit/PR Messages
+
+Commit messages should be verbose by default consisting of a short subject line (50 chars max), a blank line and detailed explanatory text as separate paragraph(s), unless the title alone is self-explanatory (such as "`Implement EXP EVM opcode`") in which case a single title line is sufficient. Commit messages should be helpful to people reading your code in the future, so explain the reasoning for your decisions. Further explanation on commit messages can be found [here](https://chris.b [...]
+
+#### Test coverage
+
+The test cases are sufficient enough to provide confidence in the code’s robustness, while avoiding redundant tests.
+
+#### Readability
+
+The code is easy to understand.
+
+#### Simplicity
+
+The code is not over-engineered, sufficient effort is made to minimize the cyclomatic complexity of the software.  
+
+#### Functional
+
+Insofar as is possible the code intuitively and expeditiously executes the designated task.
+
+#### Clean
+
+The code is free from glaring typos (*e.g. misspelled comments*), thinkos, or formatting issues (*e.g. incorrect indentation*).
+
+#### Appropriately Commented
+
+Ambiguous or unclear code segments are commented. The comments are written in complete sentences.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/PACKAGES.md b/PACKAGES.md
new file mode 100644
index 0000000..0ecbe08
--- /dev/null
+++ b/PACKAGES.md
@@ -0,0 +1,137 @@
+# Module cava
+
+In the spirit of [Google Guava](https://github.com/google/guava/), Cava is a set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages.
+
+# Package net.consensys.cava.bytes
+
+Classes and utilities for working with byte arrays.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-bytes` (`cava-bytes.jar`).
+
+# Package net.consensys.cava.concurrent
+
+Classes and utilities for working with concurrency.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-concurrent` (`cava-concurrent.jar`).
+
+# Package net.consensys.cava.concurrent.coroutines
+
+Extensions for mapping [AsyncResult][net.consensys.cava.concurrent.AsyncResult] and [AsyncCompletion][net.consensys.cava.concurrent.AsyncCompletion] objects to and from Kotlin coroutines.
+
+# Package net.consensys.cava.config
+
+A general-purpose library for managing configuration data.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-config` (`cava-config.jar`).
+
+# Package net.consensys.cava.crypto
+
+Classes and utilities for working with cryptography.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-crypto` (`cava-crypto.jar`).
+
+# Package net.consensys.cava.crypto.sodium
+
+Classes and utilities for working with the sodium native library.
+
+Classes and utilities in this package provide an interface to the native Sodium crypto library (https://www.libsodium.org/), which must be installed on the same system as the JVM. It will be searched for in common library locations, or its it can be loaded explicitly using [net.consensys.cava.crypto.sodium.Sodium.loadLibrary].
+
+Classes in this package depend upon the JNR-FFI library, which is not automatically included when using the complete Cava distribution. See https://github.com/jnr/jnr-ffi. JNR-FFI can be included using the gradle dependency `com.github.jnr:jnr-ffi`.
+
+# Package net.consensys.cava.devp2p
+
+Kotlin coroutine based implementation of the Ethereum ÐΞVp2p protocol.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-devp2p` (`cava-devp2p.jar`).
+
+# Package net.consensys.cava.eth
+
+Classes and utilities for working in the Ethereum domain.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-eth` (`cava-eth.jar`).
+
+# Package net.consensys.cava.io
+
+Classes and utilities for handling file and network IO.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-io` (`cava-io.jar`).
+
+# Package net.consensys.cava.io.file
+
+General utilities for working with files and the filesystem.
+
+# Package net.consensys.cava.junit
+
+Utilities for better junit testing.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-junit` (`cava-junit.jar`).
+
+# Package net.consensys.cava.kademlia
+
+An implementation of the kademlia distributed hash (routing) table.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-kademlia` (`cava-kademlia.jar`).
+
+# Package net.consensys.cava.kv
+
+Classes and utilities for working with key/value stores.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-kv` (`cava-kv.jar`).
+
+# Package net.consensys.cava.net
+
+Classes and utilities for working with networking.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-net` (`cava-net.jar`).
+
+# Package net.consensys.cava.net.coroutines
+
+Classes and utilities for coroutine based networking.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-net-coroutines` (`cava-net-coroutines.jar`).
+
+# Package net.consensys.cava.net.tls
+
+Utilities for doing fingerprint based TLS certificate checking.
+
+# Package net.consensys.cava.rlp
+
+Recursive Length Prefix (RLP) encoding and decoding.
+
+An implementation of the Ethereum Recursive Length Prefix (RLP) algorithm, as described at https://github.com/ethereum/wiki/wiki/RLP.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-rlp` (`cava-rlp.jar`).
+
+# Package net.consensys.cava.toml
+
+A parser for Tom's Obvious, Minimal Language (TOML).
+
+A parser and semantic checker for Tom's Obvious, Minimal Language (TOML), as described at https://github.com/toml-lang/toml/.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-toml` (cava-toml.jar).
+
+# Package net.consensys.cava.trie
+
+Merkle Trie implementations.
+
+Implementations of the Ethereum Patricia Trie, as described at https://github.com/ethereum/wiki/wiki/Patricia-Tree.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-merkle-trie` (`cava-merkle-trie.jar`).
+
+# Package net.consensys.cava.trie
+
+Merkle Trie implementations using Kotlin coroutines.
+
+# Package net.consensys.cava.units
+
+Classes and utilities for working with 256 bit integers and Ethereum units.
+
+These classes are included in the complete Cava distribution, or separately when using the gradle dependency `net.consensys.cava:cava-units` (`cava-units.jar`).
+
+# Package net.consensys.cava.units.bigints
+
+Classes and utilities for working with 256 bit integers.
+
+# Package net.consensys.cava.units.ethereum
+
+Classes and utilities for working with Ethereum units.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e4ce4b9
--- /dev/null
+++ b/README.md
@@ -0,0 +1,53 @@
+# Cava: ConsenSys Core Libraries for Java (& Kotlin)
+
+[![Build Status](https://circleci.com/gh/ConsenSys/cava.svg?style=shield&circle-token=440c81af8cae3c059b516a8e375471258d7e0229)](https://circleci.com/gh/ConsenSys/cava)
+[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/ConsenSys/cava/blob/master/LICENSE)
+[![Download](https://api.bintray.com/packages/consensys/consensys/cava/images/download.svg?version=0.6.0) ](https://bintray.com/consensys/consensys/cava/0.6.0)
+
+In the spirit of [Google Guava](https://github.com/google/guava/), Cava is a set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages.
+
+It includes a low-level bytes library, serialization and deserialization codecs (e.g. [RLP](https://github.com/ethereum/wiki/wiki/RLP)), various cryptography functions and primatives, and lots of other helpful utilities.
+
+Cava is developed for JDK 1.8 or higher, and depends on various other FOSS libraries, including Guava.
+
+## Getting cava
+
+> Note that these libraries are experimental and are subject to change.
+
+The libraries are published to [ConsenSys bintray repository](https://consensys.bintray.com/consensys/), synced to JCenter and Maven Central.
+
+You can import all modules using the cava jar.
+
+With Maven:
+```xml
+<dependency>
+  <groupId>net.consensys.cava</groupId>
+  <artifactId>cava</artifactId>
+  <version>0.6.0</version>
+</dependency>
+```
+
+With Gradle: `compile 'net.consensys.cava:cava:0.6.0'`
+
+[PACKAGES.md](PACKAGES.md) contains the list of modules and instructions to import them separately.
+
+## Build Instructions
+
+To build, clone this repo and run with `./gradlew` like so:
+
+```sh
+git clone --recursive https://github.com/ConsenSys/cava
+cd cava
+./gradlew
+```
+
+After a successful build, libraries will be available in `build/libs`.
+
+## Links
+
+- [GitHub project](https://github.com/ConsenSys/cava)
+- [Online Kotlin documentation](https://consensys.github.io/cava/docs/kotlin/0.6.0/cava)
+- [Online Java documentation](https://consensys.github.io/cava/docs/java/0.6.0)
+- [Issue tracker: Report a defect or feature request](https://github.com/ConsenSys/cava/issues/new)
+- [StackOverflow: Ask "how-to" and "why-didn't-it-work" questions](https://stackoverflow.com/questions/ask?tags=cava+java)
+- [cava-discuss: For open-ended questions and discussion](http://groups.google.com/group/cava-discuss)
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..94eaa36
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,528 @@
+import java.util.regex.Pattern
+import net.ltgt.gradle.errorprone.CheckSeverity
+
+buildscript {
+  repositories {
+    maven { url 'https://consensys.bintray.com/consensys/' }
+    jcenter()
+  }
+}
+plugins {
+  id 'com.diffplug.gradle.spotless' version '3.16.0'
+  id 'net.ltgt.errorprone' version '0.6'
+  id 'io.spring.dependency-management' version '1.0.6.RELEASE'
+  id 'com.github.hierynomus.license' version '0.15.0'
+  id 'com.jfrog.bintray' version '1.8.3'
+  id 'org.jetbrains.kotlin.jvm' version '1.3.20'
+  id 'org.jetbrains.dokka' version '0.9.17'
+}
+
+description = 'A set of libraries and other tools to aid development of blockchain and other decentralized software in Java and other JVM languages'
+
+
+//////
+// Sanity checks
+
+if (!file("${rootDir}/eth-reference-tests/src/test/resources/tests/README.md").exists()) {
+  throw new GradleException("eth-reference-tests/src/test/resources/tests/README.md missing: please clone submodules (git submodule update --init --recursive)")
+}
+if (!file("${rootDir}/eth-reference-tests/src/test/resources/eth2.0-tests/README.md").exists()) {
+  throw new GradleException("eth-reference-tests/src/test/resources/eth2.0-tests/README.md missing: please clone submodules (git submodule update --init --recursive)")
+}
+
+
+//////
+// Version numbering
+
+def versionNumber = '1.0.0'
+def buildVersion = versionNumber + buildTag()
+
+static String buildTag() {
+  if (System.getenv('BUILD_RELEASE') == 'true') {
+    return ''
+  }
+  if (System.getenv('CIRCLECI')) {
+    def buildNumber = System.getenv('CIRCLE_SHA1').take(4).toUpperCase() +
+      String.format('%02X', System.getenv('CIRCLE_BUILD_NUM').toInteger() % 256, 16)
+    return '-' + buildNumber + '-snapshot'
+  }
+  return '-dev'
+}
+
+
+//////
+// Default tasks and build aliases
+
+defaultTasks 'checkLicenses', 'spotlessCheck', 'jar', 'test', ':javadoc'
+
+def buildAliases = ['dev': [
+    'spotlessApply',
+    'checkLicenses',
+    ':jar',
+    'test',
+    ':javadoc'
+  ]]
+
+def expandedTaskList = []
+gradle.startParameter.taskNames.each {
+  expandedTaskList << (buildAliases[it] ? buildAliases[it] : it)
+}
+gradle.startParameter.taskNames = expandedTaskList.flatten()
+
+
+//////
+// Gradle script formatting
+
+spotless {
+  groovyGradle {
+    target '**/*.gradle'
+    greclipse().configFile(rootProject.file('gradle/greclipse-gradle-consensys-style.properties'))
+    endWithNewline()
+  }
+}
+
+
+subprojects {
+
+  //////
+  // Source formatting
+
+  apply plugin: 'com.diffplug.gradle.spotless'
+  spotless {
+    java {
+      target project.fileTree(project.projectDir) {
+        include '**/*.java'
+        exclude '**/generated-src/**/*.*'
+      }
+      removeUnusedImports()
+      licenseHeaderFile rootProject.file('gradle/spotless.license.java')
+      eclipse().configFile(rootProject.file('gradle/eclipse-java-consensys-style.xml'))
+      importOrder 'net.consensys', 'java', ''
+      endWithNewline()
+    }
+    kotlin {
+      licenseHeaderFile rootProject.file('gradle/spotless.license.java')
+      ktlint().userData(['indent_size': '2', 'continuation_indent_size' : '2', 'max_line_length': '120'])
+      endWithNewline()
+    }
+  }
+
+
+  //////
+  // Parallel build execution
+
+  tasks.withType(Test) {
+    // If GRADLE_MAX_TEST_FORKS is not set, use half the available processors
+    maxParallelForks = (System.getenv('GRADLE_MAX_TEST_FORKS') ?:
+      (Runtime.runtime.availableProcessors().intdiv(2) ?: 1)).toInteger()
+  }
+
+  tasks.withType(JavaCompile) {
+    options.fork = true
+    options.incremental = true
+    options.encoding = 'UTF-8'
+  }
+
+  task allDependencies(type: DependencyReportTask) {}
+}
+
+
+//////
+// Top-level target for deploy (bintrayUpload depends on it)
+
+task deploy() {}
+
+configurations.archives.artifacts.removeAll { PublishArtifact publishArtifact ->
+  (publishArtifact.type == 'jar' && publishArtifact.name == 'cava')}
+
+
+//////
+// Project defaults
+
+allprojects {
+  apply plugin: 'java-library'
+  apply plugin: 'kotlin'
+  apply plugin: 'io.spring.dependency-management'
+  apply plugin: 'jacoco'
+  apply plugin: 'net.ltgt.errorprone'
+  apply plugin: 'com.jfrog.bintray'
+  apply plugin: 'maven-publish'
+  apply plugin: 'org.jetbrains.dokka'
+  apply plugin: 'signing'
+  apply from: "${rootDir}/dependency-versions.gradle"
+  apply from: "${rootDir}/gradle/check-licenses.gradle"
+
+  version = buildVersion
+
+  repositories { jcenter() }
+
+
+  //////
+  // Compiler arguments
+
+  sourceCompatibility = '1.8'
+  targetCompatibility = '1.8'
+
+  jacoco { toolVersion = '0.8.2' }
+
+  dependencies {
+    errorprone 'com.google.errorprone:error_prone_core'
+    if (JavaVersion.current().isJava8()) {
+      errorproneJavac("com.google.errorprone:javac")
+    }
+  }
+
+  tasks.withType(JavaCompile) {
+    // Until https://github.com/gradle/gradle/issues/2510 is resolved and
+    // something like a `releaseCompability` property is added, we have to add
+    // the --release flag explicitly
+    if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
+      options.compilerArgs.addAll(['--release', '8'])
+    }
+    options.compilerArgs += [
+      '-Xlint:unchecked',
+      '-Xlint:cast',
+      '-Xlint:rawtypes',
+      '-Xlint:overloads',
+      '-Xlint:divzero',
+      '-Xlint:finally',
+      '-Xlint:static',
+      '-Werror'
+    ]
+
+    options.errorprone {
+      excludedPaths '.*/generated-src/.*'
+      check('FutureReturnValueIgnored', CheckSeverity.OFF)
+      check('UnnecessaryParentheses', CheckSeverity.OFF)
+      disableWarningsInGeneratedCode = true
+    }
+  }
+
+  tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
+    kotlinOptions {
+      jvmTarget = "1.8"
+      allWarningsAsErrors = true
+      freeCompilerArgs = [
+        '-Xjsr305=strict',
+        '-Xjvm-default=enable',
+        '-Xuse-experimental=kotlin.Experimental'
+      ]
+    }
+  }
+
+
+  //////
+  // Use JUnit5 for testing
+
+  test { useJUnitPlatform() { includeEngines 'spek', 'junit-jupiter' } }
+
+
+  //////
+  // Documentation
+
+  dokka {
+    outputFormat = 'html'
+    outputDirectory = "$buildDir/docs/dokka"
+    jdkVersion = 8
+    includeNonPublic = false
+    def relativePath = rootDir.toPath().relativize(projectDir.toPath()).toString()
+    linkMapping {
+      dir = projectDir.toString()
+      url = "https://github.com/consensys/cava/blob/master/$relativePath"
+      suffix = "#L"
+    }
+  }
+
+
+  //////
+  // Artifact locations
+
+  jar {
+    destinationDir = file("${rootProject.buildDir}/libs")
+  }
+
+  task sourcesJar(type: Jar, dependsOn: classes) {
+    destinationDir = file("${rootProject.buildDir}/src")
+    classifier = 'sources'
+    from sourceSets.main.allSource
+  }
+
+  task javadocJar(type: Jar, dependsOn: javadoc) {
+    destinationDir = file("${rootProject.buildDir}/docs")
+    classifier = 'javadoc'
+    from javadoc.destinationDir
+  }
+
+  task dokkaJar(type: Jar, dependsOn: dokka) {
+    destinationDir = file("${rootProject.buildDir}/docs")
+    classifier = 'dokka'
+    from dokka.outputDirectory
+  }
+
+
+  //////
+  // Packaging and deployment
+
+  tasks.withType(Jar) {
+    if (rootProject == project) {
+      baseName = project.name
+    } else {
+      baseName = rootProject.name + '-' + project.name
+    }
+    manifest {
+      attributes('Implementation-Title': baseName,
+      'Implementation-Version': project.version)
+    }
+  }
+
+  if (project.name != 'eth-reference-tests') {
+
+    artifacts {
+      if (project != rootProject) {
+        archives jar
+        archives sourcesJar
+      }
+      archives dokkaJar
+    }
+
+    signing {
+      useGpgCmd()
+      sign configurations.archives
+    }
+
+    publishing {
+      publications {
+        MavenDeployment(MavenPublication) { publication ->
+          if (project != rootProject) {
+            from components.java
+            artifact sourcesJar { classifier 'sources' }
+          }
+          artifact dokkaJar { classifier 'javadoc' }
+          groupId 'net.consensys.cava'
+          artifactId project.jar.baseName
+          version project.version
+
+          pom {
+            name = project.jar.baseName
+            afterEvaluate { description = project.description }
+            url = 'https://github.com/ConsenSys/cava'
+            licenses {
+              license {
+                name = "The Apache License, Version 2.0"
+                url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
+              }
+            }
+            scm {
+              connection = 'scm:https://github.com/ConsenSys/cava.git'
+              developerConnection = 'scm:git@github.com:ConsenSys/cava.git'
+              url = 'https://github.com/ConsenSys/cava'
+            }
+            developers {
+              developer {
+                name = 'Chris Leishman'
+                email = 'chris@leishman.org'
+                organization = 'ConsenSys'
+                organizationUrl = 'https://www.consensys.net'
+              }
+              developer {
+                name = 'Antoine Toulme'
+                email = 'antoine@lunar-ocean.com'
+                organization = 'ConsenSys'
+                organizationUrl = 'https://www.consensys.net'
+              }
+            }
+          }
+          pom.withXml {
+            // use inline versions rather than pom dependency management
+            asNode().remove(asNode().dependencyManagement[0])
+
+            def dependenciesNode = asNode().appendNode('dependencies')
+            def addDependencyNode = { dep, optional ->
+              def dependencyNode = dependenciesNode.appendNode('dependency')
+              if (dep instanceof ProjectDependency) {
+                dependencyNode.appendNode('groupId', 'net.consensys.cava')
+                dependencyNode.appendNode('artifactId', rootProject.name + '-' + dep.name)
+                dependencyNode.appendNode('version', dep.version)
+              } else {
+                dependencyNode.appendNode('groupId', dep.group)
+                dependencyNode.appendNode('artifactId', dep.name)
+                if (dep.version != null) {
+                  dependencyNode.appendNode('version', dep.version)
+                } else {
+                  def version = dependencyManagement.managedVersions["$dep.group:$dep.name"]
+                  dependencyNode.appendNode('version', version)
+                }
+              }
+              if (optional) {
+                dependencyNode.appendNode('optional', 'true')
+              }
+
+              def ers = dep.excludeRules
+              if (!ers.empty) {
+                def exclusionsNode = dependencyNode.appendNode('exclusions')
+                ers.each { er ->
+                  def exclusionNode = exclusionsNode.appendNode('exclusion')
+                  exclusionNode.appendNode('groupId', er.group)
+                  exclusionNode.appendNode('artifactId', er.module)
+                }
+              }
+            }
+
+            configurations.compile.allDependencies.each { dep ->
+              addDependencyNode(dep, false)
+            }
+            configurations.compileOnly.allDependencies.each { dep ->
+              addDependencyNode(dep, true)
+            }
+
+            if (System.getenv('ENABLE_SIGNING') == 'true') {
+              def pomFile = file("${project.buildDir}/generated-pom.xml")
+              writeTo(pomFile)
+              def pomAscFile = signing.sign(pomFile).signatureFiles[0]
+              artifact(pomAscFile) {
+                classifier = null
+                extension = 'pom.asc'
+              }
+            }
+          }
+
+          if (System.getenv('ENABLE_SIGNING') == 'true') {
+            // create the signed artifacts
+            tasks.signArchives.signatureFiles.each {
+              artifact(it) {
+                def matcher = it.file =~ /-(sources|javadoc)\.jar\.asc$/
+                if (matcher.find()) {
+                  classifier = matcher.group(1)
+                } else {
+                  classifier = null
+                }
+                extension = 'jar.asc'
+              }
+            }
+          }
+        }
+      }
+    }
+
+    tasks.withType(Sign) {
+      onlyIf {
+        System.getenv('ENABLE_SIGNING') == 'true'
+      }
+    }
+
+    model {
+      tasks.generatePomFileForMavenDeploymentPublication {
+        destination = file("$buildDir/generated-pom.xml")
+      }
+      tasks.publishMavenDeploymentPublicationToMavenLocal { dependsOn project.tasks.signArchives }
+    }
+
+    def artifactIdMatcher = Pattern.compile("(.*)-\\d.*")
+    bintray {
+      user = System.getenv('BINTRAY_USER')
+      key = System.getenv('BINTRAY_KEY')
+      publications = ['MavenDeployment']
+      filesSpec {
+        project.extensions.getByType(PublishingExtension).publications.all { publication ->
+          publication.getArtifacts().all {
+            def ascFile = new File(it.file.getParentFile(), it.file.getName() + '.asc')
+            if (ascFile.exists()) {
+              def matcher = artifactIdMatcher.matcher(it.file.getName())
+              matcher.find()
+              def artifactId = matcher.group(1)
+              from ascFile.getAbsolutePath()
+              into publication.groupId.replaceAll('\\.', '/') + '/' + artifactId + '/' + publication.version + '/'
+            }
+          }
+        }
+      }
+      dryRun = !(System.getenv('BINTRAY_DEPLOY') == 'true')
+      publish = true
+      pkg {
+        repo = 'consensys'
+        name = 'cava'
+        userOrg = 'consensys'
+        licenses = ['Apache-2.0']
+        version {
+          name = project.version
+          desc = 'Cava distribution'
+          released = new Date()
+          vcsTag = project.version
+        }
+      }
+    }
+    deploy.dependsOn bintrayUpload
+  }
+}
+
+
+//////
+// Configure root project as a virtual package that depends on all components
+
+dependencies {
+  subprojects.each { p ->
+    switch (p.name) {
+      case 'eth-reference-tests':
+      // ignore
+        break
+      case 'crypto':
+        compile(p) {
+          exclude group: 'com.github.jnr', module: 'jnr-ffi'
+        }
+        break
+      default:
+        compile p
+        break
+    }
+  }
+}
+
+jar { enabled = false }
+
+javadoc {
+  subprojects.each {
+    source += it.javadoc.source
+    classpath += it.javadoc.classpath
+  }
+}
+
+dokka {
+  moduleName = rootProject.name
+  subprojects.each {
+    dependsOn it.classes
+    it.sourceSets.main.output.each { d ->
+      if (d.exists()) {
+        classpath += d
+      }
+    }
+  }
+  sourceDirs = files(subprojects.collect {
+    return [
+      new File(it.projectDir, '/src/main/kotlin'),
+      new File(it.projectDir, '/src/main/java')
+    ]
+  })
+  linkMapping {
+    dir = rootDir.toString()
+    url = "https://github.com/consensys/cava/blob/master"
+    suffix = "#L"
+  }
+
+  includes = ['PACKAGES.md']
+
+  externalDocumentationLink {
+    url = new URL("https://docs.oracle.com/javase/8/docs/api/")
+  }
+
+  externalDocumentationLink {
+    url = new URL('https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/')
+  }
+}
+
+dokkaJar {
+  baseName = rootProject.name
+  manifest {
+    attributes('Implementation-Title': baseName,
+    'Implementation-Version': project.version)
+  }
+}
diff --git a/bytes/build.gradle b/bytes/build.gradle
new file mode 100644
index 0000000..aefc867
--- /dev/null
+++ b/bytes/build.gradle
@@ -0,0 +1,12 @@
+description = 'Classes and utilities for working with byte arrays.'
+
+dependencies {
+  compile 'com.google.guava:guava'
+  compileOnly 'io.vertx:vertx-core'
+
+  testCompile 'io.vertx:vertx-core'
+  testCompile 'org.junit.jupiter:junit-jupiter-api'
+  testCompile 'org.junit.jupiter:junit-jupiter-params'
+
+  testRuntime 'org.junit.jupiter:junit-jupiter-engine'
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
new file mode 100644
index 0000000..614962f
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/AbstractBytes.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+/**
+ * An abstract {@link Bytes} value that provides implementations of {@link #equals(Object)}, {@link #hashCode()} and
+ * {@link #toString()}.
+ */
+public abstract class AbstractBytes implements Bytes {
+
+  static final char[] HEX_CODE = "0123456789ABCDEF".toCharArray();
+
+  /**
+   * Compare this value and the provided one for equality.
+   *
+   * <p>
+   * Two {@link Bytes} values are equal is they have contain the exact same bytes.
+   *
+   * @param obj The object to test for equality with.
+   * @return {@code true} if this value and {@code obj} are equal.
+   */
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof Bytes)) {
+      return false;
+    }
+
+    Bytes other = (Bytes) obj;
+    if (this.size() != other.size()) {
+      return false;
+    }
+
+    for (int i = 0; i < size(); i++) {
+      if (this.get(i) != other.get(i)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = 1;
+    for (int i = 0; i < size(); i++) {
+      result = 31 * result + get(i);
+    }
+    return result;
+  }
+
+  @Override
+  public String toString() {
+    return toHexString();
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
new file mode 100644
index 0000000..2fa1c29
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
+import java.util.Arrays;
+
+import io.vertx.core.buffer.Buffer;
+
+class ArrayWrappingBytes extends AbstractBytes {
+
+  protected final byte[] bytes;
+  protected final int offset;
+  protected final int length;
+
+  ArrayWrappingBytes(byte[] bytes) {
+    this(bytes, 0, bytes.length);
+  }
+
+  ArrayWrappingBytes(byte[] bytes, int offset, int length) {
+    checkArgument(length >= 0, "Invalid negative length");
+    if (bytes.length > 0) {
+      checkElementIndex(offset, bytes.length);
+    }
+    checkArgument(
+        offset + length <= bytes.length,
+        "Provided length %s is too big: the value has only %s bytes from offset %s",
+        length,
+        bytes.length - offset,
+        offset);
+
+    this.bytes = bytes;
+    this.offset = offset;
+    this.length = length;
+  }
+
+  @Override
+  public int size() {
+    return length;
+  }
+
+  @Override
+  public byte get(int i) {
+    // Check bounds because while the array access would throw, the error message would be confusing
+    // for the caller.
+    checkElementIndex(i, size());
+    return bytes[offset + i];
+  }
+
+  @Override
+  public Bytes slice(int i, int length) {
+    if (i == 0 && length == this.length) {
+      return this;
+    }
+    if (length == 0) {
+      return Bytes.EMPTY;
+    }
+
+    checkElementIndex(i, this.length);
+    checkArgument(
+        i + length <= this.length,
+        "Provided length %s is too big: the value has size %s and has only %s bytes from %s",
+        length,
+        this.length,
+        this.length - i,
+        i);
+
+    return length == Bytes32.SIZE ? new ArrayWrappingBytes32(bytes, offset + i)
+        : new ArrayWrappingBytes(bytes, offset + i, length);
+  }
+
+  // MUST be overridden by mutable implementations
+  @Override
+  public Bytes copy() {
+    if (offset == 0 && length == bytes.length) {
+      return this;
+    }
+    return new ArrayWrappingBytes(toArray());
+  }
+
+  @Override
+  public MutableBytes mutableCopy() {
+    return new MutableArrayWrappingBytes(toArray());
+  }
+
+  @Override
+  public int commonPrefixLength(Bytes other) {
+    if (!(other instanceof ArrayWrappingBytes)) {
+      return super.commonPrefixLength(other);
+    }
+    ArrayWrappingBytes o = (ArrayWrappingBytes) other;
+    int i = 0;
+    while (i < length && i < o.length && bytes[offset + i] == o.bytes[o.offset + i]) {
+      i++;
+    }
+    return i;
+  }
+
+  @Override
+  public void update(MessageDigest digest) {
+    digest.update(bytes, offset, length);
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination, int destinationOffset) {
+    if (!(destination instanceof MutableArrayWrappingBytes)) {
+      super.copyTo(destination, destinationOffset);
+      return;
+    }
+
+    int size = size();
+    if (size == 0) {
+      return;
+    }
+
+    checkElementIndex(destinationOffset, destination.size());
+    checkArgument(
+        destination.size() - destinationOffset >= size,
+        "Cannot copy %s bytes, destination has only %s bytes from index %s",
+        size,
+        destination.size() - destinationOffset,
+        destinationOffset);
+
+    MutableArrayWrappingBytes d = (MutableArrayWrappingBytes) destination;
+    System.arraycopy(bytes, offset, d.bytes, d.offset + destinationOffset, size);
+  }
+
+  @Override
+  public void appendTo(ByteBuffer byteBuffer) {
+    byteBuffer.put(bytes, offset, length);
+  }
+
+  @Override
+  public void appendTo(Buffer buffer) {
+    buffer.appendBytes(bytes, offset, length);
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof ArrayWrappingBytes)) {
+      return super.equals(obj);
+    }
+    ArrayWrappingBytes other = (ArrayWrappingBytes) obj;
+    if (length != other.length) {
+      return false;
+    }
+    for (int i = 0; i < length; ++i) {
+      if (bytes[offset + i] != other.bytes[other.offset + i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = 1;
+    int size = size();
+    for (int i = 0; i < size; i++) {
+      result = 31 * result + bytes[offset + i];
+    }
+    return result;
+  }
+
+  @Override
+  public byte[] toArray() {
+    return Arrays.copyOfRange(bytes, offset, offset + length);
+  }
+
+  @Override
+  public byte[] toArrayUnsafe() {
+    if (offset == 0 && length == bytes.length) {
+      return bytes;
+    }
+    return toArray();
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
new file mode 100644
index 0000000..fa60064
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes32.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+final class ArrayWrappingBytes32 extends ArrayWrappingBytes implements Bytes32 {
+
+  ArrayWrappingBytes32(byte[] bytes) {
+    this(checkLength(bytes), 0);
+  }
+
+  ArrayWrappingBytes32(byte[] bytes, int offset) {
+    super(checkLength(bytes, offset), offset, SIZE);
+  }
+
+  // Ensures a proper error message.
+  private static byte[] checkLength(byte[] bytes) {
+    checkArgument(bytes.length == SIZE, "Expected %s bytes but got %s", SIZE, bytes.length);
+    return bytes;
+  }
+
+  // Ensures a proper error message.
+  private static byte[] checkLength(byte[] bytes, int offset) {
+    checkArgument(
+        bytes.length - offset >= SIZE,
+        "Expected at least %s bytes from offset %s but got only %s",
+        SIZE,
+        offset,
+        bytes.length - offset);
+    return bytes;
+  }
+
+  @Override
+  public Bytes32 copy() {
+    if (offset == 0 && length == bytes.length) {
+      return this;
+    }
+    return new ArrayWrappingBytes32(toArray());
+  }
+
+  @Override
+  public MutableBytes32 mutableCopy() {
+    return new MutableArrayWrappingBytes32(toArray());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
new file mode 100644
index 0000000..8f33bae
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ArrayWrappingBytes48.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+final class ArrayWrappingBytes48 extends ArrayWrappingBytes implements Bytes48 {
+
+  ArrayWrappingBytes48(byte[] bytes) {
+    this(checkLength(bytes), 0);
+  }
+
+  ArrayWrappingBytes48(byte[] bytes, int offset) {
+    super(checkLength(bytes, offset), offset, SIZE);
+  }
+
+  // Ensures a proper error message.
+  private static byte[] checkLength(byte[] bytes) {
+    checkArgument(bytes.length == SIZE, "Expected %s bytes but got %s", SIZE, bytes.length);
+    return bytes;
+  }
+
+  // Ensures a proper error message.
+  private static byte[] checkLength(byte[] bytes, int offset) {
+    checkArgument(
+        bytes.length - offset >= SIZE,
+        "Expected at least %s bytes from offset %s but got only %s",
+        SIZE,
+        offset,
+        bytes.length - offset);
+    return bytes;
+  }
+
+  @Override
+  public Bytes48 copy() {
+    if (offset == 0 && length == bytes.length) {
+      return this;
+    }
+    return new ArrayWrappingBytes48(toArray());
+  }
+
+  @Override
+  public MutableBytes48 mutableCopy() {
+    return new MutableArrayWrappingBytes48(toArray());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
new file mode 100644
index 0000000..197937d
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/BufferWrappingBytes.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+import io.vertx.core.buffer.Buffer;
+
+class BufferWrappingBytes extends AbstractBytes {
+
+  protected final Buffer buffer;
+
+  BufferWrappingBytes(Buffer buffer) {
+    this.buffer = buffer;
+  }
+
+  BufferWrappingBytes(Buffer buffer, int offset, int length) {
+    checkArgument(length >= 0, "Invalid negative length");
+    int bufferLength = buffer.length();
+    checkElementIndex(offset, bufferLength + 1);
+    checkArgument(
+        offset + length <= bufferLength,
+        "Provided length %s is too big: the buffer has size %s and has only %s bytes from %s",
+        length,
+        bufferLength,
+        bufferLength - offset,
+        offset);
+
+    if (offset == 0 && length == bufferLength) {
+      this.buffer = buffer;
+    } else {
+      this.buffer = buffer.slice(offset, offset + length);
+    }
+  }
+
+  @Override
+  public int size() {
+    return buffer.length();
+  }
+
+  @Override
+  public byte get(int i) {
+    return buffer.getByte(i);
+  }
+
+  @Override
+  public int getInt(int i) {
+    return buffer.getInt(i);
+  }
+
+  @Override
+  public long getLong(int i) {
+    return buffer.getLong(i);
+  }
+
+  @Override
+  public Bytes slice(int i, int length) {
+    int size = buffer.length();
+    if (i == 0 && length == size) {
+      return this;
+    }
+    if (length == 0) {
+      return Bytes.EMPTY;
+    }
+
+    checkElementIndex(i, size);
+    checkArgument(
+        i + length <= size,
+        "Provided length %s is too big: the value has size %s and has only %s bytes from %s",
+        length,
+        size,
+        size - i,
+        i);
+
+    return new BufferWrappingBytes(buffer.slice(i, i + length));
+  }
+
+  // MUST be overridden by mutable implementations
+  @Override
+  public Bytes copy() {
+    return Bytes.wrap(toArray());
+  }
+
+  @Override
+  public MutableBytes mutableCopy() {
+    return MutableBytes.wrap(toArray());
+  }
+
+  @Override
+  public void appendTo(Buffer buffer) {
+    buffer.appendBuffer(this.buffer);
+  }
+
+  @Override
+  public byte[] toArray() {
+    return buffer.getBytes();
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
new file mode 100644
index 0000000..4031f38
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufWrappingBytes.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+import io.netty.buffer.ByteBuf;
+import io.vertx.core.buffer.Buffer;
+
+class ByteBufWrappingBytes extends AbstractBytes {
+
+  protected final ByteBuf byteBuf;
+
+  ByteBufWrappingBytes(ByteBuf byteBuf) {
+    this.byteBuf = byteBuf;
+  }
+
+  ByteBufWrappingBytes(ByteBuf byteBuf, int offset, int length) {
+    checkArgument(length >= 0, "Invalid negative length");
+    int bufferLength = byteBuf.capacity();
+    checkElementIndex(offset, bufferLength + 1);
+    checkArgument(
+        offset + length <= bufferLength,
+        "Provided length %s is too big: the buffer has size %s and has only %s bytes from %s",
+        length,
+        bufferLength,
+        bufferLength - offset,
+        offset);
+
+    if (offset == 0 && length == bufferLength) {
+      this.byteBuf = byteBuf;
+    } else {
+      this.byteBuf = byteBuf.slice(offset, length);
+    }
+  }
+
+  @Override
+  public int size() {
+    return byteBuf.capacity();
+  }
+
+  @Override
+  public byte get(int i) {
+    return byteBuf.getByte(i);
+  }
+
+  @Override
+  public int getInt(int i) {
+    return byteBuf.getInt(i);
+  }
+
+  @Override
+  public long getLong(int i) {
+    return byteBuf.getLong(i);
+  }
+
+  @Override
+  public Bytes slice(int i, int length) {
+    int size = byteBuf.capacity();
+    if (i == 0 && length == size) {
+      return this;
+    }
+    if (length == 0) {
+      return Bytes.EMPTY;
+    }
+
+    checkElementIndex(i, size);
+    checkArgument(
+        i + length <= size,
+        "Provided length %s is too big: the value has size %s and has only %s bytes from %s",
+        length,
+        size,
+        size - i,
+        i);
+
+    return new ByteBufWrappingBytes(byteBuf.slice(i, length));
+  }
+
+  // MUST be overridden by mutable implementations
+  @Override
+  public Bytes copy() {
+    return Bytes.wrap(toArray());
+  }
+
+  @Override
+  public MutableBytes mutableCopy() {
+    return MutableBytes.wrap(toArray());
+  }
+
+  @Override
+  public void appendTo(Buffer buffer) {
+    buffer.appendBuffer(Buffer.buffer(this.byteBuf));
+  }
+
+  @Override
+  public byte[] toArray() {
+    int size = byteBuf.capacity();
+    byte[] array = new byte[size];
+    byteBuf.getBytes(0, array);
+    return array;
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
new file mode 100644
index 0000000..53547da
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ByteBufferWrappingBytes.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+
+class ByteBufferWrappingBytes extends AbstractBytes {
+
+  protected final ByteBuffer byteBuffer;
+  protected final int offset;
+  protected final int length;
+
+  ByteBufferWrappingBytes(ByteBuffer byteBuffer) {
+    this(byteBuffer, 0, byteBuffer.limit());
+  }
+
+  ByteBufferWrappingBytes(ByteBuffer byteBuffer, int offset, int length) {
+    checkArgument(length >= 0, "Invalid negative length");
+    int bufferLength = byteBuffer.capacity();
+    if (bufferLength > 0) {
+      checkElementIndex(offset, bufferLength);
+    }
+    checkArgument(
+        offset + length <= bufferLength,
+        "Provided length %s is too big: the value has only %s bytes from offset %s",
+        length,
+        bufferLength - offset,
+        offset);
+
+    this.byteBuffer = byteBuffer;
+    this.offset = offset;
+    this.length = length;
+  }
+
+  @Override
+  public int size() {
+    return length;
+  }
+
+  @Override
+  public int getInt(int i) {
+    return byteBuffer.getInt(offset + i);
+  }
+
+  @Override
+  public long getLong(int i) {
+    return byteBuffer.getLong(offset + i);
+  }
+
+  @Override
+  public byte get(int i) {
+    return byteBuffer.get(offset + i);
+  }
+
+  @Override
+  public Bytes slice(int i, int length) {
+    if (i == 0 && length == this.length) {
+      return this;
+    }
+    if (length == 0) {
+      return Bytes.EMPTY;
+    }
+
+    checkElementIndex(i, this.length);
+    checkArgument(
+        i + length <= this.length,
+        "Provided length %s is too big: the value has size %s and has only %s bytes from %s",
+        length,
+        this.length,
+        this.length - i,
+        i);
+
+    return new ByteBufferWrappingBytes(byteBuffer, offset + i, length);
+  }
+
+  // MUST be overridden by mutable implementations
+  @Override
+  public Bytes copy() {
+    if (offset == 0 && length == byteBuffer.limit()) {
+      return this;
+    }
+    return new ArrayWrappingBytes(toArray());
+  }
+
+  @Override
+  public MutableBytes mutableCopy() {
+    return new MutableArrayWrappingBytes(toArray());
+  }
+
+  @Override
+  public void appendTo(ByteBuffer byteBuffer) {
+    byteBuffer.put(this.byteBuffer);
+  }
+
+  @Override
+  public byte[] toArray() {
+    if (!byteBuffer.hasArray()) {
+      return super.toArray();
+    }
+    int arrayOffset = byteBuffer.arrayOffset();
+    return Arrays.copyOfRange(byteBuffer.array(), arrayOffset + offset, arrayOffset + offset + length);
+  }
+
+  @Override
+  public byte[] toArrayUnsafe() {
+    if (!byteBuffer.hasArray()) {
+      return toArray();
+    }
+    byte[] array = byteBuffer.array();
+    if (array.length != length || byteBuffer.arrayOffset() != 0) {
+      return toArray();
+    }
+    return array;
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
new file mode 100644
index 0000000..40340a0
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes.java
@@ -0,0 +1,1466 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+import static java.nio.ByteOrder.BIG_ENDIAN;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.ReadOnlyBufferException;
+import java.security.MessageDigest;
+import java.security.SecureRandom;
+import java.util.Arrays;
+import java.util.Base64;
+import java.util.Random;
+
+import io.netty.buffer.ByteBuf;
+import io.vertx.core.buffer.Buffer;
+
+/**
+ * A value made of bytes.
+ *
+ * <p>
+ * This interface makes no thread-safety guarantee, and a {@link Bytes} value is generally not thread safe. However,
+ * specific implementations may be thread-safe. For instance, the value returned by {@link #copy} is guaranteed to be
+ * thread-safe as it is immutable.
+ */
+public interface Bytes {
+
+  /**
+   * The empty value (with 0 bytes).
+   */
+  Bytes EMPTY = wrap(new byte[0]);
+
+  /**
+   * Wrap the provided byte array as a {@link Bytes} value.
+   *
+   * <p>
+   * Note that value is not copied and thus any future update to {@code value} will be reflected in the returned value.
+   *
+   * @param value The value to wrap.
+   * @return A {@link Bytes} value wrapping {@code value}.
+   */
+  static Bytes wrap(byte[] value) {
+    return wrap(value, 0, value.length);
+  }
+
+  /**
+   * Wrap a slice of a byte array as a {@link Bytes} value.
+   *
+   * <p>
+   * Note that value is not copied and thus any future update to {@code value} within the slice will be reflected in the
+   * returned value.
+   *
+   * @param value The value to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, o, l).get(0) == value[o]}.
+   * @param length The length of the resulting value.
+   * @return A {@link Bytes} value that expose the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + length} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.length > 0 && offset >=
+   *     value.length)}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + length > value.length}.
+   */
+  static Bytes wrap(byte[] value, int offset, int length) {
+    checkNotNull(value);
+    if (length == 32) {
+      return new ArrayWrappingBytes32(value, offset);
+    }
+    return new ArrayWrappingBytes(value, offset, length);
+  }
+
+  /**
+   * Wrap a list of other values into a concatenated view.
+   *
+   * <p>
+   * Note that the values are not copied and thus any future update to the values will be reflected in the returned
+   * value. If copying the inputs is desired, use {@link #concatenate(Bytes...)}.
+   *
+   * @param values The values to wrap.
+   * @return A value representing a view over the concatenation of all {@code values}.
+   * @throws IllegalArgumentException if the result overflows an int.
+   */
+  static Bytes wrap(Bytes... values) {
+    return ConcatenatedBytes.wrap(values);
+  }
+
+  /**
+   * Create a value containing the concatenation of the values provided.
+   *
+   * @param values The values to copy and concatenate.
+   * @return A value containing the result of concatenating the value from {@code values} in their provided order.
+   * @throws IllegalArgumentException if the result overflows an int.
+   */
+  static Bytes concatenate(Bytes... values) {
+    if (values.length == 0) {
+      return EMPTY;
+    }
+
+    int size;
+    try {
+      size = Arrays.stream(values).mapToInt(Bytes::size).reduce(0, Math::addExact);
+    } catch (ArithmeticException e) {
+      throw new IllegalArgumentException("Combined length of values is too long (> Integer.MAX_VALUE)");
+    }
+
+    MutableBytes result = MutableBytes.create(size);
+    int offset = 0;
+    for (Bytes value : values) {
+      value.copyTo(result, offset);
+      offset += value.size();
+    }
+    return result;
+  }
+
+  /**
+   * Wrap a full Vert.x {@link Buffer} as a {@link Bytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value.
+   *
+   * @param buffer The buffer to wrap.
+   * @return A {@link Bytes} value.
+   */
+  static Bytes wrapBuffer(Buffer buffer) {
+    checkNotNull(buffer);
+    if (buffer.length() == 0) {
+      return EMPTY;
+    }
+    return new BufferWrappingBytes(buffer);
+  }
+
+  /**
+   * Wrap a slice of a Vert.x {@link Buffer} as a {@link Bytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value.
+   *
+   * @param buffer The buffer to wrap.
+   * @param offset The offset in {@code buffer} from which to expose the bytes in the returned value. That is,
+   *        {@code wrapBuffer(buffer, i, 1).get(0) == buffer.getByte(i)}.
+   * @param size The size of the returned value.
+   * @return A {@link Bytes} value.
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (buffer.length() > 0 && offset >=
+   *     buffer.length())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + length > buffer.length()}.
+   */
+  static Bytes wrapBuffer(Buffer buffer, int offset, int size) {
+    checkNotNull(buffer);
+    if (size == 0) {
+      return EMPTY;
+    }
+    return new BufferWrappingBytes(buffer, offset, size);
+  }
+
+  /**
+   * Wrap a full Netty {@link ByteBuf} as a {@link Bytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the byteBuf may be reflected in the returned value.
+   *
+   * @param byteBuf The {@link ByteBuf} to wrap.
+   * @return A {@link Bytes} value.
+   */
+  static Bytes wrapByteBuf(ByteBuf byteBuf) {
+    checkNotNull(byteBuf);
+    if (byteBuf.capacity() == 0) {
+      return EMPTY;
+    }
+    return new ByteBufWrappingBytes(byteBuf);
+  }
+
+  /**
+   * Wrap a slice of a Netty {@link ByteBuf} as a {@link Bytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value.
+   *
+   * @param byteBuf The {@link ByteBuf} to wrap.
+   * @param offset The offset in {@code byteBuf} from which to expose the bytes in the returned value. That is,
+   *        {@code wrapByteBuf(byteBuf, i, 1).get(0) == byteBuf.getByte(i)}.
+   * @param size The size of the returned value.
+   * @return A {@link Bytes} value.
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (byteBuf.capacity() > 0 && offset >=
+   *     byteBuf.capacity())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + length > byteBuf.capacity()}.
+   */
+  static Bytes wrapByteBuf(ByteBuf byteBuf, int offset, int size) {
+    checkNotNull(byteBuf);
+    if (size == 0) {
+      return EMPTY;
+    }
+    return new ByteBufWrappingBytes(byteBuf, offset, size);
+  }
+
+  /**
+   * Wrap a full Java NIO {@link ByteBuffer} as a {@link Bytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the byteBuf may be reflected in the returned value.
+   *
+   * @param byteBuffer The {@link ByteBuffer} to wrap.
+   * @return A {@link Bytes} value.
+   */
+  static Bytes wrapByteBuffer(ByteBuffer byteBuffer) {
+    checkNotNull(byteBuffer);
+    if (byteBuffer.limit() == 0) {
+      return EMPTY;
+    }
+    return new ByteBufferWrappingBytes(byteBuffer);
+  }
+
+  /**
+   * Wrap a slice of a Java NIO {@link ByteBuf} as a {@link Bytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value.
+   *
+   * @param byteBuffer The {@link ByteBuffer} to wrap.
+   * @param offset The offset in {@code byteBuffer} from which to expose the bytes in the returned value. That is,
+   *        {@code wrapByteBuffer(byteBuffer, i, 1).get(0) == byteBuffer.getByte(i)}.
+   * @param size The size of the returned value.
+   * @return A {@link Bytes} value.
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (byteBuffer.limit() > 0 && offset >=
+   *     byteBuf.limit())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + length > byteBuffer.limit()}.
+   */
+  static Bytes wrapByteBuffer(ByteBuffer byteBuffer, int offset, int size) {
+    checkNotNull(byteBuffer);
+    if (size == 0) {
+      return EMPTY;
+    }
+    return new ByteBufferWrappingBytes(byteBuffer, offset, size);
+  }
+
+  /**
+   * Create a value that contains the specified bytes in their specified order.
+   *
+   * @param bytes The bytes that must compose the returned value.
+   * @return A value containing the specified bytes.
+   */
+  static Bytes of(byte... bytes) {
+    return wrap(bytes);
+  }
+
+  /**
+   * Create a value that contains the specified bytes in their specified order.
+   *
+   * @param bytes The bytes.
+   * @return A value containing bytes are the one from {@code bytes}.
+   * @throws IllegalArgumentException if any of the specified would be truncated when storing as a byte.
+   */
+  static Bytes of(int... bytes) {
+    byte[] result = new byte[bytes.length];
+    for (int i = 0; i < bytes.length; i++) {
+      int b = bytes[i];
+      checkArgument(b == (((byte) b) & 0xff), "%sth value %s does not fit a byte", i + 1, b);
+      result[i] = (byte) b;
+    }
+    return Bytes.wrap(result);
+  }
+
+  /**
+   * Return a 2-byte value corresponding to the provided value interpreted as an unsigned short.
+   *
+   * @param value The value, which must be no larger than an unsigned short.
+   * @return A 2 bytes value corresponding to {@code value}.
+   * @throws IllegalArgumentException if {@code value < 0} or {@code value} is too big to fit an unsigned 2-byte short
+   *         (that is, if {@code value >= (1 << 16)}).
+   */
+  static Bytes ofUnsignedShort(int value) {
+    return ofUnsignedShort(value, BIG_ENDIAN);
+  }
+
+  /**
+   * Return a 2-byte value corresponding to the provided value interpreted as an unsigned short.
+   *
+   * @param value The value, which must be no larger than an unsigned short.
+   * @param order The byte-order for the integer encoding.
+   * @return A 2 bytes value corresponding to {@code value}.
+   * @throws IllegalArgumentException if {@code value < 0} or {@code value} is too big to fit an unsigned 2-byte short
+   *         (that is, if {@code value >= (1 << 16)}).
+   */
+  static Bytes ofUnsignedShort(int value, ByteOrder order) {
+    checkArgument(
+        value >= 0 && value <= BytesValues.MAX_UNSIGNED_SHORT,
+        "Value %s cannot be represented as an unsigned short (it is negative or too big)",
+        value);
+    byte[] res = new byte[2];
+    if (order == BIG_ENDIAN) {
+      res[0] = (byte) ((value >> 8) & 0xFF);
+      res[1] = (byte) (value & 0xFF);
+    } else {
+      res[0] = (byte) (value & 0xFF);
+      res[1] = (byte) ((value >> 8) & 0xFF);
+    }
+    return Bytes.wrap(res);
+  }
+
+  /**
+   * Return a 4-byte value corresponding to the provided value interpreted as an unsigned int.
+   *
+   * @param value The value, which must be no larger than an unsigned int.
+   * @return A 4 bytes value corresponding to {@code value}.
+   * @throws IllegalArgumentException if {@code value < 0} or {@code value} is too big to fit an unsigned 4-byte int
+   *         (that is, if {@code value >= (1L << 32)}).
+   */
+  static Bytes ofUnsignedInt(long value) {
+    return ofUnsignedInt(value, BIG_ENDIAN);
+  }
+
+  /**
+   * Return a 4-byte value corresponding to the provided value interpreted as an unsigned int.
+   *
+   * @param value The value, which must be no larger than an unsigned int.
+   * @param order The byte-order for the integer encoding.
+   * @return A 4 bytes value corresponding to the encoded {@code value}.
+   * @throws IllegalArgumentException if {@code value < 0} or {@code value} is too big to fit an unsigned 4-byte int
+   *         (that is, if {@code value >= (1L << 32)}).
+   */
+  static Bytes ofUnsignedInt(long value, ByteOrder order) {
+    checkArgument(
+        value >= 0 && value <= BytesValues.MAX_UNSIGNED_INT,
+        "Value %s cannot be represented as an unsigned int (it is negative or too big)",
+        value);
+    byte[] res = new byte[4];
+    if (order == BIG_ENDIAN) {
+      res[0] = (byte) ((value >> 24) & 0xFF);
+      res[1] = (byte) ((value >> 16) & 0xFF);
+      res[2] = (byte) ((value >> 8) & 0xFF);
+      res[3] = (byte) ((value) & 0xFF);
+    } else {
+      res[0] = (byte) ((value) & 0xFF);
+      res[1] = (byte) ((value >> 8) & 0xFF);
+      res[2] = (byte) ((value >> 16) & 0xFF);
+      res[3] = (byte) ((value >> 24) & 0xFF);
+    }
+    return Bytes.wrap(res);
+  }
+
+  /**
+   * Return an 8-byte value corresponding to the provided value interpreted as an unsigned long.
+   *
+   * @param value The value, which will be interpreted as an unsigned long.
+   * @return A 8 bytes value corresponding to {@code value}.
+   * @throws IllegalArgumentException if {@code value < 0} or {@code value} is too big to fit an unsigned 8-byte int
+   *         (that is, if {@code value >= (1L << 64)}).
+   */
+  static Bytes ofUnsignedLong(long value) {
+    return ofUnsignedLong(value, BIG_ENDIAN);
+  }
+
+  /**
+   * Return an 8-byte value corresponding to the provided value interpreted as an unsigned long.
+   *
+   * @param value The value, which will be interpreted as an unsigned long.
+   * @param order The byte-order for the integer encoding.
+   * @return A 8 bytes value corresponding to {@code value}.
+   * @throws IllegalArgumentException if {@code value < 0} or {@code value} is too big to fit an unsigned 8-byte int
+   *         (that is, if {@code value >= (1L << 64)}).
+   */
+  static Bytes ofUnsignedLong(long value, ByteOrder order) {
+    byte[] res = new byte[8];
+    if (order == BIG_ENDIAN) {
+      res[0] = (byte) ((value >> 56) & 0xFF);
+      res[1] = (byte) ((value >> 48) & 0xFF);
+      res[2] = (byte) ((value >> 40) & 0xFF);
+      res[3] = (byte) ((value >> 32) & 0xFF);
+      res[4] = (byte) ((value >> 24) & 0xFF);
+      res[5] = (byte) ((value >> 16) & 0xFF);
+      res[6] = (byte) ((value >> 8) & 0xFF);
+      res[7] = (byte) (value & 0xFF);
+    } else {
+      res[0] = (byte) ((value) & 0xFF);
+      res[1] = (byte) ((value >> 8) & 0xFF);
+      res[2] = (byte) ((value >> 16) & 0xFF);
+      res[3] = (byte) ((value >> 24) & 0xFF);
+      res[4] = (byte) ((value >> 32) & 0xFF);
+      res[5] = (byte) ((value >> 40) & 0xFF);
+      res[6] = (byte) ((value >> 48) & 0xFF);
+      res[7] = (byte) ((value >> 56) & 0xFF);
+    }
+    return Bytes.wrap(res);
+  }
+
+  /**
+   * Return the smallest bytes value whose bytes correspond to the provided long. That is, the returned value may be of
+   * size less than 8 if the provided long has leading zero bytes.
+   *
+   * @param value The long from which to create the bytes value.
+   * @return The minimal bytes representation corresponding to {@code l}.
+   */
+  static Bytes minimalBytes(long value) {
+    if (value == 0) {
+      return Bytes.EMPTY;
+    }
+
+    int zeros = Long.numberOfLeadingZeros(value);
+    int resultBytes = 8 - (zeros / 8);
+
+    byte[] result = new byte[resultBytes];
+    int shift = 0;
+    for (int i = 0; i < resultBytes; i++) {
+      result[resultBytes - i - 1] = (byte) ((value >> shift) & 0xFF);
+      shift += 8;
+    }
+    return Bytes.wrap(result);
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes} value.
+   *
+   * <p>
+   * This method is lenient in that {@code str} may of an odd length, in which case it will behave exactly as if it had
+   * an additional 0 in front.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x".
+   * @return The value corresponding to {@code str}.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation.
+   */
+  static Bytes fromHexStringLenient(CharSequence str) {
+    checkNotNull(str);
+    return BytesValues.fromHexString(str, -1, true);
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes} value of the provided size.
+   *
+   * <p>
+   * This method allows for {@code str} to have an odd length, in which case it will behave exactly as if it had an
+   * additional 0 in front.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x".
+   * @param destinationSize The size of the returned value, which must be big enough to hold the bytes represented by
+   *        {@code str}. If it is strictly bigger those bytes from {@code str}, the returned value will be left padded
+   *        with zeros.
+   * @return A value of size {@code destinationSize} corresponding to {@code str} potentially left-padded.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation,
+   *         represents more bytes than {@code destinationSize} or {@code destinationSize &lt; 0}.
+   */
+  static Bytes fromHexStringLenient(CharSequence str, int destinationSize) {
+    checkNotNull(str);
+    checkArgument(destinationSize >= 0, "Invalid negative destination size %s", destinationSize);
+    return BytesValues.fromHexString(str, destinationSize, true);
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes} value.
+   *
+   * <p>
+   * This method requires that {@code str} have an even length.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x".
+   * @return The value corresponding to {@code str}.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation, or is of
+   *         an odd length.
+   */
+  static Bytes fromHexString(CharSequence str) {
+    checkNotNull(str);
+    return BytesValues.fromHexString(str, -1, false);
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes} value.
+   *
+   * <p>
+   * This method requires that {@code str} have an even length.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x".
+   * @param destinationSize The size of the returned value, which must be big enough to hold the bytes represented by
+   *        {@code str}. If it is strictly bigger those bytes from {@code str}, the returned value will be left padded
+   *        with zeros.
+   * @return A value of size {@code destinationSize} corresponding to {@code str} potentially left-padded.
+   * @throws IllegalArgumentException if {@code str} does correspond to a valid hexadecimal representation, or is of an
+   *         odd length.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation, or is of
+   *         an odd length, or represents more bytes than {@code destinationSize} or {@code destinationSize &lt; 0}.
+   */
+  static Bytes fromHexString(CharSequence str, int destinationSize) {
+    checkNotNull(str);
+    checkArgument(destinationSize >= 0, "Invalid negative destination size %s", destinationSize);
+    return BytesValues.fromHexString(str, destinationSize, false);
+  }
+
+  /**
+   * Parse a base 64 string into a {@link Bytes} value.
+   *
+   * @param str The base 64 string to parse.
+   * @return The value corresponding to {@code str}.
+   */
+  static Bytes fromBase64String(CharSequence str) {
+    return Bytes.wrap(Base64.getDecoder().decode(str.toString()));
+  }
+
+  /**
+   * Generate random bytes.
+   *
+   * @param size The number of bytes to generate.
+   * @return A value containing the desired number of random bytes.
+   */
+  static Bytes random(int size) {
+    return random(size, new SecureRandom());
+  }
+
+  /**
+   * Generate random bytes.
+   *
+   * @param size The number of bytes to generate.
+   * @param generator The generator for random bytes.
+   * @return A value containing the desired number of random bytes.
+   */
+  static Bytes random(int size, Random generator) {
+    byte[] array = new byte[size];
+    generator.nextBytes(array);
+    return Bytes.wrap(array);
+  }
+
+  /** @return The number of bytes this value represents. */
+  int size();
+
+  /**
+   * Retrieve a byte in this value.
+   *
+   * @param i The index of the byte to fetch within the value (0-indexed).
+   * @return The byte at index {@code i} in this value.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {i &gt;= size()}.
+   */
+  byte get(int i);
+
+  /**
+   * Retrieve the 4 bytes starting at the provided index in this value as an integer.
+   *
+   * @param i The index from which to get the int, which must less than or equal to {@code size() - 4}.
+   * @return An integer whose value is the 4 bytes from this value starting at index {@code i}.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {@code i &gt; size() - 4}.
+   */
+  default int getInt(int i) {
+    return getInt(i, BIG_ENDIAN);
+  }
+
+  /**
+   * Retrieve the 4 bytes starting at the provided index in this value as an integer.
+   *
+   * @param i The index from which to get the int, which must less than or equal to {@code size() - 4}.
+   * @param order The byte-order for decoding the integer.
+   * @return An integer whose value is the 4 bytes from this value starting at index {@code i}.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {@code i &gt; size() - 4}.
+   */
+  default int getInt(int i, ByteOrder order) {
+    int size = size();
+    checkElementIndex(i, size);
+    if (i > (size - 4)) {
+      throw new IndexOutOfBoundsException(
+          format("Value of size %s has not enough bytes to read a 4 bytes int from index %s", size, i));
+    }
+
+    int value = 0;
+    if (order == BIG_ENDIAN) {
+      value |= ((int) get(i) & 0xFF) << 24;
+      value |= ((int) get(i + 1) & 0xFF) << 16;
+      value |= ((int) get(i + 2) & 0xFF) << 8;
+      value |= ((int) get(i + 3) & 0xFF);
+    } else {
+      value |= ((int) get(i + 3) & 0xFF) << 24;
+      value |= ((int) get(i + 2) & 0xFF) << 16;
+      value |= ((int) get(i + 1) & 0xFF) << 8;
+      value |= ((int) get(i) & 0xFF);
+    }
+    return value;
+  }
+
+  /**
+   * The value corresponding to interpreting these bytes as an integer.
+   *
+   * @return An value corresponding to this value interpreted as an integer.
+   * @throws IllegalArgumentException if {@code size() &gt; 4}.
+   */
+  default int toInt() {
+    return toInt(BIG_ENDIAN);
+  }
+
+  /**
+   * The value corresponding to interpreting these bytes as an integer.
+   *
+   * @param order The byte-order for decoding the integer.
+   * @return An value corresponding to this value interpreted as an integer.
+   * @throws IllegalArgumentException if {@code size() &gt; 4}.
+   */
+  default int toInt(ByteOrder order) {
+    int size = size();
+    checkArgument(size <= 4, "Value of size %s has more than 4 bytes", size());
+    if (size == 0) {
+      return 0;
+    }
+    if (order == BIG_ENDIAN) {
+      int i = size;
+      int value = ((int) get(--i) & 0xFF);
+      if (i == 0) {
+        return value;
+      }
+      value |= ((int) get(--i) & 0xFF) << 8;
+      if (i == 0) {
+        return value;
+      }
+      value |= ((int) get(--i) & 0xFF) << 16;
+      if (i == 0) {
+        return value;
+      }
+      return value | ((int) get(--i) & 0xFF) << 24;
+    } else {
+      int i = 0;
+      int value = ((int) get(i) & 0xFF);
+      if (++i == size) {
+        return value;
+      }
+      value |= ((int) get(i++) & 0xFF) << 8;
+      if (i == size) {
+        return value;
+      }
+      value |= ((int) get(i++) & 0xFF) << 16;
+      if (i == size) {
+        return value;
+      }
+      return value | ((int) get(i) & 0xFF) << 24;
+    }
+  }
+
+  /**
+   * Whether this value contains no bytes.
+   *
+   * @return true if the value contains no bytes
+   */
+  default boolean isEmpty() {
+    return size() == 0;
+  }
+
+  /**
+   * Retrieves the 8 bytes starting at the provided index in this value as a long.
+   *
+   * @param i The index from which to get the long, which must less than or equal to {@code size() - 8}.
+   * @return A long whose value is the 8 bytes from this value starting at index {@code i}.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {@code i &gt; size() - 8}.
+   */
+  default long getLong(int i) {
+    return getLong(i, BIG_ENDIAN);
+  }
+
+  /**
+   * Retrieves the 8 bytes starting at the provided index in this value as a long.
+   *
+   * @param i The index from which to get the long, which must less than or equal to {@code size() - 8}.
+   * @param order The byte-order for decoding the integer.
+   * @return A long whose value is the 8 bytes from this value starting at index {@code i}.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {@code i &gt; size() - 8}.
+   */
+  default long getLong(int i, ByteOrder order) {
+    int size = size();
+    checkElementIndex(i, size);
+    if (i > (size - 8)) {
+      throw new IndexOutOfBoundsException(
+          format("Value of size %s has not enough bytes to read a 8 bytes long from index %s", size, i));
+    }
+
+    long value = 0;
+    if (order == BIG_ENDIAN) {
+      value |= ((long) get(i) & 0xFF) << 56;
+      value |= ((long) get(i + 1) & 0xFF) << 48;
+      value |= ((long) get(i + 2) & 0xFF) << 40;
+      value |= ((long) get(i + 3) & 0xFF) << 32;
+      value |= ((long) get(i + 4) & 0xFF) << 24;
+      value |= ((long) get(i + 5) & 0xFF) << 16;
+      value |= ((long) get(i + 6) & 0xFF) << 8;
+      value |= ((long) get(i + 7) & 0xFF);
+    } else {
+      value |= ((long) get(i + 7) & 0xFF) << 56;
+      value |= ((long) get(i + 6) & 0xFF) << 48;
+      value |= ((long) get(i + 5) & 0xFF) << 40;
+      value |= ((long) get(i + 4) & 0xFF) << 32;
+      value |= ((long) get(i + 3) & 0xFF) << 24;
+      value |= ((long) get(i + 2) & 0xFF) << 16;
+      value |= ((long) get(i + 1) & 0xFF) << 8;
+      value |= ((long) get(i) & 0xFF);
+    }
+    return value;
+  }
+
+  /**
+   * The value corresponding to interpreting these bytes as a long.
+   *
+   * @return An value corresponding to this value interpreted as a long.
+   * @throws IllegalArgumentException if {@code size() &gt; 8}.
+   */
+  default long toLong() {
+    return toLong(BIG_ENDIAN);
+  }
+
+  /**
+   * The value corresponding to interpreting these bytes as a long.
+   *
+   * @param order The byte-order for decoding the integer.
+   * @return An value corresponding to this value interpreted as a long.
+   * @throws IllegalArgumentException if {@code size() &gt; 8}.
+   */
+  default long toLong(ByteOrder order) {
+    int size = size();
+    checkArgument(size <= 8, "Value of size %s has more than 8 bytes", size());
+    if (size == 0) {
+      return 0;
+    }
+    if (order == BIG_ENDIAN) {
+      int i = size;
+      long value = ((long) get(--i) & 0xFF);
+      if (i == 0) {
+        return value;
+      }
+      value |= ((long) get(--i) & 0xFF) << 8;
+      if (i == 0) {
+        return value;
+      }
+      value |= ((long) get(--i) & 0xFF) << 16;
+      if (i == 0) {
+        return value;
+      }
+      value |= ((long) get(--i) & 0xFF) << 24;
+      if (i == 0) {
+        return value;
+      }
+      value |= ((long) get(--i) & 0xFF) << 32;
+      if (i == 0) {
+        return value;
+      }
+      value |= ((long) get(--i) & 0xFF) << 40;
+      if (i == 0) {
+        return value;
+      }
+      value |= ((long) get(--i) & 0xFF) << 48;
+      if (i == 0) {
+        return value;
+      }
+      return value | ((long) get(--i) & 0xFF) << 56;
+    } else {
+      int i = 0;
+      long value = ((long) get(i) & 0xFF);
+      if (++i == size) {
+        return value;
+      }
+      value |= ((long) get(i) & 0xFF) << 8;
+      if (++i == size) {
+        return value;
+      }
+      value |= ((long) get(i) & 0xFF) << 16;
+      if (++i == size) {
+        return value;
+      }
+      value |= ((long) get(i) & 0xFF) << 24;
+      if (++i == size) {
+        return value;
+      }
+      value |= ((long) get(i) & 0xFF) << 32;
+      if (++i == size) {
+        return value;
+      }
+      value |= ((long) get(i) & 0xFF) << 40;
+      if (++i == size) {
+        return value;
+      }
+      value |= ((long) get(i) & 0xFF) << 48;
+      if (++i == size) {
+        return value;
+      }
+      return value | ((long) get(i) & 0xFF) << 56;
+    }
+  }
+
+  /**
+   * The BigInteger corresponding to interpreting these bytes as a two's-complement signed integer.
+   *
+   * @return A {@link BigInteger} corresponding to interpreting these bytes as a two's-complement signed integer.
+   */
+  default BigInteger toBigInteger() {
+    return toBigInteger(BIG_ENDIAN);
+  }
+
+  /**
+   * The BigInteger corresponding to interpreting these bytes as a two's-complement signed integer.
+   *
+   * @param order The byte-order for decoding the integer.
+   * @return A {@link BigInteger} corresponding to interpreting these bytes as a two's-complement signed integer.
+   */
+  default BigInteger toBigInteger(ByteOrder order) {
+    if (size() == 0) {
+      return BigInteger.ZERO;
+    }
+    return new BigInteger((order == BIG_ENDIAN) ? toArrayUnsafe() : reverse().toArrayUnsafe());
+  }
+
+  /**
+   * The BigInteger corresponding to interpreting these bytes as an unsigned integer.
+   *
+   * @return A positive (or zero) {@link BigInteger} corresponding to interpreting these bytes as an unsigned integer.
+   */
+  default BigInteger toUnsignedBigInteger() {
+    return toUnsignedBigInteger(BIG_ENDIAN);
+  }
+
+  /**
+   * The BigInteger corresponding to interpreting these bytes as an unsigned integer.
+   *
+   * @param order The byte-order for decoding the integer.
+   * @return A positive (or zero) {@link BigInteger} corresponding to interpreting these bytes as an unsigned integer.
+   */
+  default BigInteger toUnsignedBigInteger(ByteOrder order) {
+    return new BigInteger(1, (order == BIG_ENDIAN) ? toArrayUnsafe() : reverse().toArrayUnsafe());
+  }
+
+  /**
+   * Whether this value has only zero bytes.
+   *
+   * @return {@code true} if all the bits of this value are zeros.
+   */
+  default boolean isZero() {
+    for (int i = size() - 1; i >= 0; --i) {
+      if (get(i) != 0)
+        return false;
+    }
+    return true;
+  }
+
+  /**
+   * Whether the bytes start with a zero bit value.
+   *
+   * @return true if the first bit equals zero
+   */
+  default boolean hasLeadingZero() {
+    return size() > 0 && (get(0) & 0x80) == 0;
+  }
+
+  /**
+   * @return The number of zero bits preceding the highest-order ("leftmost") one-bit, or {@code size() * 8} if all bits
+   *         are zero.
+   */
+  default int numberOfLeadingZeros() {
+    int size = size();
+    for (int i = 0; i < size; i++) {
+      byte b = get(i);
+      if (b == 0) {
+        continue;
+      }
+
+      return (i * 8) + Integer.numberOfLeadingZeros(b & 0xFF) - 3 * 8;
+    }
+    return size * 8;
+  }
+
+  /**
+   * Whether the bytes start with a zero byte value.
+   *
+   * @return true if the first byte equals zero
+   */
+  default boolean hasLeadingZeroByte() {
+    return size() > 0 && get(0) == 0;
+  }
+
+  /**
+   * @return The number of leading zero bytes of the value.
+   */
+  default int numberOfLeadingZeroBytes() {
+    int size = size();
+    for (int i = 0; i < size; i++) {
+      if (get(i) != 0) {
+        return i;
+      }
+    }
+    return size;
+  }
+
+  /**
+   * @return The number of trailing zero bytes of the value.
+   */
+  default int numberOfTrailingZeroBytes() {
+    int size = size();
+    for (int i = size; i >= 1; i--) {
+      if (get(i - 1) != 0) {
+        return size - i;
+      }
+    }
+    return size;
+  }
+
+  /**
+   * @return The number of bits following and including the highest-order ("leftmost") one-bit, or zero if all bits are
+   *         zero.
+   */
+  default int bitLength() {
+    int size = size();
+    for (int i = 0; i < size; i++) {
+      byte b = get(i);
+      if (b == 0)
+        continue;
+
+      return (size * 8) - (i * 8) - (Integer.numberOfLeadingZeros(b & 0xFF) - 3 * 8);
+    }
+    return 0;
+  }
+
+  /**
+   * Return a bit-wise AND of these bytes and the supplied bytes.
+   *
+   * If this value and the supplied value are different lengths, then the shorter will be zero-padded to the left.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise AND.
+   */
+  default Bytes and(Bytes other) {
+    return and(other, MutableBytes.create(Math.max(size(), other.size())));
+  }
+
+  /**
+   * Calculate a bit-wise AND of these bytes and the supplied bytes.
+   *
+   * <p>
+   * If this value or the supplied value are shorter in length than the output vector, then they will be zero-padded to
+   * the left. Likewise, if either this value or the supplied valid is longer in length than the output vector, then
+   * they will be truncated to the left.
+   *
+   * @param other The bytes to perform the operation with.
+   * @param result The mutable output vector for the result.
+   * @param <T> The {@link MutableBytes} value type.
+   * @return The {@code result} output vector.
+   */
+  default <T extends MutableBytes> T and(Bytes other, T result) {
+    checkNotNull(other);
+    checkNotNull(result);
+    int rSize = result.size();
+    int offsetSelf = rSize - size();
+    int offsetOther = rSize - other.size();
+    for (int i = 0; i < rSize; i++) {
+      byte b1 = (i < offsetSelf) ? 0x00 : get(i - offsetSelf);
+      byte b2 = (i < offsetOther) ? 0x00 : other.get(i - offsetOther);
+      result.set(i, (byte) (b1 & b2));
+    }
+    return result;
+  }
+
+  /**
+   * Return a bit-wise OR of these bytes and the supplied bytes.
+   *
+   * <p>
+   * If this value and the supplied value are different lengths, then the shorter will be zero-padded to the left.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise OR.
+   */
+  default Bytes or(Bytes other) {
+    return or(other, MutableBytes.create(Math.max(size(), other.size())));
+  }
+
+  /**
+   * Calculate a bit-wise OR of these bytes and the supplied bytes.
+   *
+   * <p>
+   * If this value or the supplied value are shorter in length than the output vector, then they will be zero-padded to
+   * the left. Likewise, if either this value or the supplied valid is longer in length than the output vector, then
+   * they will be truncated to the left.
+   *
+   * @param other The bytes to perform the operation with.
+   * @param result The mutable output vector for the result.
+   * @param <T> The {@link MutableBytes} value type.
+   * @return The {@code result} output vector.
+   */
+  default <T extends MutableBytes> T or(Bytes other, T result) {
+    checkNotNull(other);
+    checkNotNull(result);
+    int rSize = result.size();
+    int offsetSelf = rSize - size();
+    int offsetOther = rSize - other.size();
+    for (int i = 0; i < rSize; i++) {
+      byte b1 = (i < offsetSelf) ? 0x00 : get(i - offsetSelf);
+      byte b2 = (i < offsetOther) ? 0x00 : other.get(i - offsetOther);
+      result.set(i, (byte) (b1 | b2));
+    }
+    return result;
+  }
+
+  /**
+   * Return a bit-wise XOR of these bytes and the supplied bytes.
+   *
+   * <p>
+   * If this value and the supplied value are different lengths, then the shorter will be zero-padded to the left.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise XOR.
+   */
+  default Bytes xor(Bytes other) {
+    return xor(other, MutableBytes.create(Math.max(size(), other.size())));
+  }
+
+  /**
+   * Calculate a bit-wise XOR of these bytes and the supplied bytes.
+   *
+   * <p>
+   * If this value or the supplied value are shorter in length than the output vector, then they will be zero-padded to
+   * the left. Likewise, if either this value or the supplied valid is longer in length than the output vector, then
+   * they will be truncated to the left.
+   *
+   * @param other The bytes to perform the operation with.
+   * @param result The mutable output vector for the result.
+   * @param <T> The {@link MutableBytes} value type.
+   * @return The {@code result} output vector.
+   */
+  default <T extends MutableBytes> T xor(Bytes other, T result) {
+    checkNotNull(other);
+    checkNotNull(result);
+    int rSize = result.size();
+    int offsetSelf = rSize - size();
+    int offsetOther = rSize - other.size();
+    for (int i = 0; i < rSize; i++) {
+      byte b1 = (i < offsetSelf) ? 0x00 : get(i - offsetSelf);
+      byte b2 = (i < offsetOther) ? 0x00 : other.get(i - offsetOther);
+      result.set(i, (byte) (b1 ^ b2));
+    }
+    return result;
+  }
+
+  /**
+   * Return a bit-wise NOT of these bytes.
+   *
+   * @return The result of a bit-wise NOT.
+   */
+  default Bytes not() {
+    return not(MutableBytes.create(size()));
+  }
+
+  /**
+   * Calculate a bit-wise NOT of these bytes.
+   *
+   * <p>
+   * If this value is shorter in length than the output vector, then it will be zero-padded to the left. Likewise, if
+   * this value is longer in length than the output vector, then it will be truncated to the left.
+   *
+   * @param result The mutable output vector for the result.
+   * @param <T> The {@link MutableBytes} value type.
+   * @return The {@code result} output vector.
+   */
+  default <T extends MutableBytes> T not(T result) {
+    checkNotNull(result);
+    int rSize = result.size();
+    int offsetSelf = rSize - size();
+    for (int i = 0; i < rSize; i++) {
+      byte b1 = (i < offsetSelf) ? 0x00 : get(i - offsetSelf);
+      result.set(i, (byte) ~b1);
+    }
+    return result;
+  }
+
+  /**
+   * Shift all bits in this value to the right.
+   *
+   * @param distance The number of bits to shift by.
+   * @return A value containing the shifted bits.
+   */
+  default Bytes shiftRight(int distance) {
+    return shiftRight(distance, MutableBytes.create(size()));
+  }
+
+  /**
+   * Shift all bits in this value to the right.
+   *
+   * <p>
+   * If this value is shorter in length than the output vector, then it will be zero-padded to the left. Likewise, if
+   * this value is longer in length than the output vector, then it will be truncated to the left (after shifting).
+   *
+   * @param distance The number of bits to shift by.
+   * @param result The mutable output vector for the result.
+   * @param <T> The {@link MutableBytes} value type.
+   * @return The {@code result} output vector.
+   */
+  default <T extends MutableBytes> T shiftRight(int distance, T result) {
+    checkNotNull(result);
+    int rSize = result.size();
+    int offsetSelf = rSize - size();
+
+    int d = distance / 8;
+    int s = distance % 8;
+    int resIdx = rSize - 1;
+    for (int i = rSize - 1 - d; i >= 0; i--) {
+      byte res;
+      if (i < offsetSelf) {
+        res = 0;
+      } else {
+        int selfIdx = i - offsetSelf;
+        int leftSide = (get(selfIdx) & 0xFF) >>> s;
+        int rightSide = (selfIdx == 0) ? 0 : get(selfIdx - 1) << (8 - s);
+        res = (byte) (leftSide | rightSide);
+      }
+      result.set(resIdx--, res);
+    }
+    for (; resIdx >= 0; resIdx--) {
+      result.set(resIdx, (byte) 0);
+    }
+    return result;
+  }
+
+  /**
+   * Shift all bits in this value to the left.
+   *
+   * @param distance The number of bits to shift by.
+   * @return A value containing the shifted bits.
+   */
+  default Bytes shiftLeft(int distance) {
+    return shiftLeft(distance, MutableBytes.create(size()));
+  }
+
+  /**
+   * Shift all bits in this value to the left.
+   *
+   * <p>
+   * If this value is shorter in length than the output vector, then it will be zero-padded to the left. Likewise, if
+   * this value is longer in length than the output vector, then it will be truncated to the left.
+   *
+   * @param distance The number of bits to shift by.
+   * @param result The mutable output vector for the result.
+   * @param <T> The {@link MutableBytes} value type.
+   * @return The {@code result} output vector.
+   */
+  default <T extends MutableBytes> T shiftLeft(int distance, T result) {
+    checkNotNull(result);
+    int size = size();
+    int rSize = result.size();
+    int offsetSelf = rSize - size;
+
+    int d = distance / 8;
+    int s = distance % 8;
+    int resIdx = 0;
+    for (int i = d; i < rSize; i++) {
+      byte res;
+      if (i < offsetSelf) {
+        res = 0;
+      } else {
+        int selfIdx = i - offsetSelf;
+        int leftSide = get(selfIdx) << s;
+        int rightSide = (selfIdx == size - 1) ? 0 : (get(selfIdx + 1) & 0xFF) >>> (8 - s);
+        res = (byte) (leftSide | rightSide);
+      }
+      result.set(resIdx++, res);
+    }
+    for (; resIdx < rSize; resIdx++) {
+      result.set(resIdx, (byte) 0);
+    }
+    return result;
+  }
+
+  /**
+   * Create a new value representing (a view of) a slice of the bytes of this value.
+   *
+   * <p>
+   * Please note that the resulting slice is only a view and as such maintains a link to the underlying full value. So
+   * holding a reference to the returned slice may hold more memory than the slide represents. Use {@link #copy} on the
+   * returned slice if that is not what you want.
+   *
+   * @param i The start index for the slice.
+   * @return A new value providing a view over the bytes from index {@code i} (included) to the end.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0}.
+   */
+  default Bytes slice(int i) {
+    if (i == 0) {
+      return this;
+    }
+    int size = size();
+    if (i >= size) {
+      return EMPTY;
+    }
+    return slice(i, size - i);
+  }
+
+  /**
+   * Create a new value representing (a view of) a slice of the bytes of this value.
+   *
+   * <p>
+   * Please note that the resulting slice is only a view and as such maintains a link to the underlying full value. So
+   * holding a reference to the returned slice may hold more memory than the slide represents. Use {@link #copy} on the
+   * returned slice if that is not what you want.
+   *
+   * @param i The start index for the slice.
+   * @param length The length of the resulting value.
+   * @return A new value providing a view over the bytes from index {@code i} (included) to {@code i + length}
+   *         (excluded).
+   * @throws IllegalArgumentException if {@code length &lt; 0}.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {i &gt;= size()} or {i + length &gt; size()} .
+   */
+  Bytes slice(int i, int length);
+
+  /**
+   * Return a value equivalent to this one but guaranteed to 1) be deeply immutable (i.e. the underlying value will be
+   * immutable) and 2) to not retain more bytes than exposed by the value.
+   *
+   * @return A value, equals to this one, but deeply immutable and that doesn't retain any "unreachable" bytes. For
+   *         performance reasons, this is allowed to return this value however if it already fit those constraints.
+   */
+  Bytes copy();
+
+  /**
+   * Return a new mutable value initialized with the content of this value.
+   *
+   * @return A mutable copy of this value. This will copy bytes, modifying the returned value will <b>not</b> modify
+   *         this value.
+   */
+  MutableBytes mutableCopy();
+
+  /**
+   * Copy the bytes of this value to the provided mutable one, which must have the same size.
+   *
+   * @param destination The mutable value to which to copy the bytes to, which must have the same size as this value. If
+   *        you want to copy value where size differs, you should use {@link #slice} and/or
+   *        {@link MutableBytes#mutableSlice} and apply the copy to the result.
+   * @throws IllegalArgumentException if {@code this.size() != destination.size()}.
+   */
+  default void copyTo(MutableBytes destination) {
+    checkNotNull(destination);
+    checkArgument(
+        destination.size() == size(),
+        "Cannot copy %s bytes to destination of non-equal size %s",
+        size(),
+        destination.size());
+    copyTo(destination, 0);
+  }
+
+  /**
+   * Copy the bytes of this value to the provided mutable one from a particular offset.
+   *
+   * <p>
+   * This is a (potentially slightly more efficient) shortcut for {@code
+   * copyTo(destination.mutableSlice(destinationOffset, this.size()))}.
+   *
+   * @param destination The mutable value to which to copy the bytes to, which must have enough bytes from
+   *        {@code destinationOffset} for the copied value.
+   * @param destinationOffset The offset in {@code destination} at which the copy starts.
+   * @throws IllegalArgumentException if the destination doesn't have enough room, that is if {@code
+   *     this.size() &gt; (destination.size() - destinationOffset)}.
+   */
+  default void copyTo(MutableBytes destination, int destinationOffset) {
+    checkNotNull(destination);
+
+    // Special casing an empty source or the following checks might throw (even though we have
+    // nothing to copy anyway) and this gets inconvenient for generic methods using copyTo() as
+    // they may have to special case empty values because of this. As an example,
+    // concatenate(EMPTY, EMPTY) would need to be special cased without this.
+    int size = size();
+    if (size == 0) {
+      return;
+    }
+
+    checkElementIndex(destinationOffset, destination.size());
+    checkArgument(
+        destination.size() - destinationOffset >= size,
+        "Cannot copy %s bytes, destination has only %s bytes from index %s",
+        size,
+        destination.size() - destinationOffset,
+        destinationOffset);
+
+    for (int i = 0; i < size; i++) {
+      destination.set(destinationOffset + i, get(i));
+    }
+  }
+
+  /**
+   * Append the bytes of this value to the {@link ByteBuffer}.
+   *
+   * @param byteBuffer The {@link ByteBuffer} to which to append this value.
+   * @throws BufferOverflowException If the writer attempts to write more than the provided buffer can hold.
+   * @throws ReadOnlyBufferException If the provided buffer is read-only.
+   */
+  default void appendTo(ByteBuffer byteBuffer) {
+    checkNotNull(byteBuffer);
+    for (int i = 0; i < size(); i++) {
+      byteBuffer.put(get(i));
+    }
+  }
+
+  /**
+   * Append the bytes of this value to the provided Vert.x {@link Buffer}.
+   *
+   * <p>
+   * Note that since a Vert.x {@link Buffer} will grow as necessary, this method never fails.
+   *
+   * @param buffer The {@link Buffer} to which to append this value.
+   */
+  default void appendTo(Buffer buffer) {
+    checkNotNull(buffer);
+    for (int i = 0; i < size(); i++) {
+      buffer.appendByte(get(i));
+    }
+  }
+
+  /**
+   * Append this value as a sequence of hexadecimal characters.
+   *
+   * @param appendable The appendable
+   * @param <T> The appendable type.
+   * @return The appendable.
+   * @throws IOException If an IO error occurs.
+   */
+  default <T extends Appendable> T appendHexTo(T appendable) throws IOException {
+    int size = size();
+    for (int i = 0; i < size; i++) {
+      byte b = get(i);
+      appendable.append(AbstractBytes.HEX_CODE[b >> 4 & 15]);
+      appendable.append(AbstractBytes.HEX_CODE[b & 15]);
+    }
+    return appendable;
+  }
+
+  /**
+   * Return the number of bytes in common between this set of bytes and another.
+   *
+   * @param other The bytes to compare to.
+   * @return The number of common bytes.
+   */
+  default int commonPrefixLength(Bytes other) {
+    checkNotNull(other);
+    int ourSize = size();
+    int otherSize = other.size();
+    int i = 0;
+    while (i < ourSize && i < otherSize && get(i) == other.get(i)) {
+      i++;
+    }
+    return i;
+  }
+
+  /**
+   * Return a slice over the common prefix between this set of bytes and another.
+   *
+   * @param other The bytes to compare to.
+   * @return A slice covering the common prefix.
+   */
+  default Bytes commonPrefix(Bytes other) {
+    return slice(0, commonPrefixLength(other));
+  }
+
+  /**
+   * Return a slice of representing the same value but without any leading zero bytes.
+   *
+   * @return {@code value} if its left-most byte is non zero, or a slice that exclude any leading zero bytes.
+   */
+  default Bytes trimLeadingZeros() {
+    int size = size();
+    for (int i = 0; i < size; i++) {
+      if (get(i) != 0) {
+        return slice(i);
+      }
+    }
+    return Bytes.EMPTY;
+  }
+
+  /**
+   * Update the provided message digest with the bytes of this value.
+   *
+   * @param digest The digest to update.
+   */
+  default void update(MessageDigest digest) {
+    checkNotNull(digest);
+    digest.update(toArrayUnsafe());
+  }
+
+  /**
+   * Computes the reverse array of bytes of the current bytes.
+   *
+   * @return a new Bytes value, containing the bytes in reverse order
+   */
+  default Bytes reverse() {
+    byte[] reverse = new byte[size()];
+    for (int i = 0; i < size(); i++) {
+      reverse[size() - i - 1] = get(i);
+    }
+    return Bytes.wrap(reverse);
+  }
+
+  /**
+   * Extract the bytes of this value into a byte array.
+   *
+   * @return A byte array with the same content than this value.
+   */
+  default byte[] toArray() {
+    int size = size();
+    byte[] array = new byte[size];
+    for (int i = 0; i < size; i++) {
+      array[i] = get(i);
+    }
+    return array;
+  }
+
+  /**
+   * Get the bytes represented by this value as byte array.
+   *
+   * <p>
+   * Contrarily to {@link #toArray()}, this may avoid allocating a new array and directly return the backing array of
+   * this value if said value is array backed and doing so is possible. As such, modifications to the returned array may
+   * or may not impact this value. As such, this method should be used with care and hence the "unsafe" moniker.
+   *
+   * @return A byte array with the same content than this value, which may or may not be the direct backing of this
+   *         value.
+   */
+  default byte[] toArrayUnsafe() {
+    return toArray();
+  }
+
+  /**
+   * Return the hexadecimal string representation of this value.
+   *
+   * @return The hexadecimal representation of this value, starting with "0x".
+   */
+  @Override
+  String toString();
+
+  /**
+   * @return This value represented as hexadecimal, starting with "0x".
+   */
+  default String toHexString() {
+    try {
+      return appendHexTo(new StringBuilder("0x")).toString();
+    } catch (IOException e) {
+      // not thrown
+      throw new RuntimeException(e);
+    }
+  }
+
+  /** @return This value represented as a minimal hexadecimal string (without any leading zero). */
+  default String toShortHexString() {
+    StringBuilder hex;
+    try {
+      hex = appendHexTo(new StringBuilder());
+    } catch (IOException e) {
+      // not thrown
+      throw new RuntimeException(e);
+    }
+
+    int i = 0;
+    while (i < hex.length() && hex.charAt(i) == '0') {
+      i++;
+    }
+    return "0x" + hex.substring(i);
+  }
+
+  /**
+   * @return This value represented as base 64.
+   */
+  default String toBase64String() {
+    return Base64.getEncoder().encodeToString(toArrayUnsafe());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
new file mode 100644
index 0000000..f962f52
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes32.java
@@ -0,0 +1,282 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.security.SecureRandom;
+import java.util.Random;
+
+/**
+ * A {@link Bytes} value that is guaranteed to contain exactly 32 bytes.
+ */
+public interface Bytes32 extends Bytes {
+  /** The number of bytes in this value - i.e. 32 */
+  int SIZE = 32;
+
+  /** A {@code Bytes32} containing all zero bytes */
+  Bytes32 ZERO = wrap(new byte[32]);
+
+  /**
+   * Wrap the provided byte array, which must be of length 32, as a {@link Bytes32}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} will be reflected in the
+   * returned value.
+   *
+   * @param bytes The bytes to wrap.
+   * @return A {@link Bytes32} wrapping {@code value}.
+   * @throws IllegalArgumentException if {@code value.length != 32}.
+   */
+  static Bytes32 wrap(byte[] bytes) {
+    checkNotNull(bytes);
+    checkArgument(bytes.length == SIZE, "Expected %s bytes but got %s", SIZE, bytes.length);
+    return wrap(bytes, 0);
+  }
+
+  /**
+   * Wrap a slice/sub-part of the provided array as a {@link Bytes32}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} within the wrapped parts
+   * will be reflected in the returned value.
+   *
+   * @param bytes The bytes to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, i).get(0) == value[i]}.
+   * @return A {@link Bytes32} that exposes the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + 32} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.length &gt; 0 && offset >=
+   *     value.length)}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + 32 &gt; value.length}.
+   */
+  static Bytes32 wrap(byte[] bytes, int offset) {
+    checkNotNull(bytes);
+    return new ArrayWrappingBytes32(bytes, offset);
+  }
+
+  /**
+   * Wrap a the provided value, which must be of size 32, as a {@link Bytes32}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} will be reflected in the
+   * returned value.
+   *
+   * @param value The bytes to wrap.
+   * @return A {@link Bytes32} that exposes the bytes of {@code value}.
+   * @throws IllegalArgumentException if {@code value.size() != 32}.
+   */
+  static Bytes32 wrap(Bytes value) {
+    checkNotNull(value);
+    if (value instanceof Bytes32) {
+      return (Bytes32) value;
+    }
+    return DelegatingBytes32.delegateTo(value);
+  }
+
+  /**
+   * Wrap a slice/sub-part of the provided value as a {@link Bytes32}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} within the wrapped parts
+   * will be reflected in the returned value.
+   *
+   * @param value The bytes to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, i).get(0) == value.get(i)}.
+   * @return A {@link Bytes32} that exposes the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + 32} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.size() &gt; 0 && offset >=
+   *     value.size())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + 32 &gt; value.size()}.
+   */
+  static Bytes32 wrap(Bytes value, int offset) {
+    checkNotNull(value);
+    if (value instanceof Bytes32) {
+      return (Bytes32) value;
+    }
+    Bytes slice = value.slice(offset, Bytes32.SIZE);
+    if (slice instanceof Bytes32) {
+      return (Bytes32) slice;
+    }
+    return DelegatingBytes32.delegateTo(slice);
+  }
+
+  /**
+   * Left pad a {@link Bytes} value with zero bytes to create a {@link Bytes32}.
+   *
+   * @param value The bytes value pad.
+   * @return A {@link Bytes32} that exposes the left-padded bytes of {@code value}.
+   * @throws IllegalArgumentException if {@code value.size() &gt; 32}.
+   */
+  static Bytes32 leftPad(Bytes value) {
+    checkNotNull(value);
+    if (value instanceof Bytes32) {
+      return (Bytes32) value;
+    }
+    checkArgument(value.size() <= SIZE, "Expected at most %s bytes but got %s", SIZE, value.size());
+    MutableBytes32 result = MutableBytes32.create();
+    value.copyTo(result, SIZE - value.size());
+    return result;
+  }
+
+  /**
+   * Right pad a {@link Bytes} value with zero bytes to create a {@link Bytes32}.
+   *
+   * @param value The bytes value pad.
+   * @return A {@link Bytes32} that exposes the rightw-padded bytes of {@code value}.
+   * @throws IllegalArgumentException if {@code value.size() &gt; 32}.
+   */
+  static Bytes32 rightPad(Bytes value) {
+    checkNotNull(value);
+    if (value instanceof Bytes32) {
+      return (Bytes32) value;
+    }
+    checkArgument(value.size() <= SIZE, "Expected at most %s bytes but got %s", SIZE, value.size());
+    MutableBytes32 result = MutableBytes32.create();
+    value.copyTo(result, 0);
+    return result;
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes32}.
+   *
+   * <p>
+   * This method is lenient in that {@code str} may of an odd length, in which case it will behave exactly as if it had
+   * an additional 0 in front.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x". That representation may contain
+   *        less than 32 bytes, in which case the result is left padded with zeros (see {@link #fromHexStringStrict} if
+   *        this is not what you want).
+   * @return The value corresponding to {@code str}.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation or
+   *         contains more than 32 bytes.
+   */
+  static Bytes32 fromHexStringLenient(CharSequence str) {
+    checkNotNull(str);
+    return wrap(BytesValues.fromRawHexString(str, SIZE, true));
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes32}.
+   *
+   * <p>
+   * This method is strict in that {@code str} must of an even length.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x". That representation may contain
+   *        less than 32 bytes, in which case the result is left padded with zeros (see {@link #fromHexStringStrict} if
+   *        this is not what you want).
+   * @return The value corresponding to {@code str}.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation, is of an
+   *         odd length, or contains more than 32 bytes.
+   */
+  static Bytes32 fromHexString(CharSequence str) {
+    checkNotNull(str);
+    return wrap(BytesValues.fromRawHexString(str, SIZE, false));
+  }
+
+  /**
+   * Generate random bytes.
+   *
+   * @return A value containing random bytes.
+   */
+  static Bytes32 random() {
+    return random(new SecureRandom());
+  }
+
+  /**
+   * Generate random bytes.
+   *
+   * @param generator The generator for random bytes.
+   * @return A value containing random bytes.
+   */
+  static Bytes32 random(Random generator) {
+    byte[] array = new byte[32];
+    generator.nextBytes(array);
+    return wrap(array);
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes32}.
+   *
+   * <p>
+   * This method is extra strict in that {@code str} must of an even length and the provided representation must have
+   * exactly 32 bytes.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x".
+   * @return The value corresponding to {@code str}.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation, is of an
+   *         odd length or does not contain exactly 32 bytes.
+   */
+  static Bytes32 fromHexStringStrict(CharSequence str) {
+    checkNotNull(str);
+    return wrap(BytesValues.fromRawHexString(str, -1, false));
+  }
+
+  @Override
+  default int size() {
+    return SIZE;
+  }
+
+  /**
+   * Return a bit-wise AND of these bytes and the supplied bytes.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise AND.
+   */
+  default Bytes32 and(Bytes32 other) {
+    return and(other, MutableBytes32.create());
+  }
+
+  /**
+   * Return a bit-wise OR of these bytes and the supplied bytes.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise OR.
+   */
+  default Bytes32 or(Bytes32 other) {
+    return or(other, MutableBytes32.create());
+  }
+
+  /**
+   * Return a bit-wise XOR of these bytes and the supplied bytes.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise XOR.
+   */
+  default Bytes32 xor(Bytes32 other) {
+    return xor(other, MutableBytes32.create());
+  }
+
+  @Override
+  default Bytes32 not() {
+    return not(MutableBytes32.create());
+  }
+
+  @Override
+  default Bytes32 shiftRight(int distance) {
+    return shiftRight(distance, MutableBytes32.create());
+  }
+
+  @Override
+  default Bytes32 shiftLeft(int distance) {
+    return shiftLeft(distance, MutableBytes32.create());
+  }
+
+  @Override
+  Bytes32 copy();
+
+  @Override
+  MutableBytes32 mutableCopy();
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
new file mode 100644
index 0000000..c75b91f
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/Bytes48.java
@@ -0,0 +1,283 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.security.SecureRandom;
+import java.util.Random;
+
+/**
+ * A {@link Bytes} value that is guaranteed to contain exactly 48 bytes.
+ */
+public interface Bytes48 extends Bytes {
+  /** The number of bytes in this value - i.e. 48 */
+  int SIZE = 48;
+
+  /** A {@code Bytes48} containing all zero bytes */
+  Bytes48 ZERO = wrap(new byte[SIZE]);
+
+  /**
+   * Wrap the provided byte array, which must be of length 48, as a {@link Bytes48}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} will be reflected in the
+   * returned value.
+   *
+   * @param bytes The bytes to wrap.
+   * @return A {@link Bytes48} wrapping {@code value}.
+   * @throws IllegalArgumentException if {@code value.length != 48}.
+   */
+  static Bytes48 wrap(byte[] bytes) {
+    checkNotNull(bytes);
+    checkArgument(bytes.length == SIZE, "Expected %s bytes but got %s", SIZE, bytes.length);
+    return wrap(bytes, 0);
+  }
+
+  /**
+   * Wrap a slice/sub-part of the provided array as a {@link Bytes48}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} within the wrapped parts
+   * will be reflected in the returned value.
+   *
+   * @param bytes The bytes to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, i).get(0) == value[i]}.
+   * @return A {@link Bytes48} that exposes the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + 48} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.length &gt; 0 && offset >=
+   *     value.length)}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + 48 &gt; value.length}.
+   */
+  static Bytes48 wrap(byte[] bytes, int offset) {
+    checkNotNull(bytes);
+    return new ArrayWrappingBytes48(bytes, offset);
+  }
+
+  /**
+   * Wrap a the provided value, which must be of size 48, as a {@link Bytes48}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} will be reflected in the
+   * returned value.
+   *
+   * @param value The bytes to wrap.
+   * @return A {@link Bytes48} that exposes the bytes of {@code value}.
+   * @throws IllegalArgumentException if {@code value.size() != 48}.
+   */
+  static Bytes48 wrap(Bytes value) {
+    checkNotNull(value);
+    if (value instanceof Bytes48) {
+      return (Bytes48) value;
+    }
+    return DelegatingBytes48.delegateTo(value);
+  }
+
+  /**
+   * Wrap a slice/sub-part of the provided value as a {@link Bytes48}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} within the wrapped parts
+   * will be reflected in the returned value.
+   *
+   * @param value The bytes to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, i).get(0) == value.get(i)}.
+   * @return A {@link Bytes48} that exposes the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + 48} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.size() &gt; 0 && offset >=
+   *     value.size())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + 48 &gt; value.size()}.
+   */
+  static Bytes48 wrap(Bytes value, int offset) {
+    checkNotNull(value);
+    if (value instanceof Bytes48) {
+      return (Bytes48) value;
+    }
+    Bytes slice = value.slice(offset, Bytes48.SIZE);
+    if (slice instanceof Bytes48) {
+      return (Bytes48) slice;
+    }
+    return DelegatingBytes48.delegateTo(slice);
+  }
+
+  /**
+   * Left pad a {@link Bytes} value with zero bytes to create a {@link Bytes48}.
+   *
+   * @param value The bytes value pad.
+   * @return A {@link Bytes48} that exposes the left-padded bytes of {@code value}.
+   * @throws IllegalArgumentException if {@code value.size() &gt; 48}.
+   */
+  static Bytes48 leftPad(Bytes value) {
+    checkNotNull(value);
+    if (value instanceof Bytes48) {
+      return (Bytes48) value;
+    }
+    checkArgument(value.size() <= SIZE, "Expected at most %s bytes but got %s", SIZE, value.size());
+    MutableBytes48 result = MutableBytes48.create();
+    value.copyTo(result, SIZE - value.size());
+    return result;
+  }
+
+
+  /**
+   * Right pad a {@link Bytes} value with zero bytes to create a {@link Bytes48}.
+   *
+   * @param value The bytes value pad.
+   * @return A {@link Bytes48} that exposes the rightw-padded bytes of {@code value}.
+   * @throws IllegalArgumentException if {@code value.size() &gt; 48}.
+   */
+  static Bytes48 rightPad(Bytes value) {
+    checkNotNull(value);
+    if (value instanceof Bytes48) {
+      return (Bytes48) value;
+    }
+    checkArgument(value.size() <= SIZE, "Expected at most %s bytes but got %s", SIZE, value.size());
+    MutableBytes48 result = MutableBytes48.create();
+    value.copyTo(result, 0);
+    return result;
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes48}.
+   *
+   * <p>
+   * This method is lenient in that {@code str} may of an odd length, in which case it will behave exactly as if it had
+   * an additional 0 in front.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x". That representation may contain
+   *        less than 48 bytes, in which case the result is left padded with zeros (see {@link #fromHexStringStrict} if
+   *        this is not what you want).
+   * @return The value corresponding to {@code str}.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation or
+   *         contains more than 48 bytes.
+   */
+  static Bytes48 fromHexStringLenient(CharSequence str) {
+    checkNotNull(str);
+    return wrap(BytesValues.fromRawHexString(str, SIZE, true));
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes48}.
+   *
+   * <p>
+   * This method is strict in that {@code str} must of an even length.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x". That representation may contain
+   *        less than 48 bytes, in which case the result is left padded with zeros (see {@link #fromHexStringStrict} if
+   *        this is not what you want).
+   * @return The value corresponding to {@code str}.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation, is of an
+   *         odd length, or contains more than 48 bytes.
+   */
+  static Bytes48 fromHexString(CharSequence str) {
+    checkNotNull(str);
+    return wrap(BytesValues.fromRawHexString(str, SIZE, false));
+  }
+
+  /**
+   * Generate random bytes.
+   *
+   * @return A value containing random bytes.
+   */
+  static Bytes48 random() {
+    return random(new SecureRandom());
+  }
+
+  /**
+   * Generate random bytes.
+   *
+   * @param generator The generator for random bytes.
+   * @return A value containing random bytes.
+   */
+  static Bytes48 random(Random generator) {
+    byte[] array = new byte[48];
+    generator.nextBytes(array);
+    return wrap(array);
+  }
+
+  /**
+   * Parse a hexadecimal string into a {@link Bytes48}.
+   *
+   * <p>
+   * This method is extra strict in that {@code str} must of an even length and the provided representation must have
+   * exactly 48 bytes.
+   *
+   * @param str The hexadecimal string to parse, which may or may not start with "0x".
+   * @return The value corresponding to {@code str}.
+   * @throws IllegalArgumentException if {@code str} does not correspond to a valid hexadecimal representation, is of an
+   *         odd length or does not contain exactly 48 bytes.
+   */
+  static Bytes48 fromHexStringStrict(CharSequence str) {
+    checkNotNull(str);
+    return wrap(BytesValues.fromRawHexString(str, -1, false));
+  }
+
+  @Override
+  default int size() {
+    return SIZE;
+  }
+
+  /**
+   * Return a bit-wise AND of these bytes and the supplied bytes.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise AND.
+   */
+  default Bytes48 and(Bytes48 other) {
+    return and(other, MutableBytes48.create());
+  }
+
+  /**
+   * Return a bit-wise OR of these bytes and the supplied bytes.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise OR.
+   */
+  default Bytes48 or(Bytes48 other) {
+    return or(other, MutableBytes48.create());
+  }
+
+  /**
+   * Return a bit-wise XOR of these bytes and the supplied bytes.
+   *
+   * @param other The bytes to perform the operation with.
+   * @return The result of a bit-wise XOR.
+   */
+  default Bytes48 xor(Bytes48 other) {
+    return xor(other, MutableBytes48.create());
+  }
+
+  @Override
+  default Bytes48 not() {
+    return not(MutableBytes48.create());
+  }
+
+  @Override
+  default Bytes48 shiftRight(int distance) {
+    return shiftRight(distance, MutableBytes48.create());
+  }
+
+  @Override
+  default Bytes48 shiftLeft(int distance) {
+    return shiftLeft(distance, MutableBytes48.create());
+  }
+
+  @Override
+  Bytes48 copy();
+
+  @Override
+  MutableBytes48 mutableCopy();
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java b/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
new file mode 100644
index 0000000..4bde33e
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/BytesValues.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+final class BytesValues {
+  private BytesValues() {}
+
+  static final int MAX_UNSIGNED_SHORT = (1 << 16) - 1;
+  static final long MAX_UNSIGNED_INT = (1L << 32) - 1;
+  static final long MAX_UNSIGNED_LONG = Long.MAX_VALUE;
+
+  static Bytes fromHexString(CharSequence str, int destSize, boolean lenient) {
+    return Bytes.wrap(fromRawHexString(str, destSize, lenient));
+  }
+
+  static byte[] fromRawHexString(CharSequence str, int destSize, boolean lenient) {
+    int len = str.length();
+    CharSequence hex = str;
+    if (len >= 2 && str.charAt(0) == '0' && str.charAt(1) == 'x') {
+      hex = str.subSequence(2, len);
+      len -= 2;
+    }
+
+    int idxShift = 0;
+    if (len % 2 != 0) {
+      if (!lenient) {
+        throw new IllegalArgumentException("Invalid odd-length hex binary representation");
+      }
+
+      hex = "0" + hex;
+      len += 1;
+      idxShift = 1;
+    }
+
+    int size = len / 2;
+    if (destSize < 0) {
+      destSize = size;
+    } else {
+      checkArgument(size <= destSize, "Hex value is too large: expected at most %s bytes but got %s", destSize, size);
+    }
+
+    byte[] out = new byte[destSize];
+
+    int destOffset = (destSize - size);
+    for (int i = 0; i < len; i += 2) {
+      int h = hexToBin(hex.charAt(i));
+      int l = hexToBin(hex.charAt(i + 1));
+      if (h == -1) {
+        throw new IllegalArgumentException(
+            String.format(
+                "Illegal character '%c' found at index %d in hex binary representation",
+                hex.charAt(i),
+                i - idxShift));
+      }
+      if (l == -1) {
+        throw new IllegalArgumentException(
+            String.format(
+                "Illegal character '%c' found at index %d in hex binary representation",
+                hex.charAt(i + 1),
+                i + 1 - idxShift));
+      }
+
+      out[destOffset + (i / 2)] = (byte) (h * 16 + l);
+    }
+    return out;
+  }
+
+  private static int hexToBin(char ch) {
+    if ('0' <= ch && ch <= '9') {
+      return ch - 48;
+    } else if ('A' <= ch && ch <= 'F') {
+      return ch - 65 + 10;
+    } else {
+      return 'a' <= ch && ch <= 'f' ? ch - 97 + 10 : -1;
+    }
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
new file mode 100644
index 0000000..c12a189
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/ConcatenatedBytes.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+final class ConcatenatedBytes extends AbstractBytes {
+
+  private final Bytes[] values;
+  private final int size;
+
+  private ConcatenatedBytes(Bytes[] values, int totalSize) {
+    this.values = values;
+    this.size = totalSize;
+  }
+
+  static Bytes wrap(Bytes... values) {
+    if (values.length == 0) {
+      return EMPTY;
+    }
+    if (values.length == 1) {
+      return values[0];
+    }
+
+    int count = 0;
+    int totalSize = 0;
+
+    for (Bytes value : values) {
+      int size = value.size();
+      try {
+        totalSize = Math.addExact(totalSize, size);
+      } catch (ArithmeticException e) {
+        throw new IllegalArgumentException("Combined length of values is too long (> Integer.MAX_VALUE)");
+      }
+      if (value instanceof ConcatenatedBytes) {
+        count += ((ConcatenatedBytes) value).values.length;
+      } else if (size != 0) {
+        count += 1;
+      }
+    }
+
+    if (count == 0) {
+      return Bytes.EMPTY;
+    }
+    if (count == values.length) {
+      return new ConcatenatedBytes(values, totalSize);
+    }
+
+    Bytes[] concatenated = new Bytes[count];
+    int i = 0;
+    for (Bytes value : values) {
+      if (value instanceof ConcatenatedBytes) {
+        Bytes[] subvalues = ((ConcatenatedBytes) value).values;
+        System.arraycopy(subvalues, 0, concatenated, i, subvalues.length);
+        i += subvalues.length;
+      } else if (value.size() != 0) {
+        concatenated[i++] = value;
+      }
+    }
+    return new ConcatenatedBytes(concatenated, totalSize);
+  }
+
+  @Override
+  public int size() {
+    return size;
+  }
+
+  @Override
+  public byte get(int i) {
+    checkElementIndex(i, size);
+    for (Bytes value : values) {
+      int vSize = value.size();
+      if (i < vSize) {
+        return value.get(i);
+      }
+      i -= vSize;
+    }
+    throw new IllegalStateException("element sizes do not match total size");
+  }
+
+  @Override
+  public Bytes slice(int i, final int length) {
+    if (i == 0 && length == size) {
+      return this;
+    }
+    if (length == 0) {
+      return Bytes.EMPTY;
+    }
+
+    checkElementIndex(i, size);
+    checkArgument(
+        (i + length) <= size,
+        "Provided length %s is too large: the value has size %s and has only %s bytes from %s",
+        length,
+        size,
+        size - i,
+        i);
+
+    int j = 0;
+    int vSize;
+    while (true) {
+      vSize = values[j].size();
+      if (i < vSize) {
+        break;
+      }
+      i -= vSize;
+      ++j;
+    }
+
+    if ((i + length) < vSize) {
+      return values[j].slice(i, length);
+    }
+
+    int remaining = length - (vSize - i);
+    Bytes firstValue = this.values[j].slice(i);
+    int firstOffset = j;
+
+    while (remaining > 0) {
+      if (++j >= this.values.length) {
+        throw new IllegalStateException("element sizes do not match total size");
+      }
+      vSize = this.values[j].size();
+      if (length < vSize) {
+        break;
+      }
+      remaining -= vSize;
+    }
+
+    Bytes[] combined = new Bytes[j - firstOffset + 1];
+    combined[0] = firstValue;
+    if (remaining > 0) {
+      if (combined.length > 2) {
+        System.arraycopy(this.values, firstOffset + 1, combined, 1, combined.length - 2);
+      }
+      combined[combined.length - 1] = this.values[j].slice(0, remaining);
+    } else if (combined.length > 1) {
+      System.arraycopy(this.values, firstOffset + 1, combined, 1, combined.length - 1);
+    }
+    return new ConcatenatedBytes(combined, length);
+  }
+
+  @Override
+  public Bytes copy() {
+    if (size == 0) {
+      return Bytes.EMPTY;
+    }
+    MutableBytes result = MutableBytes.create(size);
+    copyToUnchecked(result, 0);
+    return result;
+  }
+
+  @Override
+  public MutableBytes mutableCopy() {
+    if (size == 0) {
+      return MutableBytes.EMPTY;
+    }
+    MutableBytes result = MutableBytes.create(size);
+    copyToUnchecked(result, 0);
+    return result;
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination, int destinationOffset) {
+    if (size == 0) {
+      return;
+    }
+
+    checkElementIndex(destinationOffset, destination.size());
+    checkArgument(
+        destination.size() - destinationOffset >= size,
+        "Cannot copy %s bytes, destination has only %s bytes from index %s",
+        size,
+        destination.size() - destinationOffset,
+        destinationOffset);
+
+    copyToUnchecked(destination, destinationOffset);
+  }
+
+  @Override
+  public byte[] toArray() {
+    if (size == 0) {
+      return new byte[0];
+    }
+
+    MutableBytes result = MutableBytes.create(size);
+    copyToUnchecked(result, 0);
+    return result.toArrayUnsafe();
+  }
+
+  private void copyToUnchecked(MutableBytes destination, int destinationOffset) {
+    int offset = 0;
+    for (Bytes value : values) {
+      int vSize = value.size();
+      if ((offset + vSize) > size) {
+        throw new IllegalStateException("element sizes do not match total size");
+      }
+      value.copyTo(destination, destinationOffset);
+      offset += vSize;
+      destinationOffset += vSize;
+    }
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
new file mode 100644
index 0000000..c1603b8
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes32.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.math.BigInteger;
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
+
+import io.vertx.core.buffer.Buffer;
+
+final class DelegatingBytes32 implements Bytes32 {
+
+  private final Bytes delegate;
+
+  private DelegatingBytes32(Bytes delegate) {
+    this.delegate = delegate;
+  }
+
+  static Bytes32 delegateTo(Bytes value) {
+    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, value.size());
+    return new DelegatingBytes32(value);
+  }
+
+  @Override
+  public int size() {
+    return Bytes32.SIZE;
+  }
+
+  @Override
+  public byte get(int i) {
+    return delegate.get(i);
+  }
+
+  @Override
+  public int getInt(int i) {
+    return delegate.getInt(i);
+  }
+
+  @Override
+  public int toInt() {
+    return delegate.toInt();
+  }
+
+  @Override
+  public long getLong(int i) {
+    return delegate.getLong(i);
+  }
+
+  @Override
+  public long toLong() {
+    return delegate.toLong();
+  }
+
+  @Override
+  public BigInteger toBigInteger() {
+    return delegate.toBigInteger();
+  }
+
+  @Override
+  public BigInteger toUnsignedBigInteger() {
+    return delegate.toUnsignedBigInteger();
+  }
+
+  @Override
+  public boolean isZero() {
+    return delegate.isZero();
+  }
+
+  @Override
+  public int numberOfLeadingZeros() {
+    return delegate.numberOfLeadingZeros();
+  }
+
+  @Override
+  public int numberOfLeadingZeroBytes() {
+    return delegate.numberOfLeadingZeroBytes();
+  }
+
+  @Override
+  public boolean hasLeadingZeroByte() {
+    return delegate.hasLeadingZeroByte();
+  }
+
+  @Override
+  public boolean hasLeadingZero() {
+    return delegate.hasLeadingZero();
+  }
+
+  @Override
+  public int bitLength() {
+    return delegate.bitLength();
+  }
+
+  @Override
+  public Bytes and(Bytes other) {
+    return delegate.and(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T and(Bytes other, T result) {
+    return delegate.and(other, result);
+  }
+
+  @Override
+  public Bytes or(Bytes other) {
+    return delegate.or(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T or(Bytes other, T result) {
+    return delegate.or(other, result);
+  }
+
+  @Override
+  public Bytes xor(Bytes other) {
+    return delegate.xor(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T xor(Bytes other, T result) {
+    return delegate.xor(other, result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T not(T result) {
+    return delegate.not(result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T shiftRight(int distance, T result) {
+    return delegate.shiftRight(distance, result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T shiftLeft(int distance, T result) {
+    return delegate.shiftLeft(distance, result);
+  }
+
+  @Override
+  public Bytes slice(int index) {
+    return delegate.slice(index);
+  }
+
+  @Override
+  public Bytes slice(int index, int length) {
+    return delegate.slice(index, length);
+  }
+
+  @Override
+  public Bytes32 copy() {
+    return Bytes32.wrap(toArray());
+  }
+
+  @Override
+  public MutableBytes32 mutableCopy() {
+    return MutableBytes32.wrap(toArray());
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination) {
+    delegate.copyTo(destination);
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination, int destinationOffset) {
+    delegate.copyTo(destination, destinationOffset);
+  }
+
+  @Override
+  public void appendTo(ByteBuffer byteBuffer) {
+    delegate.appendTo(byteBuffer);
+  }
+
+  @Override
+  public void appendTo(Buffer buffer) {
+    delegate.appendTo(buffer);
+  }
+
+  @Override
+  public int commonPrefixLength(Bytes other) {
+    return delegate.commonPrefixLength(other);
+  }
+
+  @Override
+  public Bytes commonPrefix(Bytes other) {
+    return delegate.commonPrefix(other);
+  }
+
+  @Override
+  public void update(MessageDigest digest) {
+    delegate.update(digest);
+  }
+
+  @Override
+  public byte[] toArray() {
+    return delegate.toArray();
+  }
+
+  @Override
+  public byte[] toArrayUnsafe() {
+    return delegate.toArrayUnsafe();
+  }
+
+  @Override
+  public String toString() {
+    return delegate.toString();
+  }
+
+  @Override
+  public String toHexString() {
+    return delegate.toHexString();
+  }
+
+  @Override
+  public String toShortHexString() {
+    return delegate.toShortHexString();
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    return delegate.equals(obj);
+  }
+
+  @Override
+  public int hashCode() {
+    return delegate.hashCode();
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
new file mode 100644
index 0000000..b89cbea
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingBytes48.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.math.BigInteger;
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
+
+import io.vertx.core.buffer.Buffer;
+
+final class DelegatingBytes48 implements Bytes48 {
+
+  private final Bytes delegate;
+
+  private DelegatingBytes48(Bytes delegate) {
+    this.delegate = delegate;
+  }
+
+  static Bytes48 delegateTo(Bytes value) {
+    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, value.size());
+    return new DelegatingBytes48(value);
+  }
+
+  @Override
+  public int size() {
+    return Bytes48.SIZE;
+  }
+
+  @Override
+  public byte get(int i) {
+    return delegate.get(i);
+  }
+
+  @Override
+  public int getInt(int i) {
+    return delegate.getInt(i);
+  }
+
+  @Override
+  public int toInt() {
+    return delegate.toInt();
+  }
+
+  @Override
+  public long getLong(int i) {
+    return delegate.getLong(i);
+  }
+
+  @Override
+  public long toLong() {
+    return delegate.toLong();
+  }
+
+  @Override
+  public BigInteger toBigInteger() {
+    return delegate.toBigInteger();
+  }
+
+  @Override
+  public BigInteger toUnsignedBigInteger() {
+    return delegate.toUnsignedBigInteger();
+  }
+
+  @Override
+  public boolean isZero() {
+    return delegate.isZero();
+  }
+
+  @Override
+  public int numberOfLeadingZeros() {
+    return delegate.numberOfLeadingZeros();
+  }
+
+  @Override
+  public int numberOfLeadingZeroBytes() {
+    return delegate.numberOfLeadingZeroBytes();
+  }
+
+  @Override
+  public boolean hasLeadingZeroByte() {
+    return delegate.hasLeadingZeroByte();
+  }
+
+  @Override
+  public boolean hasLeadingZero() {
+    return delegate.hasLeadingZero();
+  }
+
+  @Override
+  public int bitLength() {
+    return delegate.bitLength();
+  }
+
+  @Override
+  public Bytes and(Bytes other) {
+    return delegate.and(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T and(Bytes other, T result) {
+    return delegate.and(other, result);
+  }
+
+  @Override
+  public Bytes or(Bytes other) {
+    return delegate.or(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T or(Bytes other, T result) {
+    return delegate.or(other, result);
+  }
+
+  @Override
+  public Bytes xor(Bytes other) {
+    return delegate.xor(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T xor(Bytes other, T result) {
+    return delegate.xor(other, result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T not(T result) {
+    return delegate.not(result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T shiftRight(int distance, T result) {
+    return delegate.shiftRight(distance, result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T shiftLeft(int distance, T result) {
+    return delegate.shiftLeft(distance, result);
+  }
+
+  @Override
+  public Bytes slice(int index) {
+    return delegate.slice(index);
+  }
+
+  @Override
+  public Bytes slice(int index, int length) {
+    return delegate.slice(index, length);
+  }
+
+  @Override
+  public Bytes48 copy() {
+    return Bytes48.wrap(toArray());
+  }
+
+  @Override
+  public MutableBytes48 mutableCopy() {
+    return MutableBytes48.wrap(toArray());
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination) {
+    delegate.copyTo(destination);
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination, int destinationOffset) {
+    delegate.copyTo(destination, destinationOffset);
+  }
+
+  @Override
+  public void appendTo(ByteBuffer byteBuffer) {
+    delegate.appendTo(byteBuffer);
+  }
+
+  @Override
+  public void appendTo(Buffer buffer) {
+    delegate.appendTo(buffer);
+  }
+
+  @Override
+  public int commonPrefixLength(Bytes other) {
+    return delegate.commonPrefixLength(other);
+  }
+
+  @Override
+  public Bytes commonPrefix(Bytes other) {
+    return delegate.commonPrefix(other);
+  }
+
+  @Override
+  public void update(MessageDigest digest) {
+    delegate.update(digest);
+  }
+
+  @Override
+  public byte[] toArray() {
+    return delegate.toArray();
+  }
+
+  @Override
+  public byte[] toArrayUnsafe() {
+    return delegate.toArrayUnsafe();
+  }
+
+  @Override
+  public String toString() {
+    return delegate.toString();
+  }
+
+  @Override
+  public String toHexString() {
+    return delegate.toHexString();
+  }
+
+  @Override
+  public String toShortHexString() {
+    return delegate.toShortHexString();
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    return delegate.equals(obj);
+  }
+
+  @Override
+  public int hashCode() {
+    return delegate.hashCode();
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
new file mode 100644
index 0000000..a273db8
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes32.java
@@ -0,0 +1,280 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.math.BigInteger;
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
+
+import io.vertx.core.buffer.Buffer;
+
+final class DelegatingMutableBytes32 implements MutableBytes32 {
+
+  private final MutableBytes delegate;
+
+  private DelegatingMutableBytes32(MutableBytes delegate) {
+    this.delegate = delegate;
+  }
+
+  static MutableBytes32 delegateTo(MutableBytes value) {
+    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, value.size());
+    return new DelegatingMutableBytes32(value);
+  }
+
+  @Override
+  public void set(int i, byte b) {
+    delegate.set(i, b);
+  }
+
+  @Override
+  public void setInt(int i, int value) {
+    delegate.setInt(i, value);
+  }
+
+  @Override
+  public void setLong(int i, long value) {
+    delegate.setLong(i, value);
+  }
+
+  @Override
+  public MutableBytes increment() {
+    return delegate.increment();
+  }
+
+  @Override
+  public MutableBytes decrement() {
+    return delegate.decrement();
+  }
+
+  @Override
+  public MutableBytes mutableSlice(int i, int length) {
+    return delegate.mutableSlice(i, length);
+  }
+
+  @Override
+  public void fill(byte b) {
+    delegate.fill(b);
+  }
+
+  @Override
+  public void clear() {
+    delegate.clear();
+  }
+
+  @Override
+  public int size() {
+    return delegate.size();
+  }
+
+  @Override
+  public byte get(int i) {
+    return delegate.get(i);
+  }
+
+  @Override
+  public int getInt(int i) {
+    return delegate.getInt(i);
+  }
+
+  @Override
+  public int toInt() {
+    return delegate.toInt();
+  }
+
+  @Override
+  public long getLong(int i) {
+    return delegate.getLong(i);
+  }
+
+  @Override
+  public long toLong() {
+    return delegate.toLong();
+  }
+
+  @Override
+  public BigInteger toBigInteger() {
+    return delegate.toBigInteger();
+  }
+
+  @Override
+  public BigInteger toUnsignedBigInteger() {
+    return delegate.toUnsignedBigInteger();
+  }
+
+  @Override
+  public boolean isZero() {
+    return delegate.isZero();
+  }
+
+  @Override
+  public int numberOfLeadingZeros() {
+    return delegate.numberOfLeadingZeros();
+  }
+
+  @Override
+  public int numberOfLeadingZeroBytes() {
+    return delegate.numberOfLeadingZeroBytes();
+  }
+
+  @Override
+  public boolean hasLeadingZeroByte() {
+    return delegate.hasLeadingZeroByte();
+  }
+
+  @Override
+  public boolean hasLeadingZero() {
+    return delegate.hasLeadingZero();
+  }
+
+  @Override
+  public int bitLength() {
+    return delegate.bitLength();
+  }
+
+  @Override
+  public Bytes and(Bytes other) {
+    return delegate.and(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T and(Bytes other, T result) {
+    return delegate.and(other, result);
+  }
+
+  @Override
+  public Bytes or(Bytes other) {
+    return delegate.or(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T or(Bytes other, T result) {
+    return delegate.or(other, result);
+  }
+
+  @Override
+  public Bytes xor(Bytes other) {
+    return delegate.xor(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T xor(Bytes other, T result) {
+    return delegate.xor(other, result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T not(T result) {
+    return delegate.not(result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T shiftRight(int distance, T result) {
+    return delegate.shiftRight(distance, result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T shiftLeft(int distance, T result) {
+    return delegate.shiftLeft(distance, result);
+  }
+
+  @Override
+  public Bytes slice(int index) {
+    return delegate.slice(index);
+  }
+
+  @Override
+  public Bytes slice(int index, int length) {
+    return delegate.slice(index, length);
+  }
+
+  @Override
+  public Bytes32 copy() {
+    return Bytes32.wrap(delegate.toArray());
+  }
+
+  @Override
+  public MutableBytes32 mutableCopy() {
+    return MutableBytes32.wrap(delegate.toArray());
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination) {
+    delegate.copyTo(destination);
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination, int destinationOffset) {
+    delegate.copyTo(destination, destinationOffset);
+  }
+
+  @Override
+  public void appendTo(ByteBuffer byteBuffer) {
+    delegate.appendTo(byteBuffer);
+  }
+
+  @Override
+  public void appendTo(Buffer buffer) {
+    delegate.appendTo(buffer);
+  }
+
+  @Override
+  public int commonPrefixLength(Bytes other) {
+    return delegate.commonPrefixLength(other);
+  }
+
+  @Override
+  public Bytes commonPrefix(Bytes other) {
+    return delegate.commonPrefix(other);
+  }
+
+  @Override
+  public void update(MessageDigest digest) {
+    delegate.update(digest);
+  }
+
+  @Override
+  public byte[] toArray() {
+    return delegate.toArray();
+  }
+
+  @Override
+  public byte[] toArrayUnsafe() {
+    return delegate.toArrayUnsafe();
+  }
+
+  @Override
+  public String toString() {
+    return delegate.toString();
+  }
+
+  @Override
+  public String toHexString() {
+    return delegate.toHexString();
+  }
+
+  @Override
+  public String toShortHexString() {
+    return delegate.toShortHexString();
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    return delegate.equals(obj);
+  }
+
+  @Override
+  public int hashCode() {
+    return delegate.hashCode();
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
new file mode 100644
index 0000000..a16e82b
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/DelegatingMutableBytes48.java
@@ -0,0 +1,280 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.math.BigInteger;
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
+
+import io.vertx.core.buffer.Buffer;
+
+final class DelegatingMutableBytes48 implements MutableBytes48 {
+
+  private final MutableBytes delegate;
+
+  private DelegatingMutableBytes48(MutableBytes delegate) {
+    this.delegate = delegate;
+  }
+
+  static MutableBytes48 delegateTo(MutableBytes value) {
+    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, value.size());
+    return new DelegatingMutableBytes48(value);
+  }
+
+  @Override
+  public void set(int i, byte b) {
+    delegate.set(i, b);
+  }
+
+  @Override
+  public void setInt(int i, int value) {
+    delegate.setInt(i, value);
+  }
+
+  @Override
+  public void setLong(int i, long value) {
+    delegate.setLong(i, value);
+  }
+
+  @Override
+  public MutableBytes increment() {
+    return delegate.increment();
+  }
+
+  @Override
+  public MutableBytes decrement() {
+    return delegate.decrement();
+  }
+
+  @Override
+  public MutableBytes mutableSlice(int i, int length) {
+    return delegate.mutableSlice(i, length);
+  }
+
+  @Override
+  public void fill(byte b) {
+    delegate.fill(b);
+  }
+
+  @Override
+  public void clear() {
+    delegate.clear();
+  }
+
+  @Override
+  public int size() {
+    return delegate.size();
+  }
+
+  @Override
+  public byte get(int i) {
+    return delegate.get(i);
+  }
+
+  @Override
+  public int getInt(int i) {
+    return delegate.getInt(i);
+  }
+
+  @Override
+  public int toInt() {
+    return delegate.toInt();
+  }
+
+  @Override
+  public long getLong(int i) {
+    return delegate.getLong(i);
+  }
+
+  @Override
+  public long toLong() {
+    return delegate.toLong();
+  }
+
+  @Override
+  public BigInteger toBigInteger() {
+    return delegate.toBigInteger();
+  }
+
+  @Override
+  public BigInteger toUnsignedBigInteger() {
+    return delegate.toUnsignedBigInteger();
+  }
+
+  @Override
+  public boolean isZero() {
+    return delegate.isZero();
+  }
+
+  @Override
+  public int numberOfLeadingZeros() {
+    return delegate.numberOfLeadingZeros();
+  }
+
+  @Override
+  public int numberOfLeadingZeroBytes() {
+    return delegate.numberOfLeadingZeroBytes();
+  }
+
+  @Override
+  public boolean hasLeadingZeroByte() {
+    return delegate.hasLeadingZeroByte();
+  }
+
+  @Override
+  public boolean hasLeadingZero() {
+    return delegate.hasLeadingZero();
+  }
+
+  @Override
+  public int bitLength() {
+    return delegate.bitLength();
+  }
+
+  @Override
+  public Bytes and(Bytes other) {
+    return delegate.and(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T and(Bytes other, T result) {
+    return delegate.and(other, result);
+  }
+
+  @Override
+  public Bytes or(Bytes other) {
+    return delegate.or(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T or(Bytes other, T result) {
+    return delegate.or(other, result);
+  }
+
+  @Override
+  public Bytes xor(Bytes other) {
+    return delegate.xor(other);
+  }
+
+  @Override
+  public <T extends MutableBytes> T xor(Bytes other, T result) {
+    return delegate.xor(other, result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T not(T result) {
+    return delegate.not(result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T shiftRight(int distance, T result) {
+    return delegate.shiftRight(distance, result);
+  }
+
+  @Override
+  public <T extends MutableBytes> T shiftLeft(int distance, T result) {
+    return delegate.shiftLeft(distance, result);
+  }
+
+  @Override
+  public Bytes slice(int index) {
+    return delegate.slice(index);
+  }
+
+  @Override
+  public Bytes slice(int index, int length) {
+    return delegate.slice(index, length);
+  }
+
+  @Override
+  public Bytes48 copy() {
+    return Bytes48.wrap(delegate.toArray());
+  }
+
+  @Override
+  public MutableBytes48 mutableCopy() {
+    return MutableBytes48.wrap(delegate.toArray());
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination) {
+    delegate.copyTo(destination);
+  }
+
+  @Override
+  public void copyTo(MutableBytes destination, int destinationOffset) {
+    delegate.copyTo(destination, destinationOffset);
+  }
+
+  @Override
+  public void appendTo(ByteBuffer byteBuffer) {
+    delegate.appendTo(byteBuffer);
+  }
+
+  @Override
+  public void appendTo(Buffer buffer) {
+    delegate.appendTo(buffer);
+  }
+
+  @Override
+  public int commonPrefixLength(Bytes other) {
+    return delegate.commonPrefixLength(other);
+  }
+
+  @Override
+  public Bytes commonPrefix(Bytes other) {
+    return delegate.commonPrefix(other);
+  }
+
+  @Override
+  public void update(MessageDigest digest) {
+    delegate.update(digest);
+  }
+
+  @Override
+  public byte[] toArray() {
+    return delegate.toArray();
+  }
+
+  @Override
+  public byte[] toArrayUnsafe() {
+    return delegate.toArrayUnsafe();
+  }
+
+  @Override
+  public String toString() {
+    return delegate.toString();
+  }
+
+  @Override
+  public String toHexString() {
+    return delegate.toHexString();
+  }
+
+  @Override
+  public String toShortHexString() {
+    return delegate.toShortHexString();
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    return delegate.equals(obj);
+  }
+
+  @Override
+  public int hashCode() {
+    return delegate.hashCode();
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
new file mode 100644
index 0000000..4dc30d2
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+import java.util.Arrays;
+
+class MutableArrayWrappingBytes extends ArrayWrappingBytes implements MutableBytes {
+
+  MutableArrayWrappingBytes(byte[] bytes) {
+    super(bytes);
+  }
+
+  MutableArrayWrappingBytes(byte[] bytes, int offset, int length) {
+    super(bytes, offset, length);
+  }
+
+  @Override
+  public void set(int i, byte b) {
+    // Check bounds because while the array access would throw, the error message would be confusing
+    // for the caller.
+    checkElementIndex(i, length);
+    bytes[offset + i] = b;
+  }
+
+  @Override
+  public MutableBytes increment() {
+    for (int i = length - 1; i >= offset; --i) {
+      if (bytes[i] == (byte) 0xFF) {
+        bytes[i] = (byte) 0x00;
+      } else {
+        ++bytes[i];
+        break;
+      }
+    }
+    return this;
+  }
+
+  @Override
+  public MutableBytes decrement() {
+    for (int i = length - 1; i >= offset; --i) {
+      if (bytes[i] == (byte) 0x00) {
+        bytes[i] = (byte) 0xFF;
+      } else {
+        --bytes[i];
+        break;
+      }
+    }
+    return this;
+  }
+
+  @Override
+  public MutableBytes mutableSlice(int i, int length) {
+    if (i == 0 && length == this.length)
+      return this;
+    if (length == 0)
+      return MutableBytes.EMPTY;
+
+    checkElementIndex(i, this.length);
+    checkArgument(
+        i + length <= this.length,
+        "Specified length %s is too large: the value has size %s and has only %s bytes from %s",
+        length,
+        this.length,
+        this.length - i,
+        i);
+    return length == Bytes32.SIZE ? new MutableArrayWrappingBytes32(bytes, offset + i)
+        : new MutableArrayWrappingBytes(bytes, offset + i, length);
+  }
+
+  @Override
+  public void fill(byte b) {
+    Arrays.fill(bytes, offset, offset + length, b);
+  }
+
+  @Override
+  public Bytes copy() {
+    return new ArrayWrappingBytes(toArray());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
new file mode 100644
index 0000000..c54aeaf
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes32.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+final class MutableArrayWrappingBytes32 extends MutableArrayWrappingBytes implements MutableBytes32 {
+
+  MutableArrayWrappingBytes32(byte[] bytes) {
+    this(bytes, 0);
+  }
+
+  MutableArrayWrappingBytes32(byte[] bytes, int offset) {
+    super(bytes, offset, SIZE);
+  }
+
+  @Override
+  public Bytes32 copy() {
+    return new ArrayWrappingBytes32(toArray());
+  }
+
+  @Override
+  public MutableBytes32 mutableCopy() {
+    return new MutableArrayWrappingBytes32(toArray());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
new file mode 100644
index 0000000..62b8b4f
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableArrayWrappingBytes48.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+final class MutableArrayWrappingBytes48 extends MutableArrayWrappingBytes implements MutableBytes48 {
+
+  MutableArrayWrappingBytes48(byte[] bytes) {
+    this(bytes, 0);
+  }
+
+  MutableArrayWrappingBytes48(byte[] bytes, int offset) {
+    super(bytes, offset, SIZE);
+  }
+
+  @Override
+  public Bytes48 copy() {
+    return new ArrayWrappingBytes48(toArray());
+  }
+
+  @Override
+  public MutableBytes48 mutableCopy() {
+    return new MutableArrayWrappingBytes48(toArray());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
new file mode 100644
index 0000000..b1feff5
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBufferWrappingBytes.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+import io.vertx.core.buffer.Buffer;
+
+final class MutableBufferWrappingBytes extends BufferWrappingBytes implements MutableBytes {
+
+  MutableBufferWrappingBytes(Buffer buffer) {
+    super(buffer);
+  }
+
+  MutableBufferWrappingBytes(Buffer buffer, int offset, int length) {
+    super(buffer, offset, length);
+  }
+
+  @Override
+  public void set(int i, byte b) {
+    buffer.setByte(i, b);
+  }
+
+  @Override
+  public void setInt(int i, int value) {
+    buffer.setInt(i, value);
+  }
+
+  @Override
+  public void setLong(int i, long value) {
+    buffer.setLong(i, value);
+  }
+
+  @Override
+  public MutableBytes mutableSlice(int i, int length) {
+    int size = size();
+    if (i == 0 && length == size) {
+      return this;
+    }
+    if (length == 0) {
+      return MutableBytes.EMPTY;
+    }
+
+    checkElementIndex(i, size);
+    checkArgument(
+        i + length <= size,
+        "Provided length %s is too big: the value has size %s and has only %s bytes from %s",
+        length,
+        size,
+        size - i,
+        i);
+
+    return new MutableBufferWrappingBytes(buffer.slice(i, i + length));
+  }
+
+  @Override
+  public Bytes copy() {
+    return Bytes.wrap(toArray());
+  }
+
+  @Override
+  public MutableBytes mutableCopy() {
+    return MutableBytes.wrap(toArray());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
new file mode 100644
index 0000000..6fe907d
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufWrappingBytes.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+import io.netty.buffer.ByteBuf;
+
+final class MutableByteBufWrappingBytes extends ByteBufWrappingBytes implements MutableBytes {
+
+  MutableByteBufWrappingBytes(ByteBuf buffer) {
+    super(buffer);
+  }
+
+  MutableByteBufWrappingBytes(ByteBuf buffer, int offset, int length) {
+    super(buffer, offset, length);
+  }
+
+  @Override
+  public void clear() {
+    byteBuf.setZero(0, byteBuf.capacity());
+  }
+
+  @Override
+  public void set(int i, byte b) {
+    byteBuf.setByte(i, b);
+  }
+
+  @Override
+  public void setInt(int i, int value) {
+    byteBuf.setInt(i, value);
+  }
+
+  @Override
+  public void setLong(int i, long value) {
+    byteBuf.setLong(i, value);
+  }
+
+  @Override
+  public MutableBytes mutableSlice(int i, int length) {
+    int size = size();
+    if (i == 0 && length == size) {
+      return this;
+    }
+    if (length == 0) {
+      return MutableBytes.EMPTY;
+    }
+
+    checkElementIndex(i, size);
+    checkArgument(
+        i + length <= size,
+        "Provided length %s is too big: the value has size %s and has only %s bytes from %s",
+        length,
+        size,
+        size - i,
+        i);
+
+    return new MutableByteBufWrappingBytes(byteBuf.slice(i, length));
+  }
+
+  @Override
+  public Bytes copy() {
+    return Bytes.wrap(toArray());
+  }
+
+  @Override
+  public MutableBytes mutableCopy() {
+    return MutableBytes.wrap(toArray());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
new file mode 100644
index 0000000..283e33a
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableByteBufferWrappingBytes.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+
+import java.nio.ByteBuffer;
+
+public class MutableByteBufferWrappingBytes extends ByteBufferWrappingBytes implements MutableBytes {
+
+  MutableByteBufferWrappingBytes(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
+  MutableByteBufferWrappingBytes(ByteBuffer byteBuffer, int offset, int length) {
+    super(byteBuffer, offset, length);
+  }
+
+  @Override
+  public void setInt(int i, int value) {
+    byteBuffer.putInt(offset + i, value);
+  }
+
+  @Override
+  public void setLong(int i, long value) {
+    byteBuffer.putLong(offset + i, value);
+  }
+
+  @Override
+  public void set(int i, byte b) {
+    byteBuffer.put(offset + i, b);
+  }
+
+  @Override
+  public MutableBytes mutableSlice(int i, int length) {
+    if (i == 0 && length == this.length) {
+      return this;
+    }
+    if (length == 0) {
+      return MutableBytes.EMPTY;
+    }
+
+    checkElementIndex(i, this.length);
+    checkArgument(
+        i + length <= this.length,
+        "Provided length %s is too big: the value has size %s and has only %s bytes from %s",
+        length,
+        this.length,
+        this.length - i,
+        i);
+
+    return new MutableByteBufferWrappingBytes(byteBuffer, offset + i, length);
+  }
+
+  @Override
+  public Bytes copy() {
+    return new ArrayWrappingBytes(toArray());
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
new file mode 100644
index 0000000..3ef2f85
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes.java
@@ -0,0 +1,363 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+
+import java.nio.ByteBuffer;
+
+import io.netty.buffer.ByteBuf;
+import io.vertx.core.buffer.Buffer;
+
+/**
+ * A mutable {@link Bytes} value.
+ */
+public interface MutableBytes extends Bytes {
+
+  /**
+   * The empty value (with 0 bytes).
+   */
+  MutableBytes EMPTY = wrap(new byte[0]);
+
+  /**
+   * Create a new mutable byte value.
+   *
+   * @param size The size of the returned value.
+   * @return A {@link MutableBytes} value.
+   */
+  static MutableBytes create(int size) {
+    if (size == 32) {
+      return MutableBytes32.create();
+    }
+    return new MutableArrayWrappingBytes(new byte[size]);
+  }
+
+  /**
+   * Wrap a byte array in a {@link MutableBytes} value.
+   *
+   * @param value The value to wrap.
+   * @return A {@link MutableBytes} value wrapping {@code value}.
+   */
+  static MutableBytes wrap(byte[] value) {
+    checkNotNull(value);
+    return new MutableArrayWrappingBytes(value);
+  }
+
+  /**
+   * Wrap a slice of a byte array as a {@link MutableBytes} value.
+   *
+   * <p>
+   * Note that value is not copied and thus any future update to {@code value} within the slice will be reflected in the
+   * returned value.
+   *
+   * @param value The value to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, o, l).get(0) == value[o]}.
+   * @param length The length of the resulting value.
+   * @return A {@link Bytes} value that expose the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + length} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.length > 0 && offset >=
+   *     value.length)}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + length > value.length}.
+   */
+  static MutableBytes wrap(byte[] value, int offset, int length) {
+    checkNotNull(value);
+    if (length == 32) {
+      return new MutableArrayWrappingBytes32(value, offset);
+    }
+    return new MutableArrayWrappingBytes(value, offset, length);
+  }
+
+  /**
+   * Wrap a full Vert.x {@link Buffer} as a {@link MutableBytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value.
+   *
+   * @param buffer The buffer to wrap.
+   * @return A {@link MutableBytes} value.
+   */
+  static MutableBytes wrapBuffer(Buffer buffer) {
+    checkNotNull(buffer);
+    if (buffer.length() == 0) {
+      return EMPTY;
+    }
+    return new MutableBufferWrappingBytes(buffer);
+  }
+
+  /**
+   * Wrap a slice of a Vert.x {@link Buffer} as a {@link MutableBytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value, and any change to the
+   * returned value will be reflected in the buffer.
+   *
+   * @param buffer The buffer to wrap.
+   * @param offset The offset in {@code buffer} from which to expose the bytes in the returned value. That is,
+   *        {@code wrapBuffer(buffer, i, 1).get(0) == buffer.getByte(i)}.
+   * @param size The size of the returned value.
+   * @return A {@link MutableBytes} value.
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (buffer.length() > 0 && offset >=
+   *     buffer.length())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + length > buffer.length()}.
+   */
+  static MutableBytes wrapBuffer(Buffer buffer, int offset, int size) {
+    checkNotNull(buffer);
+    if (size == 0) {
+      return EMPTY;
+    }
+    return new MutableBufferWrappingBytes(buffer, offset, size);
+  }
+
+  /**
+   * Wrap a full Netty {@link ByteBuf} as a {@link MutableBytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value.
+   *
+   * @param byteBuf The {@link ByteBuf} to wrap.
+   * @return A {@link MutableBytes} value.
+   */
+  static MutableBytes wrapByteBuf(ByteBuf byteBuf) {
+    checkNotNull(byteBuf);
+    if (byteBuf.capacity() == 0) {
+      return EMPTY;
+    }
+    return new MutableByteBufWrappingBytes(byteBuf);
+  }
+
+  /**
+   * Wrap a slice of a Netty {@link ByteBuf} as a {@link MutableBytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value, and any change to the
+   * returned value will be reflected in the buffer.
+   *
+   * @param byteBuf The {@link ByteBuf} to wrap.
+   * @param offset The offset in {@code byteBuf} from which to expose the bytes in the returned value. That is,
+   *        {@code wrapByteBuf(byteBuf, i, 1).get(0) == byteBuf.getByte(i)}.
+   * @param size The size of the returned value.
+   * @return A {@link MutableBytes} value.
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (byteBuf.capacity() > 0 && offset >=
+   *     byteBuf.capacity())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + length > byteBuf.capacity()}.
+   */
+  static MutableBytes wrapByteBuf(ByteBuf byteBuf, int offset, int size) {
+    checkNotNull(byteBuf);
+    if (size == 0) {
+      return EMPTY;
+    }
+    return new MutableByteBufWrappingBytes(byteBuf, offset, size);
+  }
+
+  /**
+   * Wrap a full Java NIO {@link ByteBuffer} as a {@link MutableBytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value.
+   *
+   * @param byteBuffer The {@link ByteBuffer} to wrap.
+   * @return A {@link MutableBytes} value.
+   */
+  static MutableBytes wrapByteBuffer(ByteBuffer byteBuffer) {
+    checkNotNull(byteBuffer);
+    if (byteBuffer.limit() == 0) {
+      return EMPTY;
+    }
+    return new MutableByteBufferWrappingBytes(byteBuffer);
+  }
+
+  /**
+   * Wrap a slice of a Java NIO {@link ByteBuffer} as a {@link MutableBytes} value.
+   *
+   * <p>
+   * Note that any change to the content of the buffer may be reflected in the returned value, and any change to the
+   * returned value will be reflected in the buffer.
+   *
+   * @param byteBuffer The {@link ByteBuffer} to wrap.
+   * @param offset The offset in {@code byteBuffer} from which to expose the bytes in the returned value. That is,
+   *        {@code wrapByteBuffer(byteBuffer, i, 1).get(0) == byteBuffer.getByte(i)}.
+   * @param size The size of the returned value.
+   * @return A {@link MutableBytes} value.
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (byteBuffer.limit() > 0 && offset >=
+   *     byteBuffer.limit())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + length > byteBuffer.limit()}.
+   */
+  static MutableBytes wrapByteBuffer(ByteBuffer byteBuffer, int offset, int size) {
+    checkNotNull(byteBuffer);
+    if (size == 0) {
+      return EMPTY;
+    }
+    return new MutableByteBufferWrappingBytes(byteBuffer, offset, size);
+  }
+
+  /**
+   * Create a value that contains the specified bytes in their specified order.
+   *
+   * @param bytes The bytes that must compose the returned value.
+   * @return A value containing the specified bytes.
+   */
+  static MutableBytes of(byte... bytes) {
+    return wrap(bytes);
+  }
+
+  /**
+   * Create a value that contains the specified bytes in their specified order.
+   *
+   * @param bytes The bytes.
+   * @return A value containing bytes are the one from {@code bytes}.
+   * @throws IllegalArgumentException if any of the specified would be truncated when storing as a byte.
+   */
+  static MutableBytes of(int... bytes) {
+    byte[] result = new byte[bytes.length];
+    for (int i = 0; i < bytes.length; i++) {
+      int b = bytes[i];
+      checkArgument(b == (((byte) b) & 0xff), "%sth value %s does not fit a byte", i + 1, b);
+      result[i] = (byte) b;
+    }
+    return wrap(result);
+  }
+
+  /**
+   * Set a byte in this value.
+   *
+   * @param i The index of the byte to set.
+   * @param b The value to set that byte to.
+   * @throws IndexOutOfBoundsException if {@code i < 0} or {i &gt;= size()}.
+   */
+  void set(int i, byte b);
+
+  /**
+   * Set the 4 bytes starting at the specified index to the specified integer value.
+   *
+   * @param i The index, which must less than or equal to {@code size() - 4}.
+   * @param value The integer value.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {@code i &gt; size() - 4}.
+   */
+  default void setInt(int i, int value) {
+    int size = size();
+    checkElementIndex(i, size);
+    if (i > (size - 4)) {
+      throw new IndexOutOfBoundsException(
+          format("Value of size %s has not enough bytes to write a 4 bytes int from index %s", size, i));
+    }
+
+    set(i++, (byte) (value >>> 24));
+    set(i++, (byte) ((value >>> 16) & 0xFF));
+    set(i++, (byte) ((value >>> 8) & 0xFF));
+    set(i, (byte) (value & 0xFF));
+  }
+
+  /**
+   * Set the 8 bytes starting at the specified index to the specified long value.
+   *
+   * @param i The index, which must less than or equal to {@code size() - 8}.
+   * @param value The long value.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {@code i &gt; size() - 8}.
+   */
+  default void setLong(int i, long value) {
+    int size = size();
+    checkElementIndex(i, size);
+    if (i > (size - 8)) {
+      throw new IndexOutOfBoundsException(
+          format("Value of size %s has not enough bytes to write a 8 bytes long from index %s", size, i));
+    }
+
+    set(i++, (byte) (value >>> 56));
+    set(i++, (byte) ((value >>> 48) & 0xFF));
+    set(i++, (byte) ((value >>> 40) & 0xFF));
+    set(i++, (byte) ((value >>> 32) & 0xFF));
+    set(i++, (byte) ((value >>> 24) & 0xFF));
+    set(i++, (byte) ((value >>> 16) & 0xFF));
+    set(i++, (byte) ((value >>> 8) & 0xFF));
+    set(i, (byte) (value & 0xFF));
+  }
+
+  /**
+   * Increments the value of the bytes by 1, treating the value as big endian.
+   *
+   * If incrementing overflows the value then all bits flip, i.e. incrementing 0xFFFF will return 0x0000.
+   *
+   * @return this value
+   */
+  default MutableBytes increment() {
+    for (int i = size() - 1; i >= 0; --i) {
+      if (get(i) == (byte) 0xFF) {
+        set(i, (byte) 0x00);
+      } else {
+        byte currentValue = get(i);
+        set(i, ++currentValue);
+        break;
+      }
+    }
+    return this;
+  }
+
+  /**
+   * Decrements the value of the bytes by 1, treating the value as big endian.
+   *
+   * If decrementing underflows the value then all bits flip, i.e. decrementing 0x0000 will return 0xFFFF.
+   *
+   * @return this value
+   */
+  default MutableBytes decrement() {
+    for (int i = size() - 1; i >= 0; --i) {
+      if (get(i) == (byte) 0x00) {
+        set(i, (byte) 0xFF);
+      } else {
+        byte currentValue = get(i);
+        set(i, --currentValue);
+        break;
+      }
+    }
+    return this;
+  }
+
+  /**
+   * Create a mutable slice of the bytes of this value.
+   *
+   * <p>
+   * Note: the resulting slice is only a view over the original value. Holding a reference to the returned slice may
+   * hold more memory than the slide represents. Use {@link #copy} on the returned slice to avoid this.
+   *
+   * @param i The start index for the slice.
+   * @param length The length of the resulting value.
+   * @return A new mutable view over the bytes of this value from index {@code i} (included) to index {@code i + length}
+   *         (excluded).
+   * @throws IllegalArgumentException if {@code length &lt; 0}.
+   * @throws IndexOutOfBoundsException if {@code i &lt; 0} or {i &gt;= size()} or {i + length &gt; size()} .
+   */
+  MutableBytes mutableSlice(int i, int length);
+
+  /**
+   * Fill all the bytes of this value with the specified byte.
+   *
+   * @param b The byte to use to fill the value.
+   */
+  default void fill(byte b) {
+    int size = size();
+    for (int i = 0; i < size; i++) {
+      set(i, b);
+    }
+  }
+
+  /**
+   * Set all bytes in this value to 0.
+   */
+  default void clear() {
+    fill((byte) 0);
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
new file mode 100644
index 0000000..b055c37
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes32.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * A mutable {@link Bytes32}, that is a mutable {@link Bytes} value of exactly 32 bytes.
+ */
+public interface MutableBytes32 extends MutableBytes, Bytes32 {
+
+  /**
+   * Create a new mutable 32 bytes value.
+   *
+   * @return A newly allocated {@link MutableBytes} value.
+   */
+  static MutableBytes32 create() {
+    return new MutableArrayWrappingBytes32(new byte[SIZE]);
+  }
+
+  /**
+   * Wrap a 32 bytes array as a mutable 32 bytes value.
+   *
+   * @param value The value to wrap.
+   * @return A {@link MutableBytes32} wrapping {@code value}.
+   * @throws IllegalArgumentException if {@code value.length != 32}.
+   */
+  static MutableBytes32 wrap(byte[] value) {
+    checkNotNull(value);
+    return new MutableArrayWrappingBytes32(value);
+  }
+
+  /**
+   * Wrap a the provided array as a {@link MutableBytes32}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} within the wrapped parts
+   * will be reflected in the returned value.
+   *
+   * @param value The bytes to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, i).get(0) == value[i]}.
+   * @return A {@link MutableBytes32} that exposes the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + 32} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.length &gt; 0 && offset >=
+   *     value.length)}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + 32 &gt; value.length}.
+   */
+  static MutableBytes32 wrap(byte[] value, int offset) {
+    checkNotNull(value);
+    return new MutableArrayWrappingBytes32(value, offset);
+  }
+
+  /**
+   * Wrap a the provided value, which must be of size 32, as a {@link MutableBytes32}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} will be reflected in the
+   * returned value.
+   *
+   * @param value The bytes to wrap.
+   * @return A {@link MutableBytes32} that exposes the bytes of {@code value}.
+   * @throws IllegalArgumentException if {@code value.size() != 32}.
+   */
+  static MutableBytes32 wrap(MutableBytes value) {
+    checkNotNull(value);
+    if (value instanceof MutableBytes32) {
+      return (MutableBytes32) value;
+    }
+    return DelegatingMutableBytes32.delegateTo(value);
+  }
+
+  /**
+   * Wrap a slice/sub-part of the provided value as a {@link MutableBytes32}.
+   *
+   * <p>
+   * Note that the value is not copied, and thus any future update to {@code value} within the wrapped parts will be
+   * reflected in the returned value.
+   *
+   * @param value The bytes to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, i).get(0) == value.get(i)}.
+   * @return A {@link Bytes32} that exposes the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + 32} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.size() &gt; 0 && offset >=
+   *     value.size())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + 32 &gt; value.size()}.
+   */
+  static MutableBytes32 wrap(MutableBytes value, int offset) {
+    checkNotNull(value);
+    if (value instanceof MutableBytes32) {
+      return (MutableBytes32) value;
+    }
+    MutableBytes slice = value.mutableSlice(offset, Bytes32.SIZE);
+    if (slice instanceof MutableBytes32) {
+      return (MutableBytes32) slice;
+    }
+    return DelegatingMutableBytes32.delegateTo(slice);
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
new file mode 100644
index 0000000..2e267e8
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/MutableBytes48.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * A mutable {@link Bytes48}, that is a mutable {@link Bytes} value of exactly 48 bytes.
+ */
+public interface MutableBytes48 extends MutableBytes, Bytes48 {
+
+  /**
+   * Create a new mutable 48 bytes value.
+   *
+   * @return A newly allocated {@link MutableBytes} value.
+   */
+  static MutableBytes48 create() {
+    return new MutableArrayWrappingBytes48(new byte[SIZE]);
+  }
+
+  /**
+   * Wrap a 48 bytes array as a mutable 48 bytes value.
+   *
+   * @param value The value to wrap.
+   * @return A {@link MutableBytes48} wrapping {@code value}.
+   * @throws IllegalArgumentException if {@code value.length != 48}.
+   */
+  static MutableBytes48 wrap(byte[] value) {
+    checkNotNull(value);
+    return new MutableArrayWrappingBytes48(value);
+  }
+
+  /**
+   * Wrap a the provided array as a {@link MutableBytes48}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} within the wrapped parts
+   * will be reflected in the returned value.
+   *
+   * @param value The bytes to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, i).get(0) == value[i]}.
+   * @return A {@link MutableBytes48} that exposes the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + 48} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.length &gt; 0 && offset >=
+   *     value.length)}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + 48 &gt; value.length}.
+   */
+  static MutableBytes48 wrap(byte[] value, int offset) {
+    checkNotNull(value);
+    return new MutableArrayWrappingBytes48(value, offset);
+  }
+
+  /**
+   * Wrap a the provided value, which must be of size 48, as a {@link MutableBytes48}.
+   *
+   * <p>
+   * Note that value is not copied, only wrapped, and thus any future update to {@code value} will be reflected in the
+   * returned value.
+   *
+   * @param value The bytes to wrap.
+   * @return A {@link MutableBytes48} that exposes the bytes of {@code value}.
+   * @throws IllegalArgumentException if {@code value.size() != 48}.
+   */
+  static MutableBytes48 wrap(MutableBytes value) {
+    checkNotNull(value);
+    if (value instanceof MutableBytes48) {
+      return (MutableBytes48) value;
+    }
+    return DelegatingMutableBytes48.delegateTo(value);
+  }
+
+  /**
+   * Wrap a slice/sub-part of the provided value as a {@link MutableBytes48}.
+   *
+   * <p>
+   * Note that the value is not copied, and thus any future update to {@code value} within the wrapped parts will be
+   * reflected in the returned value.
+   *
+   * @param value The bytes to wrap.
+   * @param offset The index (inclusive) in {@code value} of the first byte exposed by the returned value. In other
+   *        words, you will have {@code wrap(value, i).get(0) == value.get(i)}.
+   * @return A {@link Bytes48} that exposes the bytes of {@code value} from {@code offset} (inclusive) to
+   *         {@code offset + 48} (exclusive).
+   * @throws IndexOutOfBoundsException if {@code offset &lt; 0 || (value.size() &gt; 0 && offset >=
+   *     value.size())}.
+   * @throws IllegalArgumentException if {@code length &lt; 0 || offset + 48 &gt; value.size()}.
+   */
+  static MutableBytes48 wrap(MutableBytes value, int offset) {
+    checkNotNull(value);
+    if (value instanceof MutableBytes48) {
+      return (MutableBytes48) value;
+    }
+    MutableBytes slice = value.mutableSlice(offset, Bytes48.SIZE);
+    if (slice instanceof MutableBytes48) {
+      return (MutableBytes48) slice;
+    }
+    return DelegatingMutableBytes48.delegateTo(slice);
+  }
+}
diff --git a/bytes/src/main/java/net/consensys/cava/bytes/package-info.java b/bytes/src/main/java/net/consensys/cava/bytes/package-info.java
new file mode 100644
index 0000000..3707b77
--- /dev/null
+++ b/bytes/src/main/java/net/consensys/cava/bytes/package-info.java
@@ -0,0 +1,11 @@
+/**
+ * Classes and utilities for working with byte arrays.
+ *
+ * <p>
+ * These classes are included in the standard Cava distribution, or separately when using the gradle dependency
+ * 'net.consensys.cava:cava-bytes' (cava-bytes.jar).
+ */
+@ParametersAreNonnullByDefault
+package net.consensys.cava.bytes;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
new file mode 100644
index 0000000..db1719e
--- /dev/null
+++ b/bytes/src/test/java/net/consensys/cava/bytes/BufferBytesTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import io.vertx.core.buffer.Buffer;
+
+class BufferBytesTest extends CommonBytesTests {
+
+  @Override
+  Bytes h(String hex) {
+    return Bytes.wrapBuffer(Buffer.buffer(Bytes.fromHexString(hex).toArrayUnsafe()));
+  }
+
+  @Override
+  MutableBytes m(int size) {
+    return MutableBytes.wrapBuffer(Buffer.buffer(new byte[size]));
+  }
+
+  @Override
+  Bytes w(byte[] bytes) {
+    return Bytes.wrapBuffer(Buffer.buffer(Bytes.of(bytes).toArray()));
+  }
+
+  @Override
+  Bytes of(int... bytes) {
+    return Bytes.wrapBuffer(Buffer.buffer(Bytes.of(bytes).toArray()));
+  }
+}
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
new file mode 100644
index 0000000..06096eb
--- /dev/null
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufBytesTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import io.netty.buffer.Unpooled;
+
+class ByteBufBytesTest extends CommonBytesTests {
+
+  @Override
+  Bytes h(String hex) {
+    return Bytes.wrapByteBuf(Unpooled.copiedBuffer(Bytes.fromHexString(hex).toArrayUnsafe()));
+  }
+
+  @Override
+  MutableBytes m(int size) {
+    return MutableBytes.wrapByteBuf(Unpooled.copiedBuffer(new byte[size]));
+  }
+
+  @Override
+  Bytes w(byte[] bytes) {
+    return Bytes.wrapByteBuf(Unpooled.copiedBuffer(Bytes.of(bytes).toArray()));
+  }
+
+  @Override
+  Bytes of(int... bytes) {
+    return Bytes.wrapByteBuf(Unpooled.copiedBuffer(Bytes.of(bytes).toArray()));
+  }
+}
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
new file mode 100644
index 0000000..554f086
--- /dev/null
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ByteBufferBytesTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import java.nio.ByteBuffer;
+
+class ByteBufferBytesTest extends CommonBytesTests {
+
+  @Override
+  Bytes h(String hex) {
+    return Bytes.wrapByteBuffer(ByteBuffer.wrap(Bytes.fromHexString(hex).toArrayUnsafe()));
+  }
+
+  @Override
+  MutableBytes m(int size) {
+    return MutableBytes.wrapByteBuffer(ByteBuffer.allocate(size));
+  }
+
+  @Override
+  Bytes w(byte[] bytes) {
+    return Bytes.wrapByteBuffer(ByteBuffer.wrap(Bytes.of(bytes).toArray()));
+  }
+
+  @Override
+  Bytes of(int... bytes) {
+    return Bytes.wrapByteBuffer(ByteBuffer.wrap(Bytes.of(bytes).toArray()));
+  }
+}
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java b/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
new file mode 100644
index 0000000..04df458
--- /dev/null
+++ b/bytes/src/test/java/net/consensys/cava/bytes/Bytes32Test.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import org.junit.jupiter.api.Test;
+
+class Bytes32Test {
+
+  @Test
+  void failsWhenWrappingArraySmallerThan32() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes32.wrap(new byte[31]));
+    assertEquals("Expected 32 bytes but got 31", exception.getMessage());
+  }
+
+  @Test
+  void failsWhenWrappingArrayLargerThan32() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes32.wrap(new byte[33]));
+    assertEquals("Expected 32 bytes but got 33", exception.getMessage());
+  }
+
+  @Test
+  void leftPadAValueToBytes32() {
+    Bytes32 b32 = Bytes32.leftPad(Bytes.of(1, 2, 3));
+    assertEquals(32, b32.size());
+    for (int i = 0; i < 28; ++i) {
+      assertEquals((byte) 0, b32.get(i));
+    }
+    assertEquals((byte) 1, b32.get(29));
+    assertEquals((byte) 2, b32.get(30));
+    assertEquals((byte) 3, b32.get(31));
+  }
+
+  @Test
+  void rightPadAValueToBytes32() {
+    Bytes32 b32 = Bytes32.rightPad(Bytes.of(1, 2, 3));
+    assertEquals(32, b32.size());
+    for (int i = 3; i < 32; ++i) {
+      assertEquals((byte) 0, b32.get(i));
+    }
+    assertEquals((byte) 1, b32.get(0));
+    assertEquals((byte) 2, b32.get(1));
+    assertEquals((byte) 3, b32.get(2));
+  }
+
+  @Test
+  void failsWhenLeftPaddingValueLargerThan32() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes32.leftPad(MutableBytes.create(33)));
+    assertEquals("Expected at most 32 bytes but got 33", exception.getMessage());
+  }
+
+  @Test
+  void failsWhenRightPaddingValueLargerThan32() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes32.rightPad(MutableBytes.create(33)));
+    assertEquals("Expected at most 32 bytes but got 33", exception.getMessage());
+  }
+}
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java b/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
new file mode 100644
index 0000000..89ca1d2
--- /dev/null
+++ b/bytes/src/test/java/net/consensys/cava/bytes/Bytes48Test.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import org.junit.jupiter.api.Test;
+
+class Bytes48Test {
+
+  @Test
+  void failsWhenWrappingArraySmallerThan48() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes48.wrap(new byte[31]));
+    assertEquals("Expected 48 bytes but got 31", exception.getMessage());
+  }
+
+  @Test
+  void failsWhenWrappingArrayLargerThan48() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes48.wrap(new byte[33]));
+    assertEquals("Expected 48 bytes but got 33", exception.getMessage());
+  }
+
+  @Test
+  void rightPadAValueToBytes48() {
+    Bytes48 b48 = Bytes48.rightPad(Bytes.of(1, 2, 3));
+    assertEquals(48, b48.size());
+    for (int i = 3; i < 48; ++i) {
+      assertEquals((byte) 0, b48.get(i));
+    }
+    assertEquals((byte) 1, b48.get(0));
+    assertEquals((byte) 2, b48.get(1));
+    assertEquals((byte) 3, b48.get(2));
+  }
+
+  @Test
+  void leftPadAValueToBytes48() {
+    Bytes48 b48 = Bytes48.leftPad(Bytes.of(1, 2, 3));
+    assertEquals(48, b48.size());
+    for (int i = 0; i < 28; ++i) {
+      assertEquals((byte) 0, b48.get(i));
+    }
+    assertEquals((byte) 1, b48.get(45));
+    assertEquals((byte) 2, b48.get(46));
+    assertEquals((byte) 3, b48.get(47));
+  }
+
+  @Test
+  void failsWhenLeftPaddingValueLargerThan48() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes48.leftPad(MutableBytes.create(49)));
+    assertEquals("Expected at most 48 bytes but got 49", exception.getMessage());
+  }
+
+  @Test
+  void failsWhenRightPaddingValueLargerThan48() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes48.rightPad(MutableBytes.create(49)));
+    assertEquals("Expected at most 48 bytes but got 49", exception.getMessage());
+  }
+}
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
new file mode 100644
index 0000000..eb1d0a5
--- /dev/null
+++ b/bytes/src/test/java/net/consensys/cava/bytes/BytesTest.java
@@ -0,0 +1,465 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static java.nio.ByteOrder.LITTLE_ENDIAN;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class BytesTest extends CommonBytesTests {
+
+  @Override
+  Bytes h(String hex) {
+    return Bytes.fromHexString(hex);
+  }
+
+  @Override
+  MutableBytes m(int size) {
+    return MutableBytes.create(size);
+  }
+
+  @Override
+  Bytes w(byte[] bytes) {
+    return Bytes.wrap(bytes);
+  }
+
+  @Override
+  Bytes of(int... bytes) {
+    return Bytes.of(bytes);
+  }
+
+  @Test
+  void wrapEmpty() {
+    Bytes wrap = Bytes.wrap(new byte[0]);
+    assertEquals(Bytes.EMPTY, wrap);
+  }
+
+  @ParameterizedTest
+  @MethodSource("wrapProvider")
+  void wrap(Object arr) {
+    byte[] bytes = (byte[]) arr;
+    Bytes value = Bytes.wrap(bytes);
+    assertEquals(bytes.length, value.size());
+    assertArrayEquals(value.toArray(), bytes);
+  }
+
+  private static Stream<Arguments> wrapProvider() {
+    return Stream.of(
+        Arguments.of(new Object[] {new byte[10]}),
+        Arguments.of(new Object[] {new byte[] {1}}),
+        Arguments.of(new Object[] {new byte[] {1, 2, 3, 4}}),
+        Arguments.of(new Object[] {new byte[] {-1, 127, -128}}));
+  }
+
+  @Test
+  void wrapNull() {
+    assertThrows(NullPointerException.class, () -> Bytes.wrap((byte[]) null));
+  }
+
+  /**
+   * Checks that modifying a wrapped array modifies the value itself.
+   */
+  @Test
+  void wrapReflectsUpdates() {
+    byte[] bytes = new byte[] {1, 2, 3, 4, 5};
+    Bytes value = Bytes.wrap(bytes);
+
+    assertEquals(bytes.length, value.size());
+    assertArrayEquals(value.toArray(), bytes);
+
+    bytes[1] = 127;
+    bytes[3] = 127;
+
+    assertEquals(bytes.length, value.size());
+    assertArrayEquals(value.toArray(), bytes);
+  }
+
+  @Test
+  void wrapSliceEmpty() {
+    assertEquals(Bytes.EMPTY, Bytes.wrap(new byte[0], 0, 0));
+    assertEquals(Bytes.EMPTY, Bytes.wrap(new byte[] {1, 2, 3}, 0, 0));
+    assertEquals(Bytes.EMPTY, Bytes.wrap(new byte[] {1, 2, 3}, 2, 0));
+  }
+
+  @ParameterizedTest
+  @MethodSource("wrapSliceProvider")
+  void wrapSlice(Object arr, int offset, int length) {
+    assertWrapSlice((byte[]) arr, offset, length);
+  }
+
+  private static Stream<Arguments> wrapSliceProvider() {
+    return Stream.of(
+        Arguments.of(new byte[] {1, 2, 3, 4}, 0, 4),
+        Arguments.of(new byte[] {1, 2, 3, 4}, 0, 2),
+        Arguments.of(new byte[] {1, 2, 3, 4}, 2, 1),
+        Arguments.of(new byte[] {1, 2, 3, 4}, 2, 2));
+  }
+
+  private void assertWrapSlice(byte[] bytes, int offset, int length) {
+    Bytes value = Bytes.wrap(bytes, offset, length);
+    assertEquals(length, value.size());
+    assertArrayEquals(value.toArray(), Arrays.copyOfRange(bytes, offset, offset + length));
+  }
+
+  @Test
+  void wrapSliceNull() {
+    assertThrows(NullPointerException.class, () -> Bytes.wrap(null, 0, 2));
+  }
+
+  @Test
+  void wrapSliceNegativeOffset() {
+    assertThrows(IndexOutOfBoundsException.class, () -> assertWrapSlice(new byte[] {1, 2, 3, 4}, -1, 4));
+  }
+
+  @Test
+  void wrapSliceOutOfBoundOffset() {
+    assertThrows(IndexOutOfBoundsException.class, () -> assertWrapSlice(new byte[] {1, 2, 3, 4}, 5, 1));
+  }
+
+  @Test
+  void wrapSliceNegativeLength() {
+    Throwable exception =
+        assertThrows(IllegalArgumentException.class, () -> assertWrapSlice(new byte[] {1, 2, 3, 4}, 0, -2));
+    assertEquals("Invalid negative length", exception.getMessage());
+  }
+
+  @Test
+  void wrapSliceTooBig() {
+    Throwable exception =
+        assertThrows(IllegalArgumentException.class, () -> assertWrapSlice(new byte[] {1, 2, 3, 4}, 2, 3));
+    assertEquals("Provided length 3 is too big: the value has only 2 bytes from offset 2", exception.getMessage());
+  }
+
+  /**
+   * Checks that modifying a wrapped array modifies the value itself, but only if within the wrapped slice.
+   */
+  @Test
+  void wrapSliceReflectsUpdates() {
+    byte[] bytes = new byte[] {1, 2, 3, 4, 5};
+    assertWrapSlice(bytes, 2, 2);
+    bytes[2] = 127;
+    bytes[3] = 127;
+    assertWrapSlice(bytes, 2, 2);
+
+    Bytes wrapped = Bytes.wrap(bytes, 2, 2);
+    Bytes copy = wrapped.copy();
+
+    // Modify the bytes outside of the wrapped slice and check this doesn't affect the value (that
+    // it is still equal to the copy from before the updates)
+    bytes[0] = 127;
+    assertEquals(copy, wrapped);
+
+    // Sanity check for copy(): modify within the wrapped slice and check the copy differs now.
+    bytes[2] = 42;
+    assertNotEquals(copy, wrapped);
+  }
+
+  @Test
+  void ofBytes() {
+    assertArrayEquals(Bytes.of().toArray(), new byte[] {});
+    assertArrayEquals(Bytes.of((byte) 1, (byte) 2).toArray(), new byte[] {1, 2});
+    assertArrayEquals(Bytes.of((byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5).toArray(), new byte[] {1, 2, 3, 4, 5});
+    assertArrayEquals(Bytes.of((byte) -1, (byte) 2, (byte) -3).toArray(), new byte[] {-1, 2, -3});
+  }
+
+  @Test
+  void ofInts() {
+    assertArrayEquals(Bytes.of(1, 2).toArray(), new byte[] {1, 2});
+    assertArrayEquals(Bytes.of(1, 2, 3, 4, 5).toArray(), new byte[] {1, 2, 3, 4, 5});
+    assertArrayEquals(Bytes.of(0xff, 0x7f, 0x80).toArray(), new byte[] {-1, 127, -128});
+  }
+
+  @Test
+  void ofIntsTooBig() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.of(2, 3, 256));
+    assertEquals("3th value 256 does not fit a byte", exception.getMessage());
+  }
+
+  @Test
+  void ofIntsTooLow() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.of(2, -1, 3));
+    assertEquals("2th value -1 does not fit a byte", exception.getMessage());
+  }
+
+  @Test
+  void minimalBytes() {
+    assertEquals(h("0x"), Bytes.minimalBytes(0));
+    assertEquals(h("0x01"), Bytes.minimalBytes(1));
+    assertEquals(h("0x04"), Bytes.minimalBytes(4));
+    assertEquals(h("0x10"), Bytes.minimalBytes(16));
+    assertEquals(h("0xFF"), Bytes.minimalBytes(255));
+    assertEquals(h("0x0100"), Bytes.minimalBytes(256));
+    assertEquals(h("0x0200"), Bytes.minimalBytes(512));
+    assertEquals(h("0x010000"), Bytes.minimalBytes(1L << 16));
+    assertEquals(h("0x01000000"), Bytes.minimalBytes(1L << 24));
+    assertEquals(h("0x0100000000"), Bytes.minimalBytes(1L << 32));
+    assertEquals(h("0x010000000000"), Bytes.minimalBytes(1L << 40));
+    assertEquals(h("0x01000000000000"), Bytes.minimalBytes(1L << 48));
+    assertEquals(h("0x0100000000000000"), Bytes.minimalBytes(1L << 56));
+    assertEquals(h("0xFFFFFFFFFFFFFFFF"), Bytes.minimalBytes(-1L));
+  }
+
+  @Test
+  void ofUnsignedShort() {
+    assertEquals(h("0x0000"), Bytes.ofUnsignedShort(0));
+    assertEquals(h("0x0001"), Bytes.ofUnsignedShort(1));
+    assertEquals(h("0x0100"), Bytes.ofUnsignedShort(256));
+    assertEquals(h("0xFFFF"), Bytes.ofUnsignedShort(65535));
+  }
+
+  @Test
+  void ofUnsignedShortNegative() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.ofUnsignedShort(-1));
+    assertEquals(
+        "Value -1 cannot be represented as an unsigned short (it is negative or too big)",
+        exception.getMessage());
+  }
+
+  @Test
+  void ofUnsignedShortTooBig() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.ofUnsignedShort(65536));
+    assertEquals(
+        "Value 65536 cannot be represented as an unsigned short (it is negative or too big)",
+        exception.getMessage());
+  }
+
+  @Test
+  void asUnsignedBigIntegerConstants() {
+    assertEquals(bi("0"), Bytes.EMPTY.toUnsignedBigInteger());
+    assertEquals(bi("1"), Bytes.of(1).toUnsignedBigInteger());
+  }
+
+  @Test
+  void asSignedBigIntegerConstants() {
+    assertEquals(bi("0"), Bytes.EMPTY.toBigInteger());
+    assertEquals(bi("1"), Bytes.of(1).toBigInteger());
+  }
+
+  @Test
+  void fromHexStringLenient() {
+    assertEquals(Bytes.of(), Bytes.fromHexStringLenient(""));
+    assertEquals(Bytes.of(), Bytes.fromHexStringLenient("0x"));
+    assertEquals(Bytes.of(0), Bytes.fromHexStringLenient("0"));
+    assertEquals(Bytes.of(0), Bytes.fromHexStringLenient("0x0"));
+    assertEquals(Bytes.of(0), Bytes.fromHexStringLenient("00"));
+    assertEquals(Bytes.of(0), Bytes.fromHexStringLenient("0x00"));
+    assertEquals(Bytes.of(1), Bytes.fromHexStringLenient("0x1"));
+    assertEquals(Bytes.of(1), Bytes.fromHexStringLenient("0x01"));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("1FF2A"));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x1FF2A"));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x1ff2a"));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x1fF2a"));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("01FF2A"));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x01FF2A"));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x01ff2A"));
+  }
+
+  @Test
+  void fromHexStringLenientInvalidInput() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.fromHexStringLenient("foo"));
+    assertEquals("Illegal character 'o' found at index 1 in hex binary representation", exception.getMessage());
+  }
+
+  @Test
+  void fromHexStringLenientLeftPadding() {
+    assertEquals(Bytes.of(), Bytes.fromHexStringLenient("", 0));
+    assertEquals(Bytes.of(0), Bytes.fromHexStringLenient("", 1));
+    assertEquals(Bytes.of(0, 0), Bytes.fromHexStringLenient("", 2));
+    assertEquals(Bytes.of(0, 0), Bytes.fromHexStringLenient("0x", 2));
+    assertEquals(Bytes.of(0, 0, 0), Bytes.fromHexStringLenient("0", 3));
+    assertEquals(Bytes.of(0, 0, 0), Bytes.fromHexStringLenient("0x0", 3));
+    assertEquals(Bytes.of(0, 0, 0), Bytes.fromHexStringLenient("00", 3));
+    assertEquals(Bytes.of(0, 0, 0), Bytes.fromHexStringLenient("0x00", 3));
+    assertEquals(Bytes.of(0, 0, 1), Bytes.fromHexStringLenient("0x1", 3));
+    assertEquals(Bytes.of(0, 0, 1), Bytes.fromHexStringLenient("0x01", 3));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("1FF2A", 3));
+    assertEquals(Bytes.of(0x00, 0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x1FF2A", 4));
+    assertEquals(Bytes.of(0x00, 0x00, 0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x1ff2a", 5));
+    assertEquals(Bytes.of(0x00, 0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x1fF2a", 4));
+    assertEquals(Bytes.of(0x00, 0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("01FF2A", 4));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x01FF2A", 3));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexStringLenient("0x01ff2A", 3));
+  }
+
+  @Test
+  void fromHexStringLenientLeftPaddingInvalidInput() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.fromHexStringLenient("foo", 10));
+    assertEquals("Illegal character 'o' found at index 1 in hex binary representation", exception.getMessage());
+  }
+
+  @Test
+  void fromHexStringLenientLeftPaddingInvalidSize() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.fromHexStringLenient("0x001F34", 2));
+    assertEquals("Hex value is too large: expected at most 2 bytes but got 3", exception.getMessage());
+  }
+
+  @Test
+  void fromHexString() {
+    assertEquals(Bytes.of(), Bytes.fromHexString("0x"));
+    assertEquals(Bytes.of(0), Bytes.fromHexString("00"));
+    assertEquals(Bytes.of(0), Bytes.fromHexString("0x00"));
+    assertEquals(Bytes.of(1), Bytes.fromHexString("0x01"));
+    assertEquals(Bytes.of(1, 0xff, 0x2a), Bytes.fromHexString("01FF2A"));
+    assertEquals(Bytes.of(1, 0xff, 0x2a), Bytes.fromHexString("0x01FF2A"));
+    assertEquals(Bytes.of(1, 0xff, 0x2a), Bytes.fromHexString("0x01ff2a"));
+    assertEquals(Bytes.of(1, 0xff, 0x2a), Bytes.fromHexString("0x01fF2a"));
+  }
+
+  @Test
+  void fromHexStringInvalidInput() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.fromHexString("fooo"));
+    assertEquals("Illegal character 'o' found at index 1 in hex binary representation", exception.getMessage());
+  }
+
+  @Test
+  void fromHexStringNotLenient() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.fromHexString("0x100"));
+    assertEquals("Invalid odd-length hex binary representation", exception.getMessage());
+  }
+
+  @Test
+  void fromHexStringLeftPadding() {
+    assertEquals(Bytes.of(), Bytes.fromHexString("0x", 0));
+    assertEquals(Bytes.of(0, 0), Bytes.fromHexString("0x", 2));
+    assertEquals(Bytes.of(0, 0, 0, 0), Bytes.fromHexString("0x", 4));
+    assertEquals(Bytes.of(0, 0), Bytes.fromHexString("00", 2));
+    assertEquals(Bytes.of(0, 0), Bytes.fromHexString("0x00", 2));
+    assertEquals(Bytes.of(0, 0, 1), Bytes.fromHexString("0x01", 3));
+    assertEquals(Bytes.of(0x00, 0x01, 0xff, 0x2a), Bytes.fromHexString("01FF2A", 4));
+    assertEquals(Bytes.of(0x01, 0xff, 0x2a), Bytes.fromHexString("0x01FF2A", 3));
+    assertEquals(Bytes.of(0x00, 0x00, 0x01, 0xff, 0x2a), Bytes.fromHexString("0x01ff2a", 5));
+    assertEquals(Bytes.of(0x00, 0x00, 0x01, 0xff, 0x2a), Bytes.fromHexString("0x01fF2a", 5));
+  }
+
+  @Test
+  void fromHexStringLeftPaddingInvalidInput() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.fromHexString("fooo", 4));
+    assertEquals("Illegal character 'o' found at index 1 in hex binary representation", exception.getMessage());
+  }
+
+  @Test
+  void fromHexStringLeftPaddingNotLenient() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.fromHexString("0x100", 4));
+    assertEquals("Invalid odd-length hex binary representation", exception.getMessage());
+  }
+
+  @Test
+  void fromHexStringLeftPaddingInvalidSize() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> Bytes.fromHexStringLenient("0x001F34", 2));
+    assertEquals("Hex value is too large: expected at most 2 bytes but got 3", exception.getMessage());
+  }
+
+  @Test
+  void fromBase64Roundtrip() {
+    Bytes value = Bytes.fromBase64String("deadbeefISDAbest");
+    assertEquals("deadbeefISDAbest", value.toBase64String());
+  }
+
+  @Test
+  void littleEndianRoundtrip() {
+    int val = Integer.MAX_VALUE - 5;
+    Bytes littleEndianEncoded = Bytes.ofUnsignedInt(val, LITTLE_ENDIAN);
+    assertEquals(4, littleEndianEncoded.size());
+    Bytes bigEndianEncoded = Bytes.ofUnsignedInt(val);
+    assertEquals(bigEndianEncoded.get(0), littleEndianEncoded.get(3));
+    assertEquals(bigEndianEncoded.get(1), littleEndianEncoded.get(2));
+    assertEquals(bigEndianEncoded.get(2), littleEndianEncoded.get(1));
+    assertEquals(bigEndianEncoded.get(3), littleEndianEncoded.get(0));
+
+    int read = littleEndianEncoded.toInt(LITTLE_ENDIAN);
+    assertEquals(val, read);
+  }
+
+  @Test
+  void littleEndianLongRoundtrip() {
+    long val = 1L << 46;
+    Bytes littleEndianEncoded = Bytes.ofUnsignedLong(val, LITTLE_ENDIAN);
+    assertEquals(8, littleEndianEncoded.size());
+    Bytes bigEndianEncoded = Bytes.ofUnsignedLong(val);
+    assertEquals(bigEndianEncoded.get(0), littleEndianEncoded.get(7));
+    assertEquals(bigEndianEncoded.get(1), littleEndianEncoded.get(6));
+    assertEquals(bigEndianEncoded.get(2), littleEndianEncoded.get(5));
+    assertEquals(bigEndianEncoded.get(3), littleEndianEncoded.get(4));
+    assertEquals(bigEndianEncoded.get(4), littleEndianEncoded.get(3));
+    assertEquals(bigEndianEncoded.get(5), littleEndianEncoded.get(2));
+    assertEquals(bigEndianEncoded.get(6), littleEndianEncoded.get(1));
+    assertEquals(bigEndianEncoded.get(7), littleEndianEncoded.get(0));
+
+    long read = littleEndianEncoded.toLong(LITTLE_ENDIAN);
+    assertEquals(val, read);
+  }
+
+  @Test
+  void reverseBytes() {
+    Bytes bytes = Bytes.fromHexString("0x000102030405");
+    assertEquals(Bytes.fromHexString("0x050403020100"), bytes.reverse());
+  }
+
+  @Test
+  void reverseBytesEmptyArray() {
+    Bytes bytes = Bytes.fromHexString("0x");
+    assertEquals(Bytes.fromHexString("0x"), bytes.reverse());
+  }
+
+  @Test
+  void mutableBytesIncrement() {
+    MutableBytes one = MutableBytes.of(1);
+    one.increment();
+    assertEquals(Bytes.of(2), one);
+  }
+
+  @Test
+  void mutableBytesIncrementMax() {
+    MutableBytes maxed = MutableBytes.of(1, 0xFF);
+    maxed.increment();
+    assertEquals(Bytes.of(2, 0), maxed);
+  }
+
+  @Test
+  void mutableBytesIncrementOverflow() {
+    MutableBytes maxed = MutableBytes.of(0xFF, 0xFF, 0xFF);
+    maxed.increment();
+    assertEquals(Bytes.of(0, 0, 0), maxed);
+  }
+
+  @Test
+  void mutableBytesDecrement() {
+    MutableBytes one = MutableBytes.of(2);
+    one.decrement();
+    assertEquals(Bytes.of(1), one);
+  }
+
+  @Test
+  void mutableBytesDecrementMax() {
+    MutableBytes maxed = MutableBytes.of(1, 0);
+    maxed.decrement();
+    assertEquals(Bytes.of(0, 0xFF), maxed);
+  }
+
+  @Test
+  void mutableBytesDecrementOverflow() {
+    MutableBytes maxed = MutableBytes.of(0x00, 0x00, 0x00);
+    maxed.decrement();
+    assertEquals(Bytes.of(0xFF, 0xFF, 0xFF), maxed);
+  }
+}
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java b/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
new file mode 100644
index 0000000..b16c74a
--- /dev/null
+++ b/bytes/src/test/java/net/consensys/cava/bytes/CommonBytesTests.java
@@ -0,0 +1,659 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.math.BigInteger;
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.Arrays;
+import java.util.function.Function;
+
+import io.netty.buffer.Unpooled;
+import io.vertx.core.buffer.Buffer;
+import org.junit.jupiter.api.Test;
+
+abstract class CommonBytesTests {
+
+  abstract Bytes h(String hex);
+
+  abstract MutableBytes m(int size);
+
+  abstract Bytes w(byte[] bytes);
+
+  abstract Bytes of(int... bytes);
+
+  BigInteger bi(String decimal) {
+    return new BigInteger(decimal);
+  }
+
+  @Test
+  void asUnsignedBigInteger() {
+    // Make sure things are interpreted unsigned.
+    assertEquals(bi("255"), h("0xFF").toUnsignedBigInteger());
+
+    // Try 2^100 + Long.MAX_VALUE, as an easy to define a big not too special big integer.
+    BigInteger expected = BigInteger.valueOf(2).pow(100).add(BigInteger.valueOf(Long.MAX_VALUE));
+
+    // 2^100 is a one followed by 100 zeros, that's 12 bytes of zeros (=96) plus 4 more zeros (so
+    // 0x10 == 16).
+    MutableBytes v = m(13);
+    v.set(0, (byte) 16);
+    v.setLong(v.size() - 8, Long.MAX_VALUE);
+    assertEquals(expected, v.toUnsignedBigInteger());
+  }
+
+  @Test
+  void testAsSignedBigInteger() {
+    // Make sure things are interpreted signed.
+    assertEquals(bi("-1"), h("0xFF").toBigInteger());
+
+    // Try 2^100 + Long.MAX_VALUE, as an easy to define a big but not too special big integer.
+    BigInteger expected = BigInteger.valueOf(2).pow(100).add(BigInteger.valueOf(Long.MAX_VALUE));
+
+    // 2^100 is a one followed by 100 zeros, that's 12 bytes of zeros (=96) plus 4 more zeros (so
+    // 0x10 == 16).
+    MutableBytes v = m(13);
+    v.set(0, (byte) 16);
+    v.setLong(v.size() - 8, Long.MAX_VALUE);
+    assertEquals(expected, v.toBigInteger());
+
+    // And for a large negative one, we use -(2^100 + Long.MAX_VALUE), which is:
+    //  2^100 + Long.MAX_VALUE = 0x10(4 bytes of 0)7F(  7 bytes of 1)
+    //                 inverse = 0xEF(4 bytes of 1)80(  7 bytes of 0)
+    //                      +1 = 0xEF(4 bytes of 1)80(6 bytes of 0)01
+    expected = expected.negate();
+    v = m(13);
+    v.set(0, (byte) 0xEF);
+    for (int i = 1; i < 5; i++) {
+      v.set(i, (byte) 0xFF);
+    }
+    v.set(5, (byte) 0x80);
+    // 6 bytes of 0
+    v.set(12, (byte) 1);
+    assertEquals(expected, v.toBigInteger());
+  }
+
+  @Test
+  void testSize() {
+    assertEquals(0, w(new byte[0]).size());
+    assertEquals(1, w(new byte[1]).size());
+    assertEquals(10, w(new byte[10]).size());
+  }
+
+  @Test
+  void testGet() {
+    Bytes v = w(new byte[] {1, 2, 3, 4});
+    assertEquals((int) (byte) 1, (int) v.get(0));
+    assertEquals((int) (byte) 2, (int) v.get(1));
+    assertEquals((int) (byte) 3, (int) v.get(2));
+    assertEquals((int) (byte) 4, (int) v.get(3));
+  }
+
+  @Test
+  void testGetNegativeIndex() {
+    assertThrows(IndexOutOfBoundsException.class, () -> w(new byte[] {1, 2, 3, 4}).get(-1));
+  }
+
+  @Test
+  void testGetOutOfBound() {
+    assertThrows(IndexOutOfBoundsException.class, () -> w(new byte[] {1, 2, 3, 4}).get(4));
+  }
+
+  @Test
+  void testGetInt() {
+    Bytes value = w(new byte[] {0, 0, 1, 0, -1, -1, -1, -1});
+
+    // 0x00000100 = 256
+    assertEquals(256, value.getInt(0));
+    // 0x000100FF = 65536 + 255 = 65791
+    assertEquals(65791, value.getInt(1));
+    // 0x0100FFFF = 16777216 (2^24) + (65536 - 1) = 16842751
+    assertEquals(16842751, value.getInt(2));
+    // 0xFFFFFFFF = -1
+    assertEquals(-1, value.getInt(4));
+  }
+
+  @Test
+  void testGetIntNegativeIndex() {
+    assertThrows(IndexOutOfBoundsException.class, () -> w(new byte[] {1, 2, 3, 4}).getInt(-1));
+  }
+
+  @Test
+  void testGetIntOutOfBound() {
+    assertThrows(IndexOutOfBoundsException.class, () -> w(new byte[] {1, 2, 3, 4}).getInt(4));
+  }
+
+  @Test
+  void testGetIntNotEnoughBytes() {
+    assertThrows(IndexOutOfBoundsException.class, () -> w(new byte[] {1, 2, 3, 4}).getInt(1));
+  }
+
+  @Test
+  void testAsInt() {
+    assertEquals(0, Bytes.EMPTY.toInt());
+    Bytes value1 = w(new byte[] {0, 0, 1, 0});
+    // 0x00000100 = 256
+    assertEquals(256, value1.toInt());
+    assertEquals(256, value1.slice(2).toInt());
+
+    Bytes value2 = w(new byte[] {0, 1, 0, -1});
+    // 0x000100FF = 65536 + 255 = 65791
+    assertEquals(65791, value2.toInt());
+    assertEquals(65791, value2.slice(1).toInt());
+
+    Bytes value3 = w(new byte[] {1, 0, -1, -1});
+    // 0x0100FFFF = 16777216 (2^24) + (65536 - 1) = 16842751
+    assertEquals(16842751, value3.toInt());
+
+    Bytes value4 = w(new byte[] {-1, -1, -1, -1});
+    // 0xFFFFFFFF = -1
+    assertEquals(-1, value4.toInt());
+  }
+
+  @Test
+  void testAsIntTooManyBytes() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> w(new byte[] {1, 2, 3, 4, 5}).toInt());
+    assertEquals("Value of size 5 has more than 4 bytes", exception.getMessage());
+  }
+
+  @Test
+  void testGetLong() {
+    Bytes value1 = w(new byte[] {0, 0, 1, 0, -1, -1, -1, -1, 0, 0});
+    // 0x00000100FFFFFFFF = (2^40) + (2^32) - 1 = 1103806595071
+    assertEquals(1103806595071L, value1.getLong(0));
+    // 0x 000100FFFFFFFF00 = (2^48) + (2^40) - 1 - 255 = 282574488338176
+    assertEquals(282574488338176L, value1.getLong(1));
+
+    Bytes value2 = w(new byte[] {-1, -1, -1, -1, -1, -1, -1, -1});
+    assertEquals(-1L, value2.getLong(0));
+  }
+
+  @Test
+  void testGetLongNegativeIndex() {
+    assertThrows(IndexOutOfBoundsException.class, () -> w(new byte[] {1, 2, 3, 4, 5, 6, 7, 8}).getLong(-1));
+  }
+
+  @Test
+  void testGetLongOutOfBound() {
+    assertThrows(IndexOutOfBoundsException.class, () -> w(new byte[] {1, 2, 3, 4, 5, 6, 7, 8}).getLong(8));
+  }
+
+  @Test
+  void testGetLongNotEnoughBytes() {
+    assertThrows(IndexOutOfBoundsException.class, () -> w(new byte[] {1, 2, 3, 4}).getLong(0));
+  }
+
+  @Test
+  void testAsLong() {
+    assertEquals(0, Bytes.EMPTY.toLong());
+    Bytes value1 = w(new byte[] {0, 0, 1, 0, -1, -1, -1, -1});
+    // 0x00000100FFFFFFFF = (2^40) + (2^32) - 1 = 1103806595071
+    assertEquals(1103806595071L, value1.toLong());
+    assertEquals(1103806595071L, value1.slice(2).toLong());
+    Bytes value2 = w(new byte[] {0, 1, 0, -1, -1, -1, -1, 0});
+    // 0x000100FFFFFFFF00 = (2^48) + (2^40) - 1 - 255 = 282574488338176
+    assertEquals(282574488338176L, value2.toLong());
+    assertEquals(282574488338176L, value2.slice(1).toLong());
+
+    Bytes value3 = w(new byte[] {-1, -1, -1, -1, -1, -1, -1, -1});
+    assertEquals(-1L, value3.toLong());
+  }
+
+  @Test
+  void testAsLongTooManyBytes() {
+    Throwable exception =
+        assertThrows(IllegalArgumentException.class, () -> w(new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9}).toLong());
+    assertEquals("Value of size 9 has more than 8 bytes", exception.getMessage());
+  }
+
+  @Test
+  void testSlice() {
+    assertEquals(h("0x"), h("0x0123456789").slice(0, 0));
+    assertEquals(h("0x"), h("0x0123456789").slice(2, 0));
+    assertEquals(h("0x01"), h("0x0123456789").slice(0, 1));
+    assertEquals(h("0x0123"), h("0x0123456789").slice(0, 2));
+
+    assertEquals(h("0x4567"), h("0x0123456789").slice(2, 2));
+    assertEquals(h("0x23456789"), h("0x0123456789").slice(1, 4));
+  }
+
+  @Test
+  void testSliceNegativeOffset() {
+    assertThrows(IndexOutOfBoundsException.class, () -> h("0x012345").slice(-1, 2));
+  }
+
+  @Test
+  void testSliceOffsetOutOfBound() {
+    assertThrows(IndexOutOfBoundsException.class, () -> h("0x012345").slice(3, 2));
+  }
+
+  @Test
+  void testSliceTooLong() {
+    Throwable exception = assertThrows(IllegalArgumentException.class, () -> h("0x012345").slice(1, 3));
+    assertEquals(
+        "Provided length 3 is too big: the value has size 3 and has only 2 bytes from 1",
+        exception.getMessage());
+  }
+
+  @Test
+  void testMutableCopy() {
+    Bytes v = h("0x012345");
+    MutableBytes mutableCopy = v.mutableCopy();
+
+    // Initially, copy must be equal.
+    assertEquals(mutableCopy, v);
+
+    // Upon modification, original should not have been modified.
+    mutableCopy.set(0, (byte) -1);
+    assertNotEquals(mutableCopy, v);
+    assertEquals(h("0x012345"), v);
+    assertEquals(h("0xFF2345"), mutableCopy);
+  }
+
+  @Test
+  void testCopyTo() {
+    MutableBytes dest;
+
+    // The follow does nothing, but simply making sure it doesn't throw.
+    dest = MutableBytes.EMPTY;
+    Bytes.EMPTY.copyTo(dest);
+    assertEquals(Bytes.EMPTY, dest);
+
+    dest = MutableBytes.create(1);
+    of(1).copyTo(dest);
+    assertEquals(h("0x01"), dest);
+
+    dest = MutableBytes.create(1);
+    of(10).copyTo(dest);
+    assertEquals(h("0x0A"), dest);
+
+    dest = MutableBytes.create(2);
+    of(0xff, 0x03).copyTo(dest);
+    assertEquals(h("0xFF03"), dest);
+
+    dest = MutableBytes.create(4);
+    of(0xff, 0x03).copyTo(dest.mutableSlice(1, 2));
+    assertEquals(h("0x00FF0300"), dest);
+  }
+
+  @Test
+  void testCopyToTooSmall() {
+    Throwable exception =
+        assertThrows(IllegalArgumentException.class, () -> of(1, 2, 3).copyTo(MutableBytes.create(2)));
+    assertEquals("Cannot copy 3 bytes to destination of non-equal size 2", exception.getMessage());
+  }
+
+  @Test
+  void testCopyToTooBig() {
+    Throwable exception =
+        assertThrows(IllegalArgumentException.class, () -> of(1, 2, 3).copyTo(MutableBytes.create(4)));
+    assertEquals("Cannot copy 3 bytes to destination of non-equal size 4", exception.getMessage());
+  }
+
+  @Test
+  void testCopyToWithOffset() {
+    MutableBytes dest;
+
+    dest = MutableBytes.wrap(new byte[] {1, 2, 3});
+    Bytes.EMPTY.copyTo(dest, 0);
+    assertEquals(h("0x010203"), dest);
+
+    dest = MutableBytes.wrap(new byte[] {1, 2, 3});
+    of(1).copyTo(dest, 1);
+    assertEquals(h("0x010103"), dest);
+
+    dest = MutableBytes.wrap(new byte[] {1, 2, 3});
+    of(2).copyTo(dest, 0);
+    assertEquals(h("0x020203"), dest);
+
+    dest = MutableBytes.wrap(new byte[] {1, 2, 3});
+    of(1, 1).copyTo(dest, 1);
+    assertEquals(h("0x010101"), dest);
+
+    dest = MutableBytes.create(4);
+    of(0xff, 0x03).copyTo(dest, 1);
+    assertEquals(h("0x00FF0300"), dest);
+  }
+
+  @Test
+  void testCopyToWithOffsetTooSmall() {
+    Throwable exception =
+        assertThrows(IllegalArgumentException.class, () -> of(1, 2, 3).copyTo(MutableBytes.create(4), 2));
+    assertEquals("Cannot copy 3 bytes, destination has only 2 bytes from index 2", exception.getMessage());
+  }
+
+  @Test
+  void testCopyToWithNegativeOffset() {
+    assertThrows(IndexOutOfBoundsException.class, () -> of(1, 2, 3).copyTo(MutableBytes.create(10), -1));
+  }
+
+  @Test
+  void testCopyToWithOutOfBoundIndex() {
+    assertThrows(IndexOutOfBoundsException.class, () -> of(1, 2, 3).copyTo(MutableBytes.create(10), 10));
+  }
+
+  @Test
+  void testAppendTo() {
+    testAppendTo(Bytes.EMPTY, Buffer.buffer(), Bytes.EMPTY);
+    testAppendTo(Bytes.EMPTY, Buffer.buffer(h("0x1234").toArrayUnsafe()), h("0x1234"));
+    testAppendTo(h("0x1234"), Buffer.buffer(), h("0x1234"));
+    testAppendTo(h("0x5678"), Buffer.buffer(h("0x1234").toArrayUnsafe()), h("0x12345678"));
+  }
+
+  private void testAppendTo(Bytes toAppend, Buffer buffer, Bytes expected) {
+    toAppend.appendTo(buffer);
+    assertEquals(expected, Bytes.wrap(buffer.getBytes()));
+  }
+
+  @Test
+  void testIsZero() {
+    assertTrue(Bytes.EMPTY.isZero());
+    assertTrue(Bytes.of(0).isZero());
+    assertTrue(Bytes.of(0, 0, 0).isZero());
+
+    assertFalse(Bytes.of(1).isZero());
+    assertFalse(Bytes.of(1, 0, 0).isZero());
+    assertFalse(Bytes.of(0, 0, 1).isZero());
+    assertFalse(Bytes.of(0, 0, 1, 0, 0).isZero());
+  }
+
+  @Test
+  void testIsEmpty() {
+    assertTrue(Bytes.EMPTY.isEmpty());
+
+    assertFalse(Bytes.of(0).isEmpty());
+    assertFalse(Bytes.of(0, 0, 0).isEmpty());
+    assertFalse(Bytes.of(1).isEmpty());
+  }
+
+  @Test
+  void findsCommonPrefix() {
+    Bytes v = Bytes.of(1, 2, 3, 4, 5, 6, 7);
+    Bytes o = Bytes.of(1, 2, 3, 4, 4, 3, 2);
+    assertEquals(4, v.commonPrefixLength(o));
+    assertEquals(Bytes.of(1, 2, 3, 4), v.commonPrefix(o));
+  }
+
+  @Test
+  void findsCommonPrefixOfShorter() {
+    Bytes v = Bytes.of(1, 2, 3, 4, 5, 6, 7);
+    Bytes o = Bytes.of(1, 2, 3, 4);
+    assertEquals(4, v.commonPrefixLength(o));
+    assertEquals(Bytes.of(1, 2, 3, 4), v.commonPrefix(o));
+  }
+
+  @Test
+  void findsCommonPrefixOfLonger() {
+    Bytes v = Bytes.of(1, 2, 3, 4);
+    Bytes o = Bytes.of(1, 2, 3, 4, 4, 3, 2);
+    assertEquals(4, v.commonPrefixLength(o));
+    assertEquals(Bytes.of(1, 2, 3, 4), v.commonPrefix(o));
+  }
+
+  @Test
+  void findsCommonPrefixOfSliced() {
+    Bytes v = Bytes.of(1, 2, 3, 4).slice(2, 2);
+    Bytes o = Bytes.of(3, 4, 3, 3, 2).slice(3, 2);
+    assertEquals(1, v.commonPrefixLength(o));
+    assertEquals(Bytes.of(3), v.commonPrefix(o));
+  }
+
+  @Test
+  void testTrimLeadingZeroes() {
+    assertEquals(h("0x"), h("0x").trimLeadingZeros());
+    assertEquals(h("0x"), h("0x00").trimLeadingZeros());
+    assertEquals(h("0x"), h("0x00000000").trimLeadingZeros());
+
+    assertEquals(h("0x01"), h("0x01").trimLeadingZeros());
+    assertEquals(h("0x01"), h("0x00000001").trimLeadingZeros());
+
+    assertEquals(h("0x3010"), h("0x3010").trimLeadingZeros());
+    assertEquals(h("0x3010"), h("0x00003010").trimLeadingZeros());
+
+    assertEquals(h("0xFFFFFFFF"), h("0xFFFFFFFF").trimLeadingZeros());
+    assertEquals(h("0xFFFFFFFF"), h("0x000000000000FFFFFFFF").trimLeadingZeros());
+  }
+
+  @Test
+  void slideToEnd() {
+    assertEquals(Bytes.of(1, 2, 3, 4), Bytes.of(1, 2, 3, 4).slice(0));
+    assertEquals(Bytes.of(2, 3, 4), Bytes.of(1, 2, 3, 4).slice(1));
+    assertEquals(Bytes.of(3, 4), Bytes.of(1, 2, 3, 4).slice(2));
+    assertEquals(Bytes.of(4), Bytes.of(1, 2, 3, 4).slice(3));
+  }
+
+  @Test
+  void slicePastEndReturnsEmpty() {
+    assertEquals(Bytes.EMPTY, Bytes.of(1, 2, 3, 4).slice(4));
+    assertEquals(Bytes.EMPTY, Bytes.of(1, 2, 3, 4).slice(5));
+  }
+
+  @Test
+  void testUpdate() throws NoSuchAlgorithmException {
+    // Digest the same byte array in 4 ways:
+    //  1) directly from the array
+    //  2) after wrapped using the update() method
+    //  3) after wrapped and copied using the update() method
+    //  4) after wrapped but getting the byte manually
+    // and check all compute the same digest.
+    MessageDigest md1 = MessageDigest.getInstance("SHA-1");
+    MessageDigest md2 = MessageDigest.getInstance("SHA-1");
+    MessageDigest md3 = MessageDigest.getInstance("SHA-1");
+    MessageDigest md4 = MessageDigest.getInstance("SHA-1");
+
+    byte[] toDigest = new BigInteger("12324029423415041783577517238472017314").toByteArray();
+    Bytes wrapped = w(toDigest);
+
+    byte[] digest1 = md1.digest(toDigest);
+
+    wrapped.update(md2);
+    byte[] digest2 = md2.digest();
+
+    wrapped.copy().update(md3);
+    byte[] digest3 = md3.digest();
+
+    for (int i = 0; i < wrapped.size(); i++)
+      md4.update(wrapped.get(i));
+    byte[] digest4 = md4.digest();
+
+    assertArrayEquals(digest2, digest1);
+    assertArrayEquals(digest3, digest1);
+    assertArrayEquals(digest4, digest1);
+  }
+
+  @Test
+  void testArrayExtraction() {
+    // extractArray() and getArrayUnsafe() have essentially the same contract...
+    testArrayExtraction(Bytes::toArray);
+    testArrayExtraction(Bytes::toArrayUnsafe);
+
+    // But on top of the basic, extractArray() guarantees modifying the returned array is safe from
+    // impacting the original value (not that getArrayUnsafe makes no guarantees here one way or
+    // another, so there is nothing to test).
+    byte[] orig = new byte[] {1, 2, 3, 4};
+    Bytes value = w(orig);
+    byte[] extracted = value.toArray();
+    assertArrayEquals(orig, extracted);
+    Arrays.fill(extracted, (byte) -1);
+    assertArrayEquals(extracted, new byte[] {-1, -1, -1, -1});
+    assertArrayEquals(orig, new byte[] {1, 2, 3, 4});
+    assertEquals(of(1, 2, 3, 4), value);
+  }
+
+  private void testArrayExtraction(Function<Bytes, byte[]> extractor) {
+    byte[] bytes = new byte[0];
+    assertArrayEquals(extractor.apply(Bytes.EMPTY), bytes);
+
+    byte[][] toTest = new byte[][] {new byte[] {1}, new byte[] {1, 2, 3, 4, 5, 6}, new byte[] {-1, -1, 0, -1}};
+    for (byte[] array : toTest) {
+      assertArrayEquals(extractor.apply(w(array)), array);
+    }
+
+    // Test slightly more complex interactions
+    assertArrayEquals(extractor.apply(w(new byte[] {1, 2, 3, 4, 5}).slice(2, 2)), new byte[] {3, 4});
+    assertArrayEquals(extractor.apply(w(new byte[] {1, 2, 3, 4, 5}).slice(2, 0)), new byte[] {});
+  }
+
+  @Test
+  void testToString() {
+    assertEquals("0x", Bytes.EMPTY.toString());
+
+    assertEquals("0x01", of(1).toString());
+    assertEquals("0x0AFF03", of(0x0a, 0xff, 0x03).toString());
+  }
+
+  @Test
+  void testHasLeadingZeroByte() {
+    assertFalse(Bytes.fromHexString("0x").hasLeadingZeroByte());
+    assertTrue(Bytes.fromHexString("0x0012").hasLeadingZeroByte());
+    assertFalse(Bytes.fromHexString("0x120012").hasLeadingZeroByte());
+  }
+
+  @Test
+  void testNumberOfLeadingZeroBytes() {
+    assertEquals(0, Bytes.fromHexString("0x12").numberOfLeadingZeroBytes());
+    assertEquals(1, Bytes.fromHexString("0x0012").numberOfLeadingZeroBytes());
+    assertEquals(2, Bytes.fromHexString("0x000012").numberOfLeadingZeroBytes());
+    assertEquals(0, Bytes.fromHexString("0x").numberOfLeadingZeroBytes());
+    assertEquals(1, Bytes.fromHexString("0x00").numberOfLeadingZeroBytes());
+    assertEquals(2, Bytes.fromHexString("0x0000").numberOfLeadingZeroBytes());
+    assertEquals(3, Bytes.fromHexString("0x000000").numberOfLeadingZeroBytes());
+  }
+
+  @Test
+  void testNumberOfTrailingZeroBytes() {
+    assertEquals(0, Bytes.fromHexString("0x12").numberOfTrailingZeroBytes());
+    assertEquals(1, Bytes.fromHexString("0x1200").numberOfTrailingZeroBytes());
+    assertEquals(2, Bytes.fromHexString("0x120000").numberOfTrailingZeroBytes());
+    assertEquals(0, Bytes.fromHexString("0x").numberOfTrailingZeroBytes());
+    assertEquals(1, Bytes.fromHexString("0x00").numberOfTrailingZeroBytes());
+    assertEquals(2, Bytes.fromHexString("0x0000").numberOfTrailingZeroBytes());
+    assertEquals(3, Bytes.fromHexString("0x000000").numberOfTrailingZeroBytes());
+  }
+
+  @Test
+  void testHasLeadingZeroBit() {
+    assertFalse(Bytes.fromHexString("0x").hasLeadingZero());
+    assertTrue(Bytes.fromHexString("0x01").hasLeadingZero());
+    assertFalse(Bytes.fromHexString("0xFF0012").hasLeadingZero());
+  }
+
+  @Test
+  void testEquals() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key);
+    Bytes b2 = w(key);
+    assertEquals(b.hashCode(), b2.hashCode());
+  }
+
+  @Test
+  void testEqualsWithOffset() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key).slice(16, 4);
+    Bytes b2 = w(key).slice(16, 8).slice(0, 4);
+    assertEquals(b, b2);
+  }
+
+  @Test
+  void testHashCode() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key);
+    Bytes b2 = w(key);
+    assertEquals(b.hashCode(), b2.hashCode());
+  }
+
+  @Test
+  void testHashCodeWithOffset() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key).slice(16, 16);
+    Bytes b2 = w(key).slice(16, 16);
+    assertEquals(b.hashCode(), b2.hashCode());
+  }
+
+  @Test
+  void testHashCodeWithByteBufferWrappingBytes() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key);
+    Bytes other = Bytes.wrapByteBuffer(ByteBuffer.wrap(key));
+    assertEquals(b.hashCode(), other.hashCode());
+  }
+
+  @Test
+  void testEqualsWithByteBufferWrappingBytes() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key);
+    Bytes other = Bytes.wrapByteBuffer(ByteBuffer.wrap(key));
+    assertEquals(b, other);
+  }
+
+  @Test
+  void testHashCodeWithBufferWrappingBytes() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key);
+    Bytes other = Bytes.wrapBuffer(Buffer.buffer(key));
+    assertEquals(b.hashCode(), other.hashCode());
+  }
+
+  @Test
+  void testEqualsWithBufferWrappingBytes() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key);
+    Bytes other = Bytes.wrapBuffer(Buffer.buffer(key));
+    assertEquals(b, other);
+  }
+
+  @Test
+  void testHashCodeWithByteBufWrappingBytes() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key);
+    Bytes other = Bytes.wrapByteBuf(Unpooled.copiedBuffer(key));
+    assertEquals(b.hashCode(), other.hashCode());
+  }
+
+  @Test
+  void testEqualsWithByteBufWrappingBytes() {
+    SecureRandom random = new SecureRandom();
+    byte[] key = new byte[32];
+    random.nextBytes(key);
+    Bytes b = w(key);
+    Bytes other = Bytes.wrapByteBuf(Unpooled.copiedBuffer(key));
+    assertEquals(b, other);
+  }
+}
diff --git a/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java b/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
new file mode 100644
index 0000000..f3b09e8
--- /dev/null
+++ b/bytes/src/test/java/net/consensys/cava/bytes/ConcatenatedBytesTest.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.bytes;
+
+import static net.consensys.cava.bytes.Bytes.fromHexString;
+import static net.consensys.cava.bytes.Bytes.wrap;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class ConcatenatedBytesTest {
+
+  @ParameterizedTest
+  @MethodSource("concatenatedWrapProvider")
+  void concatenatedWrap(Object arr1, Object arr2) {
+    byte[] first = (byte[]) arr1;
+    byte[] second = (byte[]) arr2;
+    byte[] res = wrap(wrap(first), wrap(second)).toArray();
+    assertArrayEquals(Arrays.copyOfRange(res, 0, first.length), first);
+    assertArrayEquals(Arrays.copyOfRange(res, first.length, res.length), second);
+  }
+
+  private static Stream<Arguments> concatenatedWrapProvider() {
+    return Stream.of(
+        Arguments.of(new byte[] {}, new byte[] {}),
+        Arguments.of(new byte[] {}, new byte[] {1, 2, 3}),
+        Arguments.of(new byte[] {1, 2, 3}, new byte[] {}),
+        Arguments.of(new byte[] {1, 2, 3}, new byte[] {4, 5}));
+  }
+
+  @Test
+  void testConcatenatedWrapReflectsUpdates() {
+    byte[] first = new byte[] {1, 2, 3};
+    byte[] second = new byte[] {4, 5};
+    byte[] expected1 = new byte[] {1, 2, 3, 4, 5};
+    Bytes res = wrap(wrap(first), wrap(second));
+    assertArrayEquals(res.toArray(), expected1);
+
+    first[1] = 42;
+    second[0] = 42;
+    byte[] expected2 = new byte[] {1, 42, 3, 42, 5};
+    assertArrayEquals(res.toArray(), expected2);
+  }
+
+  @Test
+  void shouldReadConcatenatedValue() {
+    Bytes bytes = wrap(fromHexString("0x01234567"), fromHexString("0x89ABCDEF"));
+    assertEquals(8, bytes.size());
+    assertEquals("0x0123456789ABCDEF", bytes.toHexString());
+  }
+
+  @Test
+  void shouldSliceConcatenatedValue() {
+    Bytes bytes = wrap(
+        fromHexString("0x01234567"),
+        fromHexString("0x89ABCDEF"),
+        fromHexString("0x01234567"),
+        fromHexString("0x89ABCDEF"));
+    assertEquals("0x", bytes.slice(4, 0).toHexString());
+    assertEquals("0x0123456789ABCDEF0123456789ABCDEF", bytes.slice(0, 16).toHexString());
+    assertEquals("0x01234567", bytes.slice(0, 4).toHexString());
+    assertEquals("0x0123", bytes.slice(0, 2).toHexString());
+    assertEquals("0x6789", bytes.slice(3, 2).toHexString());
+    assertEquals("0x89ABCDEF", bytes.slice(4, 4).toHexString());
+    assertEquals("0xABCD", bytes.slice(5, 2).toHexString());
+    assertEquals("0xEF012345", bytes.slice(7, 4).toHexString());
+    assertEquals("0x01234567", bytes.slice(8, 4).toHexString());
+    assertEquals("0x456789ABCDEF", bytes.slice(10, 6).toHexString());
+    assertEquals("0x89ABCDEF", bytes.slice(12, 4).toHexString());
+  }
+
+  @Test
+  void shouldReadDeepConcatenatedValue() {
+    Bytes bytes = wrap(
+        wrap(fromHexString("0x01234567"), fromHexString("0x89ABCDEF")),
+        wrap(fromHexString("0x01234567"), fromHexString("0x89ABCDEF")),
+        fromHexString("0x01234567"),
+        fromHexString("0x89ABCDEF"));
+    assertEquals(24, bytes.size());
+    assertEquals("0x0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF", bytes.toHexString());
+  }
+}
diff --git a/concurrent-coroutines/build.gradle b/concurrent-coroutines/build.gradle
new file mode 100644
index 0000000..f686a8d
--- /dev/null
+++ b/concurrent-coroutines/build.gradle
@@ -0,0 +1,11 @@
+description = 'Kotlin coroutine extensions for cava concurrency primitives.'
+
+dependencies {
+  compile project(':concurrent')
+  compile 'org.jetbrains.kotlinx:kotlinx-coroutines-core'
+
+  testCompile 'org.junit.jupiter:junit-jupiter-api'
+  testCompile 'org.junit.jupiter:junit-jupiter-params'
+
+  testRuntime 'org.junit.jupiter:junit-jupiter-engine'
+}
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
new file mode 100644
index 0000000..4cd0969
--- /dev/null
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncCompletion.kt
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.concurrent.coroutines
+
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.CompletableDeferred
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.InternalCoroutinesApi
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.ObsoleteCoroutinesApi
+import kotlinx.coroutines.newCoroutineContext
+import kotlinx.coroutines.suspendCancellableCoroutine
+import net.consensys.cava.concurrent.AsyncCompletion
+import net.consensys.cava.concurrent.CompletableAsyncCompletion
+import java.util.concurrent.CancellationException
+import java.util.concurrent.CompletionException
+import java.util.function.Consumer
+import kotlin.coroutines.Continuation
+import kotlin.coroutines.ContinuationInterceptor
+import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+
+/**
+ * Starts new co-routine and returns its result as an implementation of [AsyncCompletion].
+ * The running co-routine is cancelled when the resulting future is cancelled or otherwise completed.
+ *
+ * Co-routine context is inherited from a [CoroutineScope], additional context elements can be specified with [context]
+ * argument. If the context does not have any dispatcher nor any other [ContinuationInterceptor], then
+ * [Dispatchers.Default] is used. The parent job is inherited from a [CoroutineScope] as well, but it can also be
+ * overridden with corresponding [coroutineContext] element.
+ *
+ * By default, the co-routine is immediately scheduled for execution. Other options can be specified via `start`
+ * parameter. See [CoroutineStart] for details. A value of [CoroutineStart.LAZY] is not supported (since
+ * `AsyncResult` framework does not provide the corresponding capability) and produces [IllegalArgumentException].
+ *
+ * See [newCoroutineContext][CoroutineScope.newCoroutineContext] for a description of debugging facilities that are
+ * available for newly created co-routine.
+ *
+ * @param context Additional to [CoroutineScope.coroutineContext] context of the coroutine.
+ * @param start Co-routine start option. The default value is [CoroutineStart.DEFAULT].
+ * @param block The co-routine code.
+ */
+@UseExperimental(InternalCoroutinesApi::class, ObsoleteCoroutinesApi::class, ExperimentalCoroutinesApi::class)
+fun CoroutineScope.asyncCompletion(
+  context: CoroutineContext = Dispatchers.Default,
+  start: CoroutineStart = CoroutineStart.DEFAULT,
+  block: suspend CoroutineScope.() -> Unit
+): AsyncCompletion {
+  require(!start.isLazy) { "$start start is not supported" }
+  val newContext = this.newCoroutineContext(context)
+  val job = Job(newContext[Job])
+  val coroutine = AsyncCompletionCoroutine(newContext + job)
+  job.invokeOnCompletion { coroutine.asynCompletion.cancel() }
+  coroutine.asynCompletion.whenComplete { job.cancel() }
+  start(block, receiver = coroutine, completion = coroutine) // use the specified start strategy
+  return coroutine.asynCompletion
+}
+
+private class AsyncCompletionCoroutine(
+  override val context: CoroutineContext,
+  val asynCompletion: CompletableAsyncCompletion = AsyncCompletion.incomplete()
+) : Continuation<Unit>, CoroutineScope {
+  override val coroutineContext: CoroutineContext get() = context
+  override fun resumeWith(result: Result<Unit>) {
+    result
+      .onSuccess { asynCompletion.complete() }
+      .onFailure { asynCompletion.completeExceptionally(it) }
+  }
+}
+
+/**
+ * Converts this deferred value to a [AsyncCompletion].
+ * The deferred value is cancelled when the returned [AsyncCompletion] is cancelled or otherwise completed.
+ */
+@UseExperimental(ObsoleteCoroutinesApi::class)
+fun Deferred<Unit>.asAsyncCompletion(): AsyncCompletion {
+  val asyncCompletion = AsyncCompletion.incomplete()
+  asyncCompletion.whenComplete { cancel() }
+  invokeOnCompletion {
+    try {
+      asyncCompletion.complete()
+    } catch (exception: Exception) {
+      asyncCompletion.completeExceptionally(exception)
+    }
+  }
+  return asyncCompletion
+}
+
+/**
+ * Converts this job to a [AsyncCompletion].
+ * The job is cancelled when the returned [AsyncCompletion] is cancelled or otherwise completed.
+ */
+@UseExperimental(ObsoleteCoroutinesApi::class)
+fun Job.asAsyncCompletion(): AsyncCompletion {
+  val asyncCompletion = AsyncCompletion.incomplete()
+  asyncCompletion.whenComplete { cancel() }
+  invokeOnCompletion {
+    try {
+      asyncCompletion.complete()
+    } catch (exception: Exception) {
+      asyncCompletion.completeExceptionally(exception)
+    }
+  }
+  return asyncCompletion
+}
+
+/**
+ * Converts this [AsyncCompletion] to an instance of [Deferred].
+ * The [AsyncCompletion] is cancelled when the resulting deferred is cancelled.
+ */
+@UseExperimental(ObsoleteCoroutinesApi::class)
+fun AsyncCompletion.asDeferred(): Deferred<Unit> {
+  // Fast path if already completed
+  if (isDone) {
+    return try {
+      CompletableDeferred(join())
+    } catch (e: Throwable) {
+      // unwrap original cause from CompletionException
+      val original = (e as? CompletionException)?.cause ?: e
+      CompletableDeferred<Unit>().also { it.completeExceptionally(original) }
+    }
+  }
+  val result = CompletableDeferred<Unit>()
+  whenComplete { exception ->
+    if (exception == null) {
+      result.complete(Unit)
+    } else {
+      result.completeExceptionally(exception)
+    }
+  }
+  result.invokeOnCompletion { this.cancel() }
+  return result
+}
+
+/**
+ * Awaits for completion of the [AsyncCompletion] without blocking a thread.
+ *
+ * This suspending function is cancellable. If the [Job] of the current coroutine is cancelled or completed while this
+ * suspending function is waiting, this function stops waiting for the [AsyncCompletion] and immediately resumes with
+ * [CancellationException].
+ *
+ * Note, that [AsyncCompletion] does not support prompt removal of listeners, so on cancellation of this wait a few
+ * small objects will remain in the [AsyncCompletion] stack of completion actions until it completes itself. However,
+ * care is taken to clear the reference to the waiting coroutine itself, so that its memory can be released even if the
+ * [AsyncCompletion] never completes.
+ */
+suspend fun AsyncCompletion.await() {
+  // fast path when CompletableFuture is already done (does not suspend)
+  if (isDone) {
+    try {
+      return join()
+    } catch (e: CompletionException) {
+      throw e.cause ?: e // unwrap original cause from CompletionException
+    }
+  }
+  // slow path -- suspend
+  return suspendCancellableCoroutine { cont: CancellableContinuation<Unit> ->
+    val consumer = ContinuationConsumer(cont)
+    whenComplete(consumer)
+    cont.invokeOnCancellation {
+      consumer.cont = null // shall clear reference to continuation
+    }
+  }
+}
+
+private class ContinuationConsumer(
+  @Volatile @JvmField var cont: Continuation<Unit>?
+) : Consumer<Throwable?> {
+  override fun accept(exception: Throwable?) {
+    val cont = this.cont ?: return // atomically read current value unless null
+    if (exception == null) {
+      // the future has been completed normally
+      cont.resume(Unit)
+    } else {
+      // the future has completed with an exception, unwrap it to provide consistent view of .await() result and to propagate only original exception
+      cont.resumeWithException((exception as? CompletionException)?.cause ?: exception)
+    }
+  }
+}
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
new file mode 100644
index 0000000..7149b2e
--- /dev/null
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/AsyncResult.kt
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.concurrent.coroutines
+
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.CompletableDeferred
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.InternalCoroutinesApi
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.ObsoleteCoroutinesApi
+import kotlinx.coroutines.newCoroutineContext
+import kotlinx.coroutines.suspendCancellableCoroutine
+import net.consensys.cava.concurrent.AsyncResult
+import net.consensys.cava.concurrent.CompletableAsyncResult
+import java.util.concurrent.CancellationException
+import java.util.concurrent.CompletionException
+import java.util.function.BiConsumer
+import kotlin.Result
+import kotlin.coroutines.Continuation
+import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+
+/**
+ * Starts new co-routine and returns its result as an implementation of [AsyncResult].
+ * The running co-outine is cancelled when the resulting future is cancelled or otherwise completed.
+ *
+ * Co-routine context is inherited from a [CoroutineScope], additional context elements can be specified with [context]
+ * argument. If the context does not have any dispatcher nor any other [ContinuationInterceptor], then
+ * [Dispatchers.Default] is used. The parent job is inherited from a [CoroutineScope] as well, but it can also be
+ * overridden with corresponding [coroutineContext] element.
+ *
+ * By default, the co-routine is immediately scheduled for execution. Other options can be specified via `start`
+ * parameter. See [CoroutineStart] for details. A value of [CoroutineStart.LAZY] is not supported (since
+ * `AsyncResult` framework does not provide the corresponding capability) and produces [IllegalArgumentException].
+ *
+ * See [newCoroutineContext][CoroutineScope.newCoroutineContext] for a description of debugging facilities that are
+ * available for newly created co-routine.
+ *
+ * @param context Additional to [CoroutineScope.coroutineContext] context of the coroutine.
+ * @param start Co-routine start option. The default value is [CoroutineStart.DEFAULT].
+ * @param block The co-routine code.
+ */
+@UseExperimental(InternalCoroutinesApi::class, ObsoleteCoroutinesApi::class, ExperimentalCoroutinesApi::class)
+fun <T> CoroutineScope.asyncResult(
+  context: CoroutineContext = Dispatchers.Default,
+  start: CoroutineStart = CoroutineStart.DEFAULT,
+  block: suspend CoroutineScope.() -> T
+): AsyncResult<T> {
+  require(!start.isLazy) { "$start start is not supported" }
+  val newContext = this.newCoroutineContext(context)
+  val job = Job(newContext[Job])
+  val coroutine = AsyncResultCoroutine<T>(newContext + job)
+  job.invokeOnCompletion { coroutine.asyncResult.cancel() }
+  coroutine.asyncResult.whenComplete { _, _ -> job.cancel() }
+  start(block, receiver = coroutine, completion = coroutine) // use the specified start strategy
+  return coroutine.asyncResult
+}
+
+private class AsyncResultCoroutine<T>(
+  override val context: CoroutineContext,
+  val asyncResult: CompletableAsyncResult<T> = AsyncResult.incomplete()
+) : Continuation<T>, CoroutineScope {
+  override val coroutineContext: CoroutineContext get() = context
+  override fun resumeWith(result: Result<T>) {
+    result
+      .onSuccess { asyncResult.complete(it) }
+      .onFailure { asyncResult.completeExceptionally(it) }
+  }
+}
+
+/**
+ * Converts this deferred value to an [AsyncResult].
+ * The deferred value is cancelled when the returned [AsyncResult] is cancelled or otherwise completed.
+ */
+@UseExperimental(ExperimentalCoroutinesApi::class, ObsoleteCoroutinesApi::class)
+fun <T> Deferred<T>.asAsyncResult(): AsyncResult<T> {
+  val asyncResult = AsyncResult.incomplete<T>()
+  asyncResult.whenComplete { _, _ -> cancel() }
+  invokeOnCompletion {
+    try {
+      asyncResult.complete(getCompleted())
+    } catch (exception: Exception) {
+      asyncResult.completeExceptionally(exception)
+    }
+  }
+  return asyncResult
+}
+
+/**
+ * Converts this [AsyncResult] to an instance of [Deferred].
+ * The [AsyncResult] is cancelled when the resulting deferred is cancelled.
+ */
+@UseExperimental(ObsoleteCoroutinesApi::class)
+fun <T> AsyncResult<T>.asDeferred(): Deferred<T> {
+  // Fast path if already completed
+  if (isDone) {
+    return try {
+      @Suppress("UNCHECKED_CAST")
+      CompletableDeferred(get() as T)
+    } catch (e: Throwable) {
+      // unwrap original cause from CompletionException
+      val original = (e as? CompletionException)?.cause ?: e
+      CompletableDeferred<T>().also { it.completeExceptionally(original) }
+    }
+  }
+  val result = CompletableDeferred<T>()
+  whenComplete { value, exception ->
+    if (exception == null) {
+      result.complete(value)
+    } else {
+      result.completeExceptionally(exception)
+    }
+  }
+  result.invokeOnCompletion { this.cancel() }
+  return result
+}
+
+/**
+ * Awaits for completion of the [AsyncResult] without blocking a thread.
+ *
+ * This suspending function is cancellable.
+ * If the [Job] of the current coroutine is cancelled or completed while this suspending function is waiting, this function
+ * stops waiting for the [AsyncResult] and immediately resumes with [CancellationException].
+ *
+ * Note, that [AsyncResult] does not support prompt removal of listeners, so on cancellation of this wait
+ * a few small objects will remain in the [AsyncResult] stack of completion actions until it completes itself.
+ * However, care is taken to clear the reference to the waiting coroutine itself, so that its memory can be
+ * released even if the [AsyncResult] never completes.
+ */
+suspend fun <T> AsyncResult<T>.await(): T {
+  // fast path when CompletableFuture is already done (does not suspend)
+  if (isDone) {
+    try {
+      @Suppress("UNCHECKED_CAST")
+      return get() as T
+    } catch (e: CompletionException) {
+      throw e.cause ?: e // unwrap original cause from CompletionException
+    }
+  }
+  // slow path -- suspend
+  return suspendCancellableCoroutine { cont: CancellableContinuation<T> ->
+    val consumer = ContinuationBiConsumer(cont)
+    whenComplete(consumer)
+    cont.invokeOnCancellation {
+      consumer.cont = null // shall clear reference to continuation
+    }
+  }
+}
+
+private class ContinuationBiConsumer<T>(
+  @Volatile @JvmField var cont: Continuation<T>?
+) : BiConsumer<T?, Throwable?> {
+  @Suppress("UNCHECKED_CAST")
+  override fun accept(result: T?, exception: Throwable?) {
+    val cont = this.cont ?: return // atomically read current value unless null
+    if (exception == null) {
+      // the future has been completed normally
+      cont.resume(result as T)
+    } else {
+      // the future has completed with an exception, unwrap it to provide consistent view of .await() result and to propagate only original exception
+      cont.resumeWithException((exception as? CompletionException)?.cause ?: exception)
+    }
+  }
+}
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
new file mode 100644
index 0000000..ec609e1
--- /dev/null
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatch.kt
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.concurrent.coroutines
+
+import kotlinx.coroutines.suspendCancellableCoroutine
+import java.util.concurrent.atomic.AtomicInteger
+import kotlin.coroutines.Continuation
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+
+/**
+ * A co-routine synchronization aid that allows co-routines to wait until a set of operations being performed
+ * has completed.
+ *
+ * The latch is initialized with a given count. If the latch count is greater than zero, the `await()` method will
+ * suspend until the count reaches zero due to invocations of the `countDown()` method, at which point all suspended
+ * co-routines will be resumed.
+ *
+ * Unlike the Java `CountDownLatch`, this latch allows the count to be increased via invocation of the `countUp()`
+ * method. Increasing the count from zero will result in calls to `await()` suspending again. Note that the count may
+ * be negative, requiring multiple calls to `countUp()` before calls to `await()` suspend.
+ *
+ * @param initial The initial count of the latch, which may be positive, zero, or negative.
+ * @constructor A latch.
+ */
+class CoroutineLatch(initial: Int) {
+
+  private val atomicCount = AtomicInteger(initial)
+  private var waitingCoroutines = mutableListOf<Continuation<Unit>>()
+
+  /**
+   * The current latch count.
+   */
+  val count: Int
+    get() = atomicCount.get()
+
+  /**
+   * Indicates if the latch is open (`count <= 0`).
+   */
+  val isOpen: Boolean
+    get() = atomicCount.get() <= 0
+
+  /**
+   * Decrease the latch count, potentially opening the latch and awakening suspending co-routines.
+   *
+   * @return `true` if the latch was opened as a result of this invocation.
+   */
+  fun countDown(): Boolean {
+    var toAwaken: List<Continuation<Unit>>? = null
+    synchronized(this) {
+      if (atomicCount.decrementAndGet() == 0) {
+        toAwaken = waitingCoroutines
+        waitingCoroutines = mutableListOf()
+      }
+    }
+    toAwaken?.forEach { it.resume(Unit) }
+    return toAwaken != null
+  }
+
+  /**
+   * Increase the latch count, potentially closing the latch.
+   *
+   * @return `true` if the latch was closed as a result of this invocation.
+   */
+  fun countUp(): Boolean = atomicCount.incrementAndGet() == 1
+
+  /**
+   * Await the latch opening. If already open, return without suspending.
+   */
+  suspend fun await() {
+    if (atomicCount.get() <= 0) {
+      return
+    }
+    suspendCancellableCoroutine { cont: Continuation<Unit> ->
+      try {
+        var suspended: Boolean
+        synchronized(this) {
+          suspended = atomicCount.get() > 0
+          if (suspended) {
+            waitingCoroutines.add(cont)
+          }
+        }
+        if (!suspended) {
+          cont.resume(Unit)
+        }
+      } catch (e: Throwable) {
+        cont.resumeWithException(e)
+      }
+    }
+  }
+}
diff --git a/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
new file mode 100644
index 0000000..498e85b
--- /dev/null
+++ b/concurrent-coroutines/src/main/kotlin/net/consensys/cava/concurrent/coroutines/Retryable.kt
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.concurrent.coroutines
+
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.CompletableDeferred
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.async
+import kotlinx.coroutines.withTimeoutOrNull
+
+/**
+ * Retry a suspending block until a non-null result is obtained.
+ *
+ * @param retryDelay the delay between each attempt
+ * @param block the suspending block to be executed
+ * @return the first non-null result
+ */
+suspend fun <R> CoroutineScope.retry(
+  retryDelay: Long,
+  block: suspend (Int) -> R?
+): R = retry({ retryDelay }, block)!!
+
+/**
+ * Retry a suspending block until a non-null result is obtained.
+ *
+ * @param retryDelay the delay between each attempt
+ * @param maxRetries the maximum number of attempts
+ * @param block the suspending block to be executed
+ * @return the first non-null result, or `null` if all attempts fail
+ */
+suspend fun <R> CoroutineScope.retry(
+  retryDelay: Long,
+  maxRetries: Int,
+  block: suspend (Int) -> R?
+): R? = retry({ i -> if (i > maxRetries) null else retryDelay }, block)
+
+/**
+ * Retry a suspending block until a non-null result is obtained.
+ *
+ * @param retryDelay a function returning the delay that should follow each attempt, or `null` if no further attempts
+ *         should be made
+ * @param block the suspending block to be executed
+ * @return the first non-null result, or `null` if all attempts fail
+ */
+@UseExperimental(ExperimentalCoroutinesApi::class)
+suspend fun <R> CoroutineScope.retry(
+  retryDelay: (Int) -> Long?,
+  block: suspend (Int) -> R?
+): R? {
+  val jobs = mutableSetOf<Job>()
+  val result = CompletableDeferred<R?>()
+  result.invokeOnCompletion { jobs.forEach { job -> job.cancel() } }
+
+  var stopped = false
+  var i = 1
+  while (true) {
+    val attempt = i
+    val delayTime = retryDelay(attempt) ?: break
+    val deferred = async { block(attempt) }
+    deferred.invokeOnCompletion { e ->
+      try {
+        jobs.remove(deferred)
+        if (e is CancellationException) {
+          // ignore
+          return@invokeOnCompletion
+        }
+        if (e != null) {
+          result.completeExceptionally(e)
+        } else {
+          deferred.getCompleted()?.let { r -> result.complete(r) }
+          if (stopped && jobs.isEmpty()) {
+            result.complete(null)
+          }
+        }
+      } catch (e: Throwable) {
+        result.completeExceptionally(e)
+      }
+    }
+    jobs.add(deferred)
+
+    val r = withTimeoutOrNull(delayTime) { result.await() }
+    if (r != null) {
+      return r
+    }
+    ++i
+  }
+  stopped = true
+  if (jobs.isEmpty()) {
+    return null
+  }
+  return result.await()
+}
+
+/**
+ * Cancel and retry a suspending block until a non-null result is obtained.
+ *
+ * @param timeout the delay before re-attempting
+ * @param block the suspending block to be executed
+ * @return the first non-null result
+ */
+suspend fun <R> timeoutAndRetry(
+  timeout: Long,
+  block: suspend (Int) -> R?
+): R = timeoutAndRetry({ timeout }, block)!!
+
+/**
+ * Cancel and retry a suspending block until a non-null result is obtained.
+ *
+ * @param timeout the delay before re-attempting
+ * @param maxRetries the maximum number of attempts
+ * @param block the suspending block to be executed
+ * @return the first non-null result, or `null` if all attempts fail
+ */
+suspend fun <R> timeoutAndRetry(
+  timeout: Long,
+  maxRetries: Int,
+  block: suspend (Int) -> R?
+): R? = timeoutAndRetry({ i -> if (i >= maxRetries) null else timeout }, block)
+
+/**
+ * Cancel and retry a suspending block until a non-null result is obtained.
+ *
+ * @param timeout a function returning the delay that should follow each attempt, or `null` if no further attempts
+ *         should be made
+ * @param block the suspending block to be executed
+ * @return the first non-null result, or `null` if all attempts fail
+ */
+suspend fun <R> timeoutAndRetry(
+  timeout: (Int) -> Long?,
+  block: suspend (Int) -> R?
+): R? {
+  var i = 1
+  while (true) {
+    val attempt = i
+    val time = timeout(attempt) ?: return null
+    val r = withTimeoutOrNull(time) { block(attempt) }
+    if (r != null) {
+      return r
+    }
+    ++i
+  }
+}
diff --git a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
new file mode 100644
index 0000000..a61094c
--- /dev/null
+++ b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/CoroutineLatchTest.kt
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.concurrent.coroutines
+
+import kotlinx.coroutines.TimeoutCancellationException
+import kotlinx.coroutines.async
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.withTimeout
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Assertions.assertFalse
+import org.junit.jupiter.api.Assertions.assertTrue
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.assertThrows
+
+internal class CoroutineLatchTest {
+
+  @Test
+  fun shouldntSuspendWhenLatchIsOpen() = runBlocking {
+    withTimeout(1) {
+      CoroutineLatch(0).await()
+    }
+    withTimeout(1) {
+      CoroutineLatch(-1).await()
+    }
+  }
+
+  @Test
+  fun shouldUnsuspendWhenLatchOpens() = runBlocking {
+    val latch = CoroutineLatch(2)
+    assertFalse(latch.isOpen)
+    assertEquals(2, latch.count)
+
+    var ok = false
+    var done = false
+    val job = async {
+      latch.await()
+      assertTrue(ok, "failed to suspend")
+      done = true
+    }
+
+    Thread.sleep(100)
+    assertFalse(latch.countDown())
+    assertFalse(latch.isOpen)
+    assertEquals(1, latch.count)
+
+    Thread.sleep(100)
+    assertFalse(done, "woke up too early")
+
+    ok = true
+    assertTrue(latch.countDown())
+    assertTrue(latch.isOpen)
+    assertEquals(0, latch.count)
+    job.await()
+    assertTrue(done, "failed to wakeup")
+  }
+
+  @Test
+  fun shouldSuspendWhenLatchCloses() = runBlocking {
+    val latch = CoroutineLatch(-1)
+    assertTrue(latch.isOpen)
+    assertEquals(-1, latch.count)
+
+    withTimeout(1) {
+      latch.await()
+    }
+
+    assertFalse(latch.countUp())
+    assertTrue(latch.isOpen)
+    assertEquals(0, latch.count)
+
+    withTimeout(1) {
+      latch.await()
+    }
+
+    assertTrue(latch.countUp())
+    assertFalse(latch.isOpen)
+    assertEquals(1, latch.count)
+
+    var ok = false
+    var done = false
+    val job = async {
+      latch.await()
+      assertTrue(ok, "failed to suspend")
+      done = true
+    }
+
+    ok = true
+    assertTrue(latch.countDown())
+    assertTrue(latch.isOpen)
+    job.await()
+    assertTrue(done, "failed to wakeup")
+  }
+
+  @Test
+  fun shouldTimeoutWhenBlocked() {
+    assertThrows<TimeoutCancellationException> {
+      runBlocking {
+        withTimeout(1) {
+          CoroutineLatch(1).await()
+        }
+      }
+    }
+  }
+}
diff --git a/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
new file mode 100644
index 0000000..f29cb96
--- /dev/null
+++ b/concurrent-coroutines/src/test/kotlin/net/consensys/cava/concurrent/coroutines/RetryableTest.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2019 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.concurrent.coroutines
+
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.runBlocking
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Assertions.assertNull
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.assertThrows
+import java.lang.RuntimeException
+
+private val NOOP_EXCEPTION_HANDLER = CoroutineExceptionHandler { _, _ -> }
+
+internal class RetryableTest {
+
+  @Test
+  fun shouldNotRetryIfFirstAttemptReturns() = runBlocking {
+    var attempts = 0
+    val result = retry(500) {
+      attempts++
+      "done"
+    }
+    assertEquals("done", result)
+    assertEquals(1, attempts)
+  }
+
+  @Test
+  fun shouldRetryUntilSuccess() = runBlocking {
+    var attempts = 0
+    val result = retry(100) { i ->
+      attempts++
+      delay(470)
+      "done $i"
+    }
+    assertEquals("done 1", result)
+    assertEquals(5, attempts)
+  }
+
+  @Test
+  fun shouldReturnAnySuccess() = runBlocking {
+    var attempts = 0
+    val result = retry(25) { i ->
+      attempts++
+      delay(if (i == 4) 60 else 1000)
+      "done $i"
+    }
+    assertEquals("done 4", result)
+    assertEquals(6, attempts)
+  }
+
+  @Test
+  fun shouldStopRetryingAfterMaxAttempts() = runBlocking {
+    var attempts = 0
+    val result = retry(50, 3) { i ->
+      attempts++
+      delay(250)
+      "done $i"
+    }
+    assertEquals("done 1", result)
+    assertEquals(3, attempts)
+  }
+
+  @Test
+  fun shouldReturnNullIfAllAttemptsFail() = runBlocking {
+    var attempts = 0
+    val result = retry(50, 3) {
+      attempts++
+      delay(250)
+      null
+    }
+    assertNull(result)
+    assertEquals(3, attempts)
+  }
+
+  @Test
+  fun shouldThrowIfAttemptThrows() {
+    var attempts = 0
+    val e = assertThrows<RuntimeException> {
+      runBlocking(NOOP_EXCEPTION_HANDLER) {
+        retry(25) { i ->
+          attempts++
+          if (i == 4) {
+            throw RuntimeException("catch me")
+          }
+          delay(1000)
+          "done $i"
+        }
+      }
+    }
+    assertEquals("catch me", e.message)
+    assertEquals(4, attempts)
+  }
+}
diff --git a/concurrent/build.gradle b/concurrent/build.gradle
new file mode 100644
index 0000000..51c7776
--- /dev/null
+++ b/concurrent/build.gradle
@@ -0,0 +1,12 @@
+description = 'Classes and utilities for working with concurrency.'
+
+dependencies {
+  compile 'com.google.guava:guava'
+  compileOnly 'io.vertx:vertx-core'
+
+  testCompile 'org.junit.jupiter:junit-jupiter-api'
+  testCompile 'org.junit.jupiter:junit-jupiter-params'
+  testCompile 'org.assertj:assertj-core'
+
+  testRuntime 'org.junit.jupiter:junit-jupiter-engine'
+}
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
new file mode 100644
index 0000000..cf97b6c
--- /dev/null
+++ b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncCompletion.java
@@ -0,0 +1,478 @@
+/*
+ * Copyright 2018 ConsenSys AG.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package net.consensys.cava.concurrent;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+import io.vertx.core.Vertx;
+import io.vertx.core.WorkerExecutor;
+
+/**
+ * A completion that will be complete at a future time.
+ */
+public interface AsyncCompletion {
+
+  AsyncCompletion COMPLETED = new DefaultCompletableAsyncCompletion(CompletableFuture.completedFuture(null));
+
+  /**
+   * Return an already completed completion.
+   *
+   * @return A completed completion.
+   */
+  static AsyncCompletion completed() {
+    return COMPLETED;
+  }
+
+  /**
+   * Return an already failed completion, caused by the given exception.
+   *
+   * @param ex The exception.
+   * @return A failed result.
+   */
+  static AsyncCompletion exceptional(Throwable ex) {
+    requireNonNull(ex);
+    CompletableAsyncCompletion completion = new DefaultCompletableAsyncCompletion();
+    completion.completeExceptionally(ex);
+    return completion;
+  }
+
+  /**
+   * Return an incomplete completion, that can be later completed or failed.
+   *
+   * @return An incomplete completion.
+   */
+  static CompletableAsyncCompletion incomplete() {
+    return new DefaultCompletableAsyncCompletion();
+  }
+
+  /**
+   * Returns an {@link AsyncCompletion} that completes when all of the given completions complete. If any completions
+   * complete exceptionally, then the resulting completion also completes exceptionally.
+   *
+   * @param cs The completions to combine.
+   * @return A completion.
+   */
+  static AsyncCompletion allOf(AsyncCompletion... cs) {
+    return allOf(Arrays.stream(cs));
+  }
+
+  /**
+   * Returns an {@link AsyncCompletion} that completes when all of the given completions complete. If any completions
+   * complete exceptionally, then the resulting completion also completes exceptionally.
+   *
+   * @param cs The completions to combine.
+   * @return A completion.
+   */
+  static AsyncCompletion allOf(Collection<AsyncCompletion> cs) {
+    return allOf(cs.stream());
+  }
+
+  /**
+   * Returns an {@link AsyncCompletion} that completes when all of the given completions complete. If any completions
+   * complete exceptionally, then the resulting completion also completes exceptionally.
+   *
+   * @param cs The completions to combine.
+   * @return A completion.
+   */
+  static AsyncCompletion allOf(Stream<AsyncCompletion> cs) {
+    @SuppressWarnings("rawtypes")
+    java.util.concurrent.CompletableFuture[] completableFutures = cs.map(completion -> {
+      java.util.concurrent.CompletableFuture<Void> javaFuture = new java.util.concurrent.CompletableFuture<>();
+      completion.whenComplete(ex -> {
+        if (ex == null) {
+          javaFuture.complete(null);
+        } else {
+          javaFuture.completeExceptionally(ex);
+        }
+      });
+      return javaFuture;
+    }).toArray(java.util.concurrent.CompletableFuture[]::new);
+    return new DefaultCompletableAsyncCompletion(java.util.concurrent.CompletableFuture.allOf(completableFutures));
+  }
+
+  /**
+   * Returns a completion that, after the given function executes on a vertx context and returns a completion, completes
+   * when the completion from the function does.
+   *
+   * @param vertx The vertx context.
+   * @param fn The function returning a completion.
+   * @return A completion.
+   */
+  static AsyncCompletion runOnContext(Vertx vertx, Supplier<? extends AsyncCompletion> fn) {
+    requireNonNull(fn);
+    CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+    vertx.runOnContext(ev -> {
+      try {
+        fn.get().whenComplete(ex2 -> {
+          if (ex2 == null) {
+            try {
+              completion.complete();
+            } catch (Throwable ex3) {
+              completion.completeExceptionally(ex3);
+            }
+          } else {
+            completion.completeExceptionally(ex2);
+          }
+        });
+      } catch (Throwable ex1) {
+        completion.completeExceptionally(ex1);
+      }
+    });
+    return completion;
+  }
+
+  /**
+   * Returns a completion that completes after the given action executes on a vertx context.
+   *
+   * <p>
+   * Note that the given function is run directly on the context and should not block.
+   *
+   * @param vertx The vertx context.
+   * @param action The action to execute.
+   * @return A completion.
+   */
+  static AsyncCompletion runOnContext(Vertx vertx, Runnable action) {
+    requireNonNull(action);
+    CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+    vertx.runOnContext(ev -> {
+      try {
+        action.run();
+        completion.complete();
+      } catch (Throwable ex) {
+        completion.completeExceptionally(ex);
+      }
+    });
+    return completion;
+  }
+
+  /**
+   * Returns a completion that completes after the given blocking action executes asynchronously on
+   * {@link ForkJoinPool#commonPool()}.
+   *
+   * @param action The blocking action to execute.
+   * @return A completion.
+   */
+  static AsyncCompletion executeBlocking(Runnable action) {
+    requireNonNull(action);
+    CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+    ForkJoinPool.commonPool().execute(() -> {
+      try {
+        action.run();
+        completion.complete();
+      } catch (Throwable ex) {
+        completion.completeExceptionally(ex);
+      }
+    });
+    return completion;
+  }
+
+  /**
+   * Returns a completion that completes after the given blocking action executes asynchronously on an {@link Executor}.
+   *
+   * @param executor The executor.
+   * @param action The blocking action to execute.
+   * @return A completion.
+   */
+  static AsyncCompletion executeBlocking(Executor executor, Runnable action) {
+    requireNonNull(action);
+    CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+    executor.execute(() -> {
+      try {
+        action.run();
+        completion.complete();
+      } catch (Throwable ex) {
+        completion.completeExceptionally(ex);
+      }
+    });
+    return completion;
+  }
+
+  /**
+   * Returns a completion that completes after the given blocking action executes asynchronously on a vertx context.
+   *
+   * @param vertx The vertx context.
+   * @param action The blocking action to execute.
+   * @return A completion.
+   */
+  static AsyncCompletion executeBlocking(Vertx vertx, Runnable action) {
+    requireNonNull(action);
+    CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+    vertx.executeBlocking(future -> {
+      action.run();
+      future.complete();
+    }, false, res -> {
+      if (res.succeeded()) {
+        completion.complete();
+      } else {
+        completion.completeExceptionally(res.cause());
+      }
+    });
+    return completion;
+  }
+
+  /**
+   * Returns a completion that completes after the given blocking action executes asynchronously on a vertx executor.
+   *
+   * @param executor A vertx executor.
+   * @param action The blocking action to execute.
+   * @return A completion.
+   */
+  static AsyncCompletion executeBlocking(WorkerExecutor executor, Runnable action) {
+    requireNonNull(action);
+    CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+    executor.executeBlocking(future -> {
+      action.run();
+      future.complete();
+    }, false, res -> {
+      if (res.succeeded()) {
+        completion.complete();
+      } else {
+        completion.completeExceptionally(res.cause());
+      }
+    });
+    return completion;
+  }
+
+  /**
+   * Returns {@code true} if completed normally, completed exceptionally or cancelled.
+   *
+   * @return {@code true} if completed.
+   */
+  boolean isDone();
+
+  /**
+   * Returns {@code true} if completed exceptionally or cancelled.
+   *
+   * @return {@code true} if completed exceptionally or cancelled.
+   */
+  boolean isCompletedExceptionally();
+
+  /**
+   * Attempt to cancel execution of this task.
+   *
+   * <p>
+   * This attempt will fail if the task has already completed, has already been cancelled, or could not be cancelled for
+   * some other reason. If successful, and this task has not started when {@code cancel} is called, this task should
+   * never run.
+   *
+   * <p>
+   * After this method returns, subsequent calls to {@link #isDone()} will always return {@code true}. Subsequent calls
+   * to {@link #isCancelled()} will always return {@code true} if this method returned {@code true}.
+   *
+   * @return {@code true} if this completion transitioned to a cancelled state.
+   */
+  boolean cancel();
+
+  /**
+   * Returns {@code true} if this task was cancelled before it completed normally.
+   *
+   * @return {@code true} if completed.
+   */
+  boolean isCancelled();
+
+  /**
+   * Waits if necessary for the computation to complete.
+   *
+   * @throws CompletionException If the computation threw an exception.
+   * @throws InterruptedException If the current thread was interrupted while waiting.
+   */
+  void join() throws CompletionException, InterruptedException;
+
+  /**
+   * Waits if necessary for at most the given time for the computation to complete.
+   *
+   * @param timeout The maximum time to wait.
+   * @param unit The time unit of the timeout argument.
+   * @throws CompletionException If the computation threw an exception.
+   * @throws TimeoutException If the wait timed out.
+   * @throws InterruptedException If the current thread was interrupted while waiting.
+   */
+  void join(long timeout, TimeUnit unit) throws CompletionException, TimeoutException, InterruptedException;
+
+  /**
+   * Returns a new completion that, when this completion completes normally, completes with the same value or exception
+   * as the result returned after executing the given function.
+   *
+   * @param fn The function returning a new result.
+   * @param <U> The type of the returned result's value.
+   * @return A new result.
+   */
+  <U> AsyncResult<U> then(Supplier<? extends AsyncResult<U>> fn);
+
+  /**
+   * Returns a new result that, when this completion completes normally, completes with the same value or exception as
+   * the completion returned after executing the given function on the vertx context.
+   *
+   * @param vertx The vertx context.
+   * @param fn The function returning a new result.
+   * @param <U> The type of the returned result's value.
+   * @return A new result.
+   */
+  <U> AsyncResult<U> thenSchedule(Vertx vertx, Supplier<? extends AsyncResult<U>> fn);
+
+  /**
+   * Returns a new completion that, when this completion completes normally, completes after given action is executed.
+   *
+   * @param runnable Te action to perform before completing the returned {@link AsyncCompletion}.
+   * @return A completion.
+   */
+  AsyncCompletion thenRun(Runnable runnable);
+
+  /**
+   * Returns a new completion that, when this completion completes normally, completes after the given action is
+   * executed on the vertx context.
+   *
+   * @param vertx The vertx context.
+   * @param runnable The action to execute on the vertx context before completing the returned completion.
+   * @return A completion.
+   */
+  AsyncCompletion thenScheduleRun(Vertx vertx, Runnable runnable);
+
+  /**
+   * Returns a new completion that, when this completion completes normally, completes after the given blocking action
+   * is executed on the vertx context.
+   *
+   * @param vertx The vertx context.
+   * @param runnable The action to execute on the vertx context before completing the returned completion.
+   * @return A completion.
+   */
+  AsyncCompletion thenScheduleBlockingRun(Vertx vertx, Runnable runnable);
+
+  /**
+   * Returns a new completion that, when this completion completes normally, completes after the given blocking action
+   * is executed on the vertx executor.
+   *
+   * @param executor The vertx executor.
+   * @param runnable The action to execute on the vertx context before completing the returned completion.
+   * @return A completion.
+   */
+  AsyncCompletion thenScheduleBlockingRun(WorkerExecutor executor, Runnable runnable);
+
+  /**
+   * When this result completes normally, invokes the given function with the resulting value and obtain a new
+   * {@link AsyncCompletion}.
+   *
+   * @param fn The function returning a new completion.
+   * @return A completion.
+   */
+  AsyncCompletion thenCompose(Supplier<? extends AsyncCompletion> fn);
+
+  /**
+   * Returns a completion that, when this result completes normally, completes with the value obtained after executing
+   * the supplied function.
+   *
+   * @param supplier The function to use to compute the value of the returned result.
+   * @param <U> The function's return type.
+   * @return A new result.
+   */
+  <U> AsyncResult<U> thenSupply(Supplier<? extends U> supplier);
+
+  /**
+   * Returns a completion that, when this result completes normally, completes with the value obtained after executing
+   * the supplied function on the vertx context.
+   *
+   * @param vertx The vertx context.
+   * @param supplier The function to use to compute the value of the returned result.
+   * @param <U> The function's return type.
+   * @return A new result.
+   */
+  <U> AsyncResult<U> thenSupply(Vertx vertx, Supplier<? extends U> supplier);
+
+  /**
+   * Returns a completion that, when this completion and the supplied result both complete normally, completes after
+   * executing the supplied function with the value from the supplied result as an argument.
+   *
+   * @param other The other result.
+   * @param consumer The function to execute.
+   * @param <U> The type of the other's value.
+   * @return A new result.
+   */
+  <U> AsyncCompletion thenConsume(AsyncResult<? extends U> other, Consumer<? super U> consumer);
+
+  /**
+   * Returns a result that, when this completion and the other result both complete normally, completes with the value
+   * obtained from executing the supplied function with the value from the other result as an argument.
+   *
+   * @param other The other result.
+   * @param fn The function to execute.
+   * @param <U> The type of the other's value.
+   * @param <V> The type of the value returned by the function.
+   * @return A new result.
+   */
+  <U, V> AsyncResult<V> thenApply(AsyncResult<? extends U> other, Function<? super U, ? extends V> fn);
+
+  /**
+   * Returns a completion that completes when both this completion and the other complete normally.
+   *
+   * @param other The other completion.
+   * @return A completion.
+   */
+  AsyncCompletion thenCombine(AsyncCompletion other);
+
+  /**
+   * Returns a new completion that, when this result completes exceptionally, completes after executing the supplied
+   * function. Otherwise, if this result completes normally, then the returned result also completes normally with the
+   * same value.
+   *
+   * @param consumer The function to execute.
+   * @return A new result.
+   */
+  AsyncCompletion exceptionally(Consumer<? super Throwable> consumer);
+
+  /**
+   * Returns a new completion that completes in the same manner as this completion, after executing the given function
+   * with this completion's exception (if any).
+   * <p>
+   * The exception supplied to the function will be {@code null} if this completion completes successfully.
+   *
+   * @param consumer The action to execute.
+   * @return A new result.
+   */
+  AsyncCompletion whenComplete(Consumer<? super Throwable> consumer);
+
+  /**
+   * Returns a new result that, when this result completes either normally or exceptionally, completes with the value
+   * obtained from executing the supplied function with this result's exception (if any) as an argument.
+   * <p>
+   * The exception supplied to the function will be {@code null} if this completion completes successfully.
+   *
+   * @param fn The function to execute.
+   * @param <U> The type of the value returned from the function.
+   * @return A new result.
+   */
+  <U> AsyncResult<U> handle(Function<? super Throwable, ? extends U> fn);
+
+  /**
+   * Returns a new completion that completes successfully, after executing the given function with this completion's
+   * exception (if any).
+   * <p>
+   * The exception supplied to the function will be {@code null} if this completion completes successfully.
+   *
+   * @param consumer The action to execute.
+   * @return A new result.
+   */
+  AsyncCompletion accept(Consumer<? super Throwable> consumer);
+}
diff --git a/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java b/concurrent/src/main/java/net/consensys/cava/concurrent/AsyncResult.java
new file mode 100644
index 0000000..b039e77
... 86281 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 27/32: Read credentials from jenkins user configuration

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 607615f288c6ef574dd1d82b33ecac5bfda15324
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Mon Apr 22 04:25:31 2019 -0700

    Read credentials from jenkins user configuration
---
 build.gradle | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/build.gradle b/build.gradle
index be5973e..5c19f32 100644
--- a/build.gradle
+++ b/build.gradle
@@ -290,7 +290,7 @@ allprojects {
 
           def credentialsFound = false;
           if (settingsXml.exists()) {
-            project.logger.info('Using .m2/settings.xml')
+            project.logger.info('Reading .m2/settings.xml')
             def serverId = (project.properties['distMgmtServerId'] ?: isRelease
               ? 'apache.releases.https' : 'apache.snapshots.https')
             def m2SettingCreds = new XmlSlurper().parse(settingsXml).servers.server.find { server -> serverId.equals(server.id.text()) }
@@ -306,9 +306,12 @@ allprojects {
 
           if (!credentialsFound) {
             project.logger.info('Reading credentials from environment')
-            credentials {
-              username System.getenv('NEXUS_USER')
-              password System.getenv('NEXUS_PASSWORD')
+            credentialsFound = System.getenv('NEXUS_USER') != null
+            if (credentialsFound) {
+              credentials {
+                username asfNexusUsername ?: System.getenv('NEXUS_USER')
+                password asfNexusPassword ?: System.getenv('NEXUS_PASSWORD')
+              }
             }
           }
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 12/32: Add assumptions that sodium is present, so the build will pass on a blank jenkins box

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 756334de71d5d837f1885da120a033ac9520c906
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Wed Apr 3 16:34:46 2019 -0700

    Add assumptions that sodium is present, so the build will pass on a blank jenkins box
---
 .../tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java | 9 +++++++++
 .../apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java  | 8 ++++++++
 2 files changed, 17 insertions(+)

diff --git a/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java b/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
index 754477e..526dba3 100644
--- a/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
+++ b/scuttlebutt-handshake/src/test/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
@@ -16,10 +16,12 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import org.apache.tuweni.bytes.Bytes;
 import org.apache.tuweni.bytes.Bytes32;
 import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.crypto.sodium.Sodium;
 import org.apache.tuweni.junit.VertxExtension;
 import org.apache.tuweni.junit.VertxInstance;
 import org.apache.tuweni.scuttlebutt.rpc.RPCCodec;
@@ -33,6 +35,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Consumer;
 
 import io.vertx.core.Vertx;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.logl.Level;
@@ -40,9 +43,15 @@ import org.logl.LoggerProvider;
 import org.logl.logl.SimpleLogger;
 import org.logl.vertx.LoglLogDelegateFactory;
 
+
 @ExtendWith(VertxExtension.class)
 class VertxIntegrationTest {
 
+  @BeforeAll
+  static void checkAvailable() {
+    assumeTrue(Sodium.isAvailable(), "Sodium native library is not available");
+  }
+
   private static class MyClientHandler implements ClientHandler {
 
 
diff --git a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
index 8495d2c..63b64a8 100644
--- a/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
+++ b/scuttlebutt-rpc/src/test/java/org/apache/tuweni/scuttlebutt/rpc/PatchworkIntegrationTest.java
@@ -16,11 +16,13 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import org.apache.tuweni.bytes.Bytes;
 import org.apache.tuweni.bytes.Bytes32;
 import org.apache.tuweni.concurrent.AsyncResult;
 import org.apache.tuweni.crypto.sodium.Signature;
+import org.apache.tuweni.crypto.sodium.Sodium;
 import org.apache.tuweni.io.Base64;
 import org.apache.tuweni.junit.VertxExtension;
 import org.apache.tuweni.junit.VertxInstance;
@@ -41,6 +43,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Optional;
 import io.vertx.core.Vertx;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -57,6 +60,11 @@ import org.logl.vertx.LoglLogDelegateFactory;
 @ExtendWith(VertxExtension.class)
 class PatchworkIntegrationTest {
 
+  @BeforeAll
+  static void checkAvailable() {
+    assumeTrue(Sodium.isAvailable(), "Sodium native library is not available");
+  }
+
   public static class MyClientHandler implements ClientHandler {
 
     private final Consumer<Bytes> sender;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 21/32: Update README.md

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit f42186e72506e8d8a677c7b7df9d97fdf31850bf
Author: Jonny Rhea <jo...@gmail.com>
AuthorDate: Tue Apr 16 16:41:43 2019 -0500

    Update README.md
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3251d49..74c8c56 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Tuweni: ConsenSys Core Libraries for Java (& Kotlin)
+# Tuweni: Apache Core Libraries for Java (& Kotlin)
 
 [![Build Status](https://circleci.com/gh/ConsenSys/cava.svg?style=shield&circle-token=440c81af8cae3c059b516a8e375471258d7e0229)](https://circleci.com/gh/ConsenSys/cava)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/ConsenSys/cava/blob/master/LICENSE)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 26/32: Add logging to credentials logic

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit f933af09a3090d91949e3e4b004863e4383da05c
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Sun Apr 21 23:40:11 2019 -0700

    Add logging to credentials logic
---
 build.gradle | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/build.gradle b/build.gradle
index dfe1ba8..be5973e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -287,17 +287,25 @@ allprojects {
           url = isRelease ? snapshotsRepoUrl : releasesRepoUrl
 
           def settingsXml = new File(System.getProperty('user.home'), '.m2/settings.xml')
+
+          def credentialsFound = false;
           if (settingsXml.exists()) {
+            project.logger.info('Using .m2/settings.xml')
             def serverId = (project.properties['distMgmtServerId'] ?: isRelease
               ? 'apache.releases.https' : 'apache.snapshots.https')
             def m2SettingCreds = new XmlSlurper().parse(settingsXml).servers.server.find { server -> serverId.equals(server.id.text()) }
             if (m2SettingCreds) {
+              project.logger.info('Found matching credentials from .m2/settings.xml')
               credentials {
                 username m2SettingCreds.username.text()
                 password m2SettingCreds.password.text()
               }
+              credentialsFound = true
             }
-          } else {
+          }
+
+          if (!credentialsFound) {
+            project.logger.info('Reading credentials from environment')
             credentials {
               username System.getenv('NEXUS_USER')
               password System.getenv('NEXUS_PASSWORD')


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 25/32: Read the maven credentials from the local settings file if present

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 31653a3d176921985e904e2189cc460bb2f63a8c
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Sun Apr 21 23:02:15 2019 -0700

    Read the maven credentials from the local settings file if present
---
 build.gradle | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/build.gradle b/build.gradle
index af2caa8..dfe1ba8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -281,13 +281,28 @@ allprojects {
     publishing {
       repositories {
         maven {
-          credentials {
-            username System.getenv('NEXUS_USER')
-            password System.getenv('NEXUS_PASSWORD')
-          }
+          def isRelease = buildVersion.endsWith('SNAPSHOT')
           def releasesRepoUrl = "https://repository.apache.org/service/local/staging/deploy/maven2"
           def snapshotsRepoUrl = "https://repository.apache.org/content/repositories/snapshots"
-          url = buildVersion.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
+          url = isRelease ? snapshotsRepoUrl : releasesRepoUrl
+
+          def settingsXml = new File(System.getProperty('user.home'), '.m2/settings.xml')
+          if (settingsXml.exists()) {
+            def serverId = (project.properties['distMgmtServerId'] ?: isRelease
+              ? 'apache.releases.https' : 'apache.snapshots.https')
+            def m2SettingCreds = new XmlSlurper().parse(settingsXml).servers.server.find { server -> serverId.equals(server.id.text()) }
+            if (m2SettingCreds) {
+              credentials {
+                username m2SettingCreds.username.text()
+                password m2SettingCreds.password.text()
+              }
+            }
+          } else {
+            credentials {
+              username System.getenv('NEXUS_USER')
+              password System.getenv('NEXUS_PASSWORD')
+            }
+          }
         }
       }
       publications {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 10/32: Ensure build passes on local machine

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit dc0cb7af7cc6bfdb4417e323d1f3c53b4e60a4ba
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Wed Apr 3 16:05:53 2019 -0700

    Ensure build passes on local machine
---
 .../tuweni/eth/reference/BlockRLPTestSuite.java       |   6 +++++-
 gradle/check-licenses.gradle                          |   2 +-
 .../test/java/org/apache/tuweni/io/ResourcesTest.java |   2 +-
 io/src/test/resources/resourceresolver-test.jar       | Bin 2446 -> 2362 bytes
 4 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/BlockRLPTestSuite.java b/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/BlockRLPTestSuite.java
index 86798f8..5dad3d0 100644
--- a/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/BlockRLPTestSuite.java
+++ b/eth-reference-tests/src/test/java/org/apache/tuweni/eth/reference/BlockRLPTestSuite.java
@@ -36,6 +36,7 @@ import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
@@ -69,12 +70,15 @@ class BlockRLPTestSuite {
       } catch (IOException e) {
         throw new UncheckedIOException(e);
       }
-    });
+    }).filter(Objects::nonNull);
   }
 
   @SuppressWarnings({"unchecked", "rawtypes"})
   private static Stream<Arguments> readTestCase(InputStream is) throws IOException {
     Map<String, Map> test = mapper.readerFor(Map.class).readValue(is);
+    if (test.isEmpty()) {
+      return null;
+    }
     String name = test.keySet().iterator().next();
     Map testData = test.get(name);
     List<Map> blocks = (List<Map>) testData.get("blocks");
diff --git a/gradle/check-licenses.gradle b/gradle/check-licenses.gradle
index 5540a5d..78e02e1 100644
--- a/gradle/check-licenses.gradle
+++ b/gradle/check-licenses.gradle
@@ -118,7 +118,7 @@ downloadLicenses {
   ]
 
   licenses = [
-    (group('cava')): apache2,
+    (group('tuweni')): apache2,
     (group('org.jboss.spec.javax.transaction')): cddl1,
     (group('org.rocksdb')): apache2,
     // https://checkerframework.org/manual/#license
diff --git a/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
index 20b58ee..b0075d1 100644
--- a/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
+++ b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
@@ -43,7 +43,7 @@ class ResourcesTest {
     List<URL> all = Resources.find("org/apache/tuweni/io/file/resourceresolver/**").collect(Collectors.toList());
     assertEquals(12, all.size(), () -> describeExpectation(12, all));
 
-    List<URL> txtFiles = Resources.find("net/**/test*.txt").collect(Collectors.toList());
+    List<URL> txtFiles = Resources.find("org/**/test*.txt").collect(Collectors.toList());
     assertEquals(6, txtFiles.size(), () -> describeExpectation(6, txtFiles));
 
     List<URL> txtFilesFromRoot = Resources.find("/**/test?.txt").collect(Collectors.toList());
diff --git a/io/src/test/resources/resourceresolver-test.jar b/io/src/test/resources/resourceresolver-test.jar
index 5eb17e2..b2226da 100644
Binary files a/io/src/test/resources/resourceresolver-test.jar and b/io/src/test/resources/resourceresolver-test.jar differ


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 09/32: Merge pull request #1 from atoulme/renaming_from_cava

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit d05d58fbbc194730877575b09e0d64d0b849b82a
Merge: e20ff92 0e01b32
Author: Jim Jagielski <ji...@gmail.com>
AuthorDate: Wed Apr 3 09:59:56 2019 -0400

    Merge pull request #1 from atoulme/renaming_from_cava
    
    Renaming from cava

 PACKAGES.md                                        |   38 +-
 .../net/consensys/cava/bytes/AbstractBytes.java    |   67 -
 .../consensys/cava/bytes/ArrayWrappingBytes.java   |  194 --
 .../consensys/cava/bytes/ArrayWrappingBytes32.java |   56 -
 .../consensys/cava/bytes/ArrayWrappingBytes48.java |   56 -
 .../consensys/cava/bytes/BufferWrappingBytes.java  |  109 -
 .../consensys/cava/bytes/ByteBufWrappingBytes.java |  113 -
 .../cava/bytes/ByteBufferWrappingBytes.java        |  129 -
 .../main/java/net/consensys/cava/bytes/Bytes.java  | 1466 ----------
 .../java/net/consensys/cava/bytes/Bytes32.java     |  282 --
 .../java/net/consensys/cava/bytes/Bytes48.java     |  283 --
 .../java/net/consensys/cava/bytes/BytesValues.java |   89 -
 .../consensys/cava/bytes/ConcatenatedBytes.java    |  213 --
 .../consensys/cava/bytes/DelegatingBytes32.java    |  240 --
 .../consensys/cava/bytes/DelegatingBytes48.java    |  240 --
 .../cava/bytes/DelegatingMutableBytes32.java       |  280 --
 .../cava/bytes/DelegatingMutableBytes48.java       |  280 --
 .../cava/bytes/MutableArrayWrappingBytes.java      |   92 -
 .../cava/bytes/MutableArrayWrappingBytes32.java    |   34 -
 .../cava/bytes/MutableArrayWrappingBytes48.java    |   34 -
 .../cava/bytes/MutableBufferWrappingBytes.java     |   76 -
 .../cava/bytes/MutableByteBufWrappingBytes.java    |   81 -
 .../cava/bytes/MutableByteBufferWrappingBytes.java |   70 -
 .../net/consensys/cava/bytes/MutableBytes.java     |  363 ---
 .../net/consensys/cava/bytes/MutableBytes32.java   |  110 -
 .../net/consensys/cava/bytes/MutableBytes48.java   |  110 -
 .../net/consensys/cava/bytes/package-info.java     |   11 -
 .../org/apache/tuweni/bytes/AbstractBytes.java     |   67 +
 .../apache/tuweni/bytes/ArrayWrappingBytes.java    |  194 ++
 .../apache/tuweni/bytes/ArrayWrappingBytes32.java  |   56 +
 .../apache/tuweni/bytes/ArrayWrappingBytes48.java  |   56 +
 .../apache/tuweni/bytes/BufferWrappingBytes.java   |  109 +
 .../apache/tuweni/bytes/ByteBufWrappingBytes.java  |  113 +
 .../tuweni/bytes/ByteBufferWrappingBytes.java      |  129 +
 .../main/java/org/apache/tuweni/bytes/Bytes.java   | 1466 ++++++++++
 .../main/java/org/apache/tuweni/bytes/Bytes32.java |  282 ++
 .../main/java/org/apache/tuweni/bytes/Bytes48.java |  283 ++
 .../java/org/apache/tuweni/bytes/BytesValues.java  |   89 +
 .../org/apache/tuweni/bytes/ConcatenatedBytes.java |  213 ++
 .../org/apache/tuweni/bytes/DelegatingBytes32.java |  240 ++
 .../org/apache/tuweni/bytes/DelegatingBytes48.java |  240 ++
 .../tuweni/bytes/DelegatingMutableBytes32.java     |  280 ++
 .../tuweni/bytes/DelegatingMutableBytes48.java     |  280 ++
 .../tuweni/bytes/MutableArrayWrappingBytes.java    |   92 +
 .../tuweni/bytes/MutableArrayWrappingBytes32.java  |   34 +
 .../tuweni/bytes/MutableArrayWrappingBytes48.java  |   34 +
 .../tuweni/bytes/MutableBufferWrappingBytes.java   |   76 +
 .../tuweni/bytes/MutableByteBufWrappingBytes.java  |   81 +
 .../bytes/MutableByteBufferWrappingBytes.java      |   70 +
 .../java/org/apache/tuweni/bytes/MutableBytes.java |  363 +++
 .../org/apache/tuweni/bytes/MutableBytes32.java    |  110 +
 .../org/apache/tuweni/bytes/MutableBytes48.java    |  110 +
 .../java/org/apache/tuweni/bytes/package-info.java |   11 +
 .../net/consensys/cava/bytes/BufferBytesTest.java  |   38 -
 .../net/consensys/cava/bytes/ByteBufBytesTest.java |   38 -
 .../consensys/cava/bytes/ByteBufferBytesTest.java  |   38 -
 .../java/net/consensys/cava/bytes/Bytes32Test.java |   69 -
 .../java/net/consensys/cava/bytes/Bytes48Test.java |   69 -
 .../java/net/consensys/cava/bytes/BytesTest.java   |  465 ---
 .../net/consensys/cava/bytes/CommonBytesTests.java |  659 -----
 .../cava/bytes/ConcatenatedBytesTest.java          |   99 -
 .../org/apache/tuweni/bytes/BufferBytesTest.java   |   38 +
 .../org/apache/tuweni/bytes/ByteBufBytesTest.java  |   38 +
 .../apache/tuweni/bytes/ByteBufferBytesTest.java   |   38 +
 .../java/org/apache/tuweni/bytes/Bytes32Test.java  |   69 +
 .../java/org/apache/tuweni/bytes/Bytes48Test.java  |   69 +
 .../java/org/apache/tuweni/bytes/BytesTest.java    |  465 +++
 .../org/apache/tuweni/bytes/CommonBytesTests.java  |  659 +++++
 .../apache/tuweni/bytes/ConcatenatedBytesTest.java |   99 +
 concurrent-coroutines/build.gradle                 |    2 +-
 .../cava/concurrent/coroutines/AsyncCompletion.kt  |  194 --
 .../cava/concurrent/coroutines/AsyncResult.kt      |  179 --
 .../cava/concurrent/coroutines/CoroutineLatch.kt   |  101 -
 .../cava/concurrent/coroutines/Retryable.kt        |  154 -
 .../concurrent/coroutines/AsyncCompletion.kt       |  198 ++
 .../tuweni/concurrent/coroutines/AsyncResult.kt    |  183 ++
 .../tuweni/concurrent/coroutines/CoroutineLatch.kt |  105 +
 .../tuweni/concurrent/coroutines/Retryable.kt      |  158 +
 .../concurrent/coroutines/CoroutineLatchTest.kt    |  114 -
 .../cava/concurrent/coroutines/RetryableTest.kt    |  105 -
 .../concurrent/coroutines/CoroutineLatchTest.kt    |  118 +
 .../tuweni/concurrent/coroutines/RetryableTest.kt  |  109 +
 .../consensys/cava/concurrent/AsyncCompletion.java |  478 ---
 .../net/consensys/cava/concurrent/AsyncResult.java |  517 ----
 .../consensys/cava/concurrent/AtomicSlotMap.java   |  253 --
 .../concurrent/CompletableAsyncCompletion.java     |   36 -
 .../cava/concurrent/CompletableAsyncResult.java    |   40 -
 .../DefaultCompletableAsyncCompletion.java         |  374 ---
 .../concurrent/DefaultCompletableAsyncResult.java  |  409 ---
 .../net/consensys/cava/concurrent/ExpiringMap.java |  458 ---
 .../net/consensys/cava/concurrent/ExpiringSet.java |  277 --
 .../consensys/cava/concurrent/package-info.java    |   11 -
 .../apache/tuweni/concurrent/AsyncCompletion.java  |  478 +++
 .../org/apache/tuweni/concurrent/AsyncResult.java  |  517 ++++
 .../apache/tuweni/concurrent/AtomicSlotMap.java    |  253 ++
 .../concurrent/CompletableAsyncCompletion.java     |   36 +
 .../tuweni/concurrent/CompletableAsyncResult.java  |   40 +
 .../DefaultCompletableAsyncCompletion.java         |  374 +++
 .../concurrent/DefaultCompletableAsyncResult.java  |  409 +++
 .../org/apache/tuweni/concurrent/ExpiringMap.java  |  458 +++
 .../org/apache/tuweni/concurrent/ExpiringSet.java  |  277 ++
 .../org/apache/tuweni/concurrent/package-info.java |   11 +
 .../cava/concurrent/AtomicSlotMapTest.java         |  130 -
 .../DefaultCompletableAsyncCompletionTest.java     |  291 --
 .../DefaultCompletableAsyncResultTest.java         |  199 --
 .../consensys/cava/concurrent/ExpiringMapTest.java |  144 -
 .../consensys/cava/concurrent/ExpiringSetTest.java |  119 -
 .../tuweni/concurrent/AtomicSlotMapTest.java       |  130 +
 .../DefaultCompletableAsyncCompletionTest.java     |  291 ++
 .../DefaultCompletableAsyncResultTest.java         |  199 ++
 .../apache/tuweni/concurrent/ExpiringMapTest.java  |  144 +
 .../apache/tuweni/concurrent/ExpiringSetTest.java  |  119 +
 .../net/consensys/cava/config/Configuration.java   |  371 ---
 .../consensys/cava/config/ConfigurationError.java  |   83 -
 .../consensys/cava/config/ConfigurationErrors.java |   78 -
 .../cava/config/ConfigurationValidator.java        |   34 -
 .../consensys/cava/config/DocumentPosition.java    |   90 -
 .../consensys/cava/config/EmptyConfiguration.java  |  148 -
 .../InvalidConfigurationPropertyTypeException.java |   54 -
 .../config/NoConfigurationPropertyException.java   |   27 -
 .../consensys/cava/config/PropertyValidator.java   |  203 --
 .../consensys/cava/config/PropertyValidators.java  |   27 -
 .../java/net/consensys/cava/config/Schema.java     |  410 ---
 .../net/consensys/cava/config/SchemaBuilder.java   |  673 -----
 .../cava/config/TomlBackedConfiguration.java       |  302 --
 .../net/consensys/cava/config/TomlSerializer.java  |  182 --
 .../net/consensys/cava/config/package-info.java    |   10 -
 .../org/apache/tuweni/config/Configuration.java    |  371 +++
 .../apache/tuweni/config/ConfigurationError.java   |   83 +
 .../apache/tuweni/config/ConfigurationErrors.java  |   78 +
 .../tuweni/config/ConfigurationValidator.java      |   34 +
 .../org/apache/tuweni/config/DocumentPosition.java |   90 +
 .../apache/tuweni/config/EmptyConfiguration.java   |  148 +
 .../InvalidConfigurationPropertyTypeException.java |   54 +
 .../config/NoConfigurationPropertyException.java   |   27 +
 .../apache/tuweni/config/PropertyValidator.java    |  203 ++
 .../apache/tuweni/config/PropertyValidators.java   |   27 +
 .../main/java/org/apache/tuweni/config/Schema.java |  410 +++
 .../org/apache/tuweni/config/SchemaBuilder.java    |  673 +++++
 .../tuweni/config/TomlBackedConfiguration.java     |  302 ++
 .../org/apache/tuweni/config/TomlSerializer.java   |  182 ++
 .../org/apache/tuweni/config/package-info.java     |   10 +
 .../cava/config/PropertyValidatorTest.java         |   84 -
 .../consensys/cava/config/SchemaBuilderTest.java   |   78 -
 .../cava/config/TomlBackedConfigurationTest.java   |  567 ----
 .../tuweni/config/PropertyValidatorTest.java       |   84 +
 .../apache/tuweni/config/SchemaBuilderTest.java    |   78 +
 .../tuweni/config/TomlBackedConfigurationTest.java |  567 ++++
 .../main/java/net/consensys/cava/crypto/Hash.java  |  245 --
 .../InvalidSEC256K1SecretKeyStoreException.java    |   19 -
 .../java/net/consensys/cava/crypto/SECP256K1.java  |  945 ------
 .../consensys/cava/crypto/mikuli/AtePairing.java   |   33 -
 .../net/consensys/cava/crypto/mikuli/BLS12381.java |  136 -
 .../net/consensys/cava/crypto/mikuli/G1Point.java  |   99 -
 .../net/consensys/cava/crypto/mikuli/G2Point.java  |   97 -
 .../net/consensys/cava/crypto/mikuli/GTPoint.java  |   53 -
 .../net/consensys/cava/crypto/mikuli/Group.java    |   23 -
 .../net/consensys/cava/crypto/mikuli/KeyPair.java  |   58 -
 .../consensys/cava/crypto/mikuli/PublicKey.java    |  114 -
 .../net/consensys/cava/crypto/mikuli/Scalar.java   |   48 -
 .../consensys/cava/crypto/mikuli/SecretKey.java    |   78 -
 .../consensys/cava/crypto/mikuli/Signature.java    |  107 -
 .../cava/crypto/mikuli/SignatureAndPublicKey.java  |   71 -
 .../consensys/cava/crypto/mikuli/package-info.java |   11 -
 .../net/consensys/cava/crypto/package-info.java    |    8 -
 .../consensys/cava/crypto/sodium/AES256GCM.java    | 1034 -------
 .../consensys/cava/crypto/sodium/Allocated.java    |  134 -
 .../net/consensys/cava/crypto/sodium/Auth.java     |  243 --
 .../java/net/consensys/cava/crypto/sodium/Box.java | 1217 --------
 .../consensys/cava/crypto/sodium/Concatenate.java  |  148 -
 .../sodium/DefaultDetachedEncryptionResult.java    |   46 -
 .../crypto/sodium/DetachedEncryptionResult.java    |   41 -
 .../consensys/cava/crypto/sodium/DiffieHelman.java |  464 ---
 .../consensys/cava/crypto/sodium/GenericHash.java  |  215 --
 .../consensys/cava/crypto/sodium/HMACSHA256.java   |  199 --
 .../consensys/cava/crypto/sodium/HMACSHA512.java   |  199 --
 .../cava/crypto/sodium/HMACSHA512256.java          |  199 --
 .../cava/crypto/sodium/KeyDerivation.java          |  309 --
 .../consensys/cava/crypto/sodium/KeyExchange.java  |  705 -----
 .../consensys/cava/crypto/sodium/LibSodium.java    | 2618 -----------------
 .../consensys/cava/crypto/sodium/PasswordHash.java | 1022 -------
 .../consensys/cava/crypto/sodium/SHA256Hash.java   |  239 --
 .../consensys/cava/crypto/sodium/SecretBox.java    | 1787 ------------
 .../cava/crypto/sodium/SecretDecryptionStream.java |   44 -
 .../cava/crypto/sodium/SecretEncryptionStream.java |   91 -
 .../consensys/cava/crypto/sodium/Signature.java    |  671 -----
 .../net/consensys/cava/crypto/sodium/Sodium.java   | 3030 --------------------
 .../cava/crypto/sodium/SodiumException.java        |   26 -
 .../cava/crypto/sodium/SodiumVersion.java          |   59 -
 .../cava/crypto/sodium/XChaCha20Poly1305.java      |  908 ------
 .../main/java/org/apache/tuweni/crypto/Hash.java   |  245 ++
 .../InvalidSEC256K1SecretKeyStoreException.java    |   19 +
 .../java/org/apache/tuweni/crypto/SECP256K1.java   |  945 ++++++
 .../apache/tuweni/crypto/mikuli/AtePairing.java    |   33 +
 .../org/apache/tuweni/crypto/mikuli/BLS12381.java  |  135 +
 .../org/apache/tuweni/crypto/mikuli/G1Point.java   |   98 +
 .../org/apache/tuweni/crypto/mikuli/G2Point.java   |   96 +
 .../org/apache/tuweni/crypto/mikuli/GTPoint.java   |   53 +
 .../org/apache/tuweni/crypto/mikuli/Group.java     |   23 +
 .../org/apache/tuweni/crypto/mikuli/KeyPair.java   |   58 +
 .../org/apache/tuweni/crypto/mikuli/PublicKey.java |  114 +
 .../org/apache/tuweni/crypto/mikuli/Scalar.java    |   48 +
 .../org/apache/tuweni/crypto/mikuli/SecretKey.java |   77 +
 .../org/apache/tuweni/crypto/mikuli/Signature.java |  107 +
 .../crypto/mikuli/SignatureAndPublicKey.java       |   71 +
 .../apache/tuweni/crypto/mikuli/package-info.java  |   11 +
 .../org/apache/tuweni/crypto/package-info.java     |    8 +
 .../org/apache/tuweni/crypto/sodium/AES256GCM.java | 1034 +++++++
 .../org/apache/tuweni/crypto/sodium/Allocated.java |  134 +
 .../java/org/apache/tuweni/crypto/sodium/Auth.java |  243 ++
 .../java/org/apache/tuweni/crypto/sodium/Box.java  | 1217 ++++++++
 .../apache/tuweni/crypto/sodium/Concatenate.java   |  148 +
 .../sodium/DefaultDetachedEncryptionResult.java    |   46 +
 .../crypto/sodium/DetachedEncryptionResult.java    |   41 +
 .../apache/tuweni/crypto/sodium/DiffieHelman.java  |  464 +++
 .../apache/tuweni/crypto/sodium/GenericHash.java   |  215 ++
 .../apache/tuweni/crypto/sodium/HMACSHA256.java    |  199 ++
 .../apache/tuweni/crypto/sodium/HMACSHA512.java    |  199 ++
 .../apache/tuweni/crypto/sodium/HMACSHA512256.java |  199 ++
 .../apache/tuweni/crypto/sodium/KeyDerivation.java |  309 ++
 .../apache/tuweni/crypto/sodium/KeyExchange.java   |  705 +++++
 .../org/apache/tuweni/crypto/sodium/LibSodium.java | 2618 +++++++++++++++++
 .../apache/tuweni/crypto/sodium/PasswordHash.java  | 1022 +++++++
 .../apache/tuweni/crypto/sodium/SHA256Hash.java    |  239 ++
 .../org/apache/tuweni/crypto/sodium/SecretBox.java | 1787 ++++++++++++
 .../crypto/sodium/SecretDecryptionStream.java      |   44 +
 .../crypto/sodium/SecretEncryptionStream.java      |   91 +
 .../org/apache/tuweni/crypto/sodium/Signature.java |  671 +++++
 .../org/apache/tuweni/crypto/sodium/Sodium.java    | 3030 ++++++++++++++++++++
 .../tuweni/crypto/sodium/SodiumException.java      |   26 +
 .../apache/tuweni/crypto/sodium/SodiumVersion.java |   59 +
 .../tuweni/crypto/sodium/XChaCha20Poly1305.java    |  908 ++++++
 .../apache/tuweni}/crypto/sodium/package-info.java |    0
 .../java/net/consensys/cava/crypto/HashTest.java   |  118 -
 .../net/consensys/cava/crypto/SECP256K1Test.java   |  349 ---
 .../cava/crypto/mikuli/SignatureTest.java          |  121 -
 .../cava/crypto/sodium/AES256GCMTest.java          |  106 -
 .../cava/crypto/sodium/AllocatedTest.java          |   47 -
 .../net/consensys/cava/crypto/sodium/AuthTest.java |   42 -
 .../net/consensys/cava/crypto/sodium/BoxTest.java  |  194 --
 .../cava/crypto/sodium/ConcatenateTest.java        |   42 -
 .../cava/crypto/sodium/DiffieHelmanTest.java       |   38 -
 .../cava/crypto/sodium/GenericHashTest.java        |   37 -
 .../cava/crypto/sodium/HMACSHA256Test.java         |   54 -
 .../cava/crypto/sodium/HMACSHA512256Test.java      |   54 -
 .../cava/crypto/sodium/HMACSHA512Test.java         |   54 -
 .../cava/crypto/sodium/KeyDerivationTest.java      |   43 -
 .../cava/crypto/sodium/PasswordHashTest.java       |  118 -
 .../cava/crypto/sodium/SHA256HashTest.java         |   37 -
 .../cava/crypto/sodium/SecretBoxTest.java          |  200 --
 .../cava/crypto/sodium/SignatureTest.java          |   54 -
 .../consensys/cava/crypto/sodium/SodiumTest.java   |   89 -
 .../cava/crypto/sodium/XChaCha20Poly1305Test.java  |   94 -
 .../java/org/apache/tuweni/crypto/HashTest.java    |  118 +
 .../org/apache/tuweni/crypto/SECP256K1Test.java    |  349 +++
 .../apache/tuweni/crypto/mikuli/SignatureTest.java |  121 +
 .../apache/tuweni/crypto/sodium/AES256GCMTest.java |  106 +
 .../apache/tuweni/crypto/sodium/AllocatedTest.java |   47 +
 .../org/apache/tuweni/crypto/sodium/AuthTest.java  |   42 +
 .../org/apache/tuweni/crypto/sodium/BoxTest.java   |  194 ++
 .../tuweni/crypto/sodium/ConcatenateTest.java      |   42 +
 .../tuweni/crypto/sodium/DiffieHelmanTest.java     |   38 +
 .../tuweni/crypto/sodium/GenericHashTest.java      |   37 +
 .../tuweni/crypto/sodium/HMACSHA256Test.java       |   54 +
 .../tuweni/crypto/sodium/HMACSHA512256Test.java    |   54 +
 .../tuweni/crypto/sodium/HMACSHA512Test.java       |   54 +
 .../tuweni/crypto/sodium/KeyDerivationTest.java    |   43 +
 .../tuweni/crypto/sodium/PasswordHashTest.java     |  118 +
 .../tuweni/crypto/sodium/SHA256HashTest.java       |   37 +
 .../apache/tuweni/crypto/sodium/SecretBoxTest.java |  200 ++
 .../apache/tuweni/crypto/sodium/SignatureTest.java |   54 +
 .../apache/tuweni/crypto/sodium/SodiumTest.java    |   89 +
 .../crypto/sodium/XChaCha20Poly1305Test.java       |   94 +
 .../consensys/cava/devp2p/AtomicLongProperty.kt    |   34 -
 .../net/consensys/cava/devp2p/DiscoveryService.kt  |  867 ------
 .../kotlin/net/consensys/cava/devp2p/Endpoint.kt   |  123 -
 .../kotlin/net/consensys/cava/devp2p/EnodeUri.kt   |   62 -
 .../main/kotlin/net/consensys/cava/devp2p/Node.kt  |   41 -
 .../kotlin/net/consensys/cava/devp2p/Packet.kt     |  364 ---
 .../kotlin/net/consensys/cava/devp2p/PacketType.kt |   80 -
 .../main/kotlin/net/consensys/cava/devp2p/Peer.kt  |   88 -
 .../net/consensys/cava/devp2p/PeerRepository.kt    |  191 --
 .../net/consensys/cava/devp2p/PeerRoutingTable.kt  |   95 -
 .../org/apache/tuweni/devp2p/AtomicLongProperty.kt |   38 +
 .../org/apache/tuweni/devp2p/DiscoveryService.kt   |  871 ++++++
 .../kotlin/org/apache/tuweni/devp2p/Endpoint.kt    |  127 +
 .../kotlin/org/apache/tuweni/devp2p/EnodeUri.kt    |   66 +
 .../main/kotlin/org/apache/tuweni/devp2p/Node.kt   |   45 +
 .../main/kotlin/org/apache/tuweni/devp2p/Packet.kt |  368 +++
 .../kotlin/org/apache/tuweni/devp2p/PacketType.kt  |   84 +
 .../main/kotlin/org/apache/tuweni/devp2p/Peer.kt   |   92 +
 .../org/apache/tuweni/devp2p/PeerRepository.kt     |  195 ++
 .../org/apache/tuweni/devp2p/PeerRoutingTable.kt   |   99 +
 .../cava/devp2p/DiscoveryServiceJavaTest.java      |   71 -
 .../tuweni/devp2p/DiscoveryServiceJavaTest.java    |   71 +
 .../consensys/cava/devp2p/DiscoveryServiceTest.kt  |  282 --
 .../net/consensys/cava/devp2p/EndpointTest.kt      |   95 -
 .../cava/devp2p/EphemeralPeerRepositoryTest.kt     |  251 --
 .../consensys/cava/devp2p/FindNodePacketTest.kt    |   62 -
 .../consensys/cava/devp2p/NeighborsPacketTest.kt   |   81 -
 .../net/consensys/cava/devp2p/PingPacketTest.kt    |  102 -
 .../net/consensys/cava/devp2p/PongPacketTest.kt    |   65 -
 .../apache/tuweni/devp2p/DiscoveryServiceTest.kt   |  286 ++
 .../org/apache/tuweni/devp2p/EndpointTest.kt       |   99 +
 .../tuweni/devp2p/EphemeralPeerRepositoryTest.kt   |  255 ++
 .../org/apache/tuweni/devp2p/FindNodePacketTest.kt |   66 +
 .../apache/tuweni/devp2p/NeighborsPacketTest.kt    |   85 +
 .../org/apache/tuweni/devp2p/PingPacketTest.kt     |  106 +
 .../org/apache/tuweni/devp2p/PongPacketTest.kt     |   69 +
 .../cava/eth/reference/BlockRLPTestSuite.java      |  144 -
 .../cava/eth/reference/MerkleTrieTestSuite.java    |   99 -
 .../cava/eth/reference/RLPReferenceTestSuite.java  |  137 -
 .../consensys/cava/eth/reference/SSZTestSuite.java |  178 --
 .../cava/eth/reference/TransactionTestSuite.java   |  144 -
 .../tuweni/eth/reference/BlockRLPTestSuite.java    |  144 +
 .../tuweni/eth/reference/MerkleTrieTestSuite.java  |   99 +
 .../eth/reference/RLPReferenceTestSuite.java       |  137 +
 .../apache/tuweni/eth/reference/SSZTestSuite.java  |  178 ++
 .../tuweni/eth/reference/TransactionTestSuite.java |  144 +
 .../src/test/resources/eth2.0-tests                |    1 +
 eth-reference-tests/src/test/resources/tests       |    1 +
 .../cava/eth/repository/BlockHeaderFields.kt       |   37 -
 .../cava/eth/repository/BlockchainIndex.kt         |  634 ----
 .../cava/eth/repository/BlockchainRepository.kt    |  348 ---
 .../eth/repository/TransactionReceiptFields.kt     |   35 -
 .../tuweni/eth/repository/BlockHeaderFields.kt     |   41 +
 .../tuweni/eth/repository/BlockchainIndex.kt       |  638 +++++
 .../tuweni/eth/repository/BlockchainRepository.kt  |  352 +++
 .../eth/repository/TransactionReceiptFields.kt     |   39 +
 .../cava/eth/repository/BlockchainIndexTest.kt     |  342 ---
 .../eth/repository/BlockchainRepositoryTest.kt     |  477 ---
 .../tuweni/eth/repository/BlockchainIndexTest.kt   |  346 +++
 .../eth/repository/BlockchainRepositoryTest.kt     |  481 ++++
 .../main/java/net/consensys/cava/eth/Address.java  |   99 -
 .../main/java/net/consensys/cava/eth/Block.java    |  134 -
 .../java/net/consensys/cava/eth/BlockBody.java     |  133 -
 .../java/net/consensys/cava/eth/BlockHeader.java   |  383 ---
 eth/src/main/java/net/consensys/cava/eth/Hash.java |  116 -
 eth/src/main/java/net/consensys/cava/eth/Log.java  |  118 -
 .../net/consensys/cava/eth/LogsBloomFilter.java    |  132 -
 .../java/net/consensys/cava/eth/Transaction.java   |  439 ---
 .../net/consensys/cava/eth/TransactionReceipt.java |  231 --
 .../java/net/consensys/cava/eth/package-info.java  |   11 -
 .../main/java/org/apache/tuweni/eth/Address.java   |   99 +
 eth/src/main/java/org/apache/tuweni/eth/Block.java |  134 +
 .../main/java/org/apache/tuweni/eth/BlockBody.java |  133 +
 .../java/org/apache/tuweni/eth/BlockHeader.java    |  383 +++
 eth/src/main/java/org/apache/tuweni/eth/Hash.java  |  116 +
 eth/src/main/java/org/apache/tuweni/eth/Log.java   |  118 +
 .../org/apache/tuweni/eth/LogsBloomFilter.java     |  132 +
 .../java/org/apache/tuweni/eth/Transaction.java    |  439 +++
 .../org/apache/tuweni/eth/TransactionReceipt.java  |  231 ++
 .../java/org/apache/tuweni/eth/package-info.java   |   11 +
 .../java/net/consensys/cava/eth/BlockBodyTest.java |   46 -
 .../net/consensys/cava/eth/BlockHeaderTest.java    |   56 -
 .../java/net/consensys/cava/eth/BlockTest.java     |   47 -
 .../test/java/net/consensys/cava/eth/LogTest.java  |   37 -
 .../consensys/cava/eth/LogsBloomFilterTest.java    |   48 -
 .../consensys/cava/eth/TransactionReceiptTest.java |   63 -
 .../net/consensys/cava/eth/TransactionTest.java    |   79 -
 .../java/org/apache/tuweni/eth/BlockBodyTest.java  |   46 +
 .../org/apache/tuweni/eth/BlockHeaderTest.java     |   56 +
 .../test/java/org/apache/tuweni/eth/BlockTest.java |   47 +
 .../test/java/org/apache/tuweni/eth/LogTest.java   |   37 +
 .../org/apache/tuweni/eth/LogsBloomFilterTest.java |   48 +
 .../apache/tuweni/eth/TransactionReceiptTest.java  |   63 +
 .../org/apache/tuweni/eth/TransactionTest.java     |   79 +
 gradle/spotless.license.java                       |   22 +-
 io/src/main/java/net/consensys/cava/io/Base64.java |   68 -
 .../java/net/consensys/cava/io/IOConsumer.java     |   30 -
 .../net/consensys/cava/io/NullOutputStream.java    |   24 -
 .../main/java/net/consensys/cava/io/Resources.java |  334 ---
 .../main/java/net/consensys/cava/io/Streams.java   |   75 -
 .../java/net/consensys/cava/io/file/Files.java     |  200 --
 .../net/consensys/cava/io/file/package-info.java   |   11 -
 .../java/net/consensys/cava/io/package-info.java   |   11 -
 io/src/main/java/org/apache/tuweni/io/Base64.java  |   68 +
 .../main/java/org/apache/tuweni/io/IOConsumer.java |   30 +
 .../org/apache/tuweni/io/NullOutputStream.java     |   24 +
 .../main/java/org/apache/tuweni/io/Resources.java  |  334 +++
 io/src/main/java/org/apache/tuweni/io/Streams.java |   75 +
 .../main/java/org/apache/tuweni/io/file/Files.java |  200 ++
 .../org/apache/tuweni/io/file/package-info.java    |   11 +
 .../java/org/apache/tuweni/io/package-info.java    |   11 +
 .../java/net/consensys/cava/io/Base64Test.java     |   47 -
 .../java/net/consensys/cava/io/ResourcesTest.java  |   71 -
 .../java/net/consensys/cava/io/StreamsTest.java    |   34 -
 .../java/net/consensys/cava/io/file/FilesTest.java |   63 -
 .../test/java/org/apache/tuweni/io/Base64Test.java |   47 +
 .../java/org/apache/tuweni/io/ResourcesTest.java   |   71 +
 .../java/org/apache/tuweni/io/StreamsTest.java     |   34 +
 .../java/org/apache/tuweni/io/file/FilesTest.java  |   63 +
 .../io/file/resourceresolver/subdir/test3.yaml     |    0
 .../tuweni}/io/file/resourceresolver/test1.txt     |    0
 .../tuweni}/io/file/resourceresolver/test2.txt     |    0
 .../cava => org/apache/tuweni}/io/file/test.txt    |    0
 .../cava/junit/BouncyCastleExtension.java          |   31 -
 .../java/net/consensys/cava/junit/LuceneIndex.java |   26 -
 .../consensys/cava/junit/LuceneIndexWriter.java    |   26 -
 .../cava/junit/LuceneIndexWriterExtension.java     |   79 -
 .../java/net/consensys/cava/junit/RedisPort.java   |   27 -
 .../consensys/cava/junit/RedisServerExtension.java |  110 -
 .../net/consensys/cava/junit/TempDirectory.java    |   26 -
 .../cava/junit/TempDirectoryExtension.java         |   63 -
 .../net/consensys/cava/junit/VertxExtension.java   |   54 -
 .../net/consensys/cava/junit/VertxInstance.java    |   26 -
 .../net/consensys/cava/junit/package-info.java     |    8 -
 .../apache/tuweni/junit/BouncyCastleExtension.java |   31 +
 .../java/org/apache/tuweni/junit/LuceneIndex.java  |   26 +
 .../org/apache/tuweni/junit/LuceneIndexWriter.java |   26 +
 .../tuweni/junit/LuceneIndexWriterExtension.java   |   80 +
 .../java/org/apache/tuweni/junit/RedisPort.java    |   27 +
 .../apache/tuweni/junit/RedisServerExtension.java  |  110 +
 .../org/apache/tuweni/junit/TempDirectory.java     |   26 +
 .../tuweni/junit/TempDirectoryExtension.java       |   63 +
 .../org/apache/tuweni/junit/VertxExtension.java    |   54 +
 .../org/apache/tuweni/junit/VertxInstance.java     |   26 +
 .../java/org/apache/tuweni/junit/package-info.java |    8 +
 .../cava/junit/LuceneIndexWriterExtensionTest.java |   38 -
 .../cava/junit/RedisServerExtensionTest.java       |   38 -
 .../cava/junit/TempDirectoryExtensionTest.java     |   32 -
 .../junit/LuceneIndexWriterExtensionTest.java      |   39 +
 .../tuweni/junit/RedisServerExtensionTest.java     |   38 +
 .../tuweni/junit/TempDirectoryExtensionTest.java   |   32 +
 .../cava/kademlia/KademliaRoutingTable.kt          |  285 --
 .../apache/tuweni/kademlia/KademliaRoutingTable.kt |  289 ++
 .../cava/kademlia/KademliaRoutingTableTest.kt      |  153 -
 .../cava/kademlia/LogarithmicDistanceTest.kt       |   51 -
 .../consensys/cava/kademlia/OrderedInsertTest.kt   |   54 -
 .../tuweni/kademlia/KademliaRoutingTableTest.kt    |  157 +
 .../tuweni/kademlia/LogarithmicDistanceTest.kt     |   55 +
 .../apache/tuweni/kademlia/OrderedInsertTest.kt    |   58 +
 .../net/consensys/cava/kv/RedisBytesCodec.java     |   55 -
 .../java/net/consensys/cava/kv/package-info.java   |   11 -
 .../java/org/apache/tuweni/kv/RedisBytesCodec.java |   55 +
 .../java/org/apache/tuweni/kv/package-info.java    |   11 +
 .../consensys/cava/kv/InfinispanKeyValueStore.kt   |   48 -
 .../kotlin/net/consensys/cava/kv/KeyValueStore.kt  |   91 -
 .../net/consensys/cava/kv/LevelDBKeyValueStore.kt  |   93 -
 .../net/consensys/cava/kv/MapDBKeyValueStore.kt    |   98 -
 .../net/consensys/cava/kv/MapKeyValueStore.kt      |   58 -
 .../net/consensys/cava/kv/RedisKeyValueStore.kt    |  111 -
 .../net/consensys/cava/kv/RocksDBKeyValueStore.kt  |  105 -
 .../net/consensys/cava/kv/SQLKeyValueStore.kt      |  113 -
 .../apache/tuweni/kv/InfinispanKeyValueStore.kt    |   52 +
 .../kotlin/org/apache/tuweni/kv/KeyValueStore.kt   |   95 +
 .../org/apache/tuweni/kv/LevelDBKeyValueStore.kt   |   97 +
 .../org/apache/tuweni/kv/MapDBKeyValueStore.kt     |  102 +
 .../org/apache/tuweni/kv/MapKeyValueStore.kt       |   62 +
 .../org/apache/tuweni/kv/RedisKeyValueStore.kt     |  115 +
 .../org/apache/tuweni/kv/RocksDBKeyValueStore.kt   |  109 +
 .../org/apache/tuweni/kv/SQLKeyValueStore.kt       |  117 +
 .../net/consensys/cava/kv/KeyValueStoreTest.java   |   74 -
 .../consensys/cava/kv/RedisKeyValueStoreTest.java  |   66 -
 .../org/apache/tuweni/kv/KeyValueStoreTest.java    |   74 +
 .../apache/tuweni/kv/RedisKeyValueStoreTest.java   |   66 +
 .../net/consensys/cava/kv/KeyValueStoreSpec.kt     |  264 --
 .../org/apache/tuweni/kv/KeyValueStoreSpec.kt      |  268 ++
 .../net/consensys/cava/les/BlockBodiesMessage.kt   |   47 -
 .../net/consensys/cava/les/BlockHeadersMessage.kt  |   52 -
 .../consensys/cava/les/GetBlockBodiesMessage.kt    |   40 -
 .../consensys/cava/les/GetBlockHeadersMessage.kt   |   72 -
 .../net/consensys/cava/les/GetReceiptsMessage.kt   |   40 -
 .../kotlin/net/consensys/cava/les/LESPeerState.kt  |   32 -
 .../consensys/cava/les/LESSubProtocolHandler.kt    |  192 --
 .../net/consensys/cava/les/LESSubprotocol.kt       |   83 -
 .../kotlin/net/consensys/cava/les/LightClient.kt   |   58 -
 .../net/consensys/cava/les/ReceiptsMessage.kt      |   51 -
 .../kotlin/net/consensys/cava/les/StatusMessage.kt |  162 --
 .../org/apache/tuweni/les/BlockBodiesMessage.kt    |   51 +
 .../org/apache/tuweni/les/BlockHeadersMessage.kt   |   56 +
 .../org/apache/tuweni/les/GetBlockBodiesMessage.kt |   44 +
 .../apache/tuweni/les/GetBlockHeadersMessage.kt    |   76 +
 .../org/apache/tuweni/les/GetReceiptsMessage.kt    |   44 +
 .../kotlin/org/apache/tuweni/les/LESPeerState.kt   |   36 +
 .../org/apache/tuweni/les/LESSubProtocolHandler.kt |  196 ++
 .../kotlin/org/apache/tuweni/les/LESSubprotocol.kt |   87 +
 .../kotlin/org/apache/tuweni/les/LightClient.kt    |   62 +
 .../org/apache/tuweni/les/ReceiptsMessage.kt       |   55 +
 .../kotlin/org/apache/tuweni/les/StatusMessage.kt  |  166 ++
 .../cava/les/LESSubProtocolHandlerTest.kt          |  478 ---
 .../net/consensys/cava/les/LESSubprotocolTest.kt   |  101 -
 .../kotlin/net/consensys/cava/les/MessagesTest.kt  |  226 --
 .../apache/tuweni/les/LESSubProtocolHandlerTest.kt |  482 ++++
 .../org/apache/tuweni/les/LESSubprotocolTest.kt    |  105 +
 .../kotlin/org/apache/tuweni/les/MessagesTest.kt   |  230 ++
 .../net/consensys/cava/trie/CompactEncoding.java   |  131 -
 .../java/net/consensys/cava/trie/package-info.java |   14 -
 .../org/apache/tuweni/trie/CompactEncoding.java    |  131 +
 .../java/org/apache/tuweni/trie/package-info.java  |   14 +
 .../kotlin/net/consensys/cava/trie/BranchNode.kt   |  145 -
 .../net/consensys/cava/trie/DefaultNodeFactory.kt  |   56 -
 .../net/consensys/cava/trie/ExtensionNode.kt       |   78 -
 .../kotlin/net/consensys/cava/trie/GetVisitor.kt   |   55 -
 .../kotlin/net/consensys/cava/trie/LeafNode.kt     |   65 -
 .../net/consensys/cava/trie/MerklePatriciaTrie.kt  |  112 -
 .../net/consensys/cava/trie/MerkleStorage.kt       |   73 -
 .../consensys/cava/trie/MerkleStorageException.kt  |   37 -
 .../kotlin/net/consensys/cava/trie/MerkleTrie.kt   |  142 -
 .../main/kotlin/net/consensys/cava/trie/Node.kt    |   33 -
 .../kotlin/net/consensys/cava/trie/NodeFactory.kt  |   26 -
 .../kotlin/net/consensys/cava/trie/NodeVisitor.kt  |   26 -
 .../kotlin/net/consensys/cava/trie/NullNode.kt     |   44 -
 .../kotlin/net/consensys/cava/trie/PutVisitor.kt   |   92 -
 .../net/consensys/cava/trie/RemoveVisitor.kt       |   58 -
 .../cava/trie/StoredMerklePatriciaTrie.kt          |  194 --
 .../kotlin/net/consensys/cava/trie/StoredNode.kt   |  112 -
 .../net/consensys/cava/trie/StoredNodeFactory.kt   |  203 --
 .../kotlin/org/apache/tuweni/trie/BranchNode.kt    |  149 +
 .../org/apache/tuweni/trie/DefaultNodeFactory.kt   |   60 +
 .../kotlin/org/apache/tuweni/trie/ExtensionNode.kt |   82 +
 .../kotlin/org/apache/tuweni/trie/GetVisitor.kt    |   59 +
 .../main/kotlin/org/apache/tuweni/trie/LeafNode.kt |   69 +
 .../org/apache/tuweni/trie/MerklePatriciaTrie.kt   |  116 +
 .../kotlin/org/apache/tuweni/trie/MerkleStorage.kt |   77 +
 .../apache/tuweni/trie/MerkleStorageException.kt   |   41 +
 .../kotlin/org/apache/tuweni/trie/MerkleTrie.kt    |  146 +
 .../src/main/kotlin/org/apache/tuweni/trie/Node.kt |   37 +
 .../kotlin/org/apache/tuweni/trie/NodeFactory.kt   |   30 +
 .../kotlin/org/apache/tuweni/trie/NodeVisitor.kt   |   30 +
 .../main/kotlin/org/apache/tuweni/trie/NullNode.kt |   48 +
 .../kotlin/org/apache/tuweni/trie/PutVisitor.kt    |   96 +
 .../kotlin/org/apache/tuweni/trie/RemoveVisitor.kt |   62 +
 .../apache/tuweni/trie/StoredMerklePatriciaTrie.kt |  198 ++
 .../kotlin/org/apache/tuweni/trie/StoredNode.kt    |  116 +
 .../org/apache/tuweni/trie/StoredNodeFactory.kt    |  207 ++
 .../consensys/cava/trie/CompactEncodingTest.java   |   52 -
 .../cava/trie/MerklePatriciaTrieJavaTest.java      |  246 --
 .../trie/MerklePatriciaTriePerformanceTest.java    |  103 -
 .../trie/StoredMerklePatriciaTrieJavaTest.java     |  305 --
 .../apache/tuweni/trie/CompactEncodingTest.java    |   52 +
 .../tuweni/trie/MerklePatriciaTrieJavaTest.java    |  246 ++
 .../trie/MerklePatriciaTriePerformanceTest.java    |  103 +
 .../trie/StoredMerklePatriciaTrieJavaTest.java     |  305 ++
 .../cava/trie/MerklePatriciaTrieKotlinTest.kt      |  265 --
 .../trie/StoredMerklePatriciaTrieKotlinTest.kt     |  324 ---
 .../tuweni/trie/MerklePatriciaTrieKotlinTest.kt    |  269 ++
 .../trie/StoredMerklePatriciaTrieKotlinTest.kt     |  328 +++
 .../cava/net/coroutines/CoroutineByteChannel.kt    |  311 --
 .../cava/net/coroutines/CoroutineChannelGroup.kt   |  205 --
 .../net/coroutines/CoroutineDatagramChannel.kt     |  180 --
 .../cava/net/coroutines/CoroutineNetworkChannel.kt |  156 -
 .../cava/net/coroutines/CoroutineSelector.kt       |  466 ---
 .../net/coroutines/CoroutineServerSocketChannel.kt |  111 -
 .../cava/net/coroutines/CoroutineSocketChannel.kt  |  125 -
 .../tuweni/net/coroutines/CoroutineByteChannel.kt  |  315 ++
 .../tuweni/net/coroutines/CoroutineChannelGroup.kt |  209 ++
 .../net/coroutines/CoroutineDatagramChannel.kt     |  184 ++
 .../net/coroutines/CoroutineNetworkChannel.kt      |  160 ++
 .../tuweni/net/coroutines/CoroutineSelector.kt     |  470 +++
 .../net/coroutines/CoroutineServerSocketChannel.kt |  115 +
 .../net/coroutines/CoroutineSocketChannel.kt       |  129 +
 .../cava/net/coroutines/SelectorTest.java          |  169 --
 .../apache/tuweni/net/coroutines/SelectorTest.java |  169 ++
 .../net/coroutines/CoroutineChannelGroupTest.kt    |  103 -
 .../net/coroutines/CoroutineDatagramChannelTest.kt |   92 -
 .../cava/net/coroutines/CoroutineSelectorTest.kt   |  233 --
 .../net/coroutines/CoroutineSocketChannelTest.kt   |  137 -
 .../net/coroutines/CoroutineChannelGroupTest.kt    |  107 +
 .../net/coroutines/CoroutineDatagramChannelTest.kt |   96 +
 .../tuweni/net/coroutines/CoroutineSelectorTest.kt |  237 ++
 .../net/coroutines/CoroutineSocketChannelTest.kt   |  141 +
 .../java/net/consensys/cava/net/package-info.java  |    8 -
 .../net/tls/ClientFingerprintTrustManager.java     |  132 -
 .../net/tls/DelegatingTrustManagerFactory.java     |  232 --
 .../net/tls/FileBackedFingerprintRepository.java   |  172 --
 .../cava/net/tls/FingerprintRepository.java        |   48 -
 .../net/tls/ServerFingerprintTrustManager.java     |  127 -
 .../cava/net/tls/SingleTrustManagerFactory.java    |   39 -
 .../main/java/net/consensys/cava/net/tls/TLS.java  |  194 --
 .../cava/net/tls/TLSEnvironmentException.java      |   24 -
 .../cava/net/tls/TrustManagerFactories.java        |  723 -----
 .../cava/net/tls/TrustManagerFactoryWrapper.java   |   54 -
 .../consensys/cava/net/tls/VertxTrustOptions.java  |  649 -----
 .../java/org/apache/tuweni/net/package-info.java   |    8 +
 .../net/tls/ClientFingerprintTrustManager.java     |  132 +
 .../net/tls/DelegatingTrustManagerFactory.java     |  232 ++
 .../net/tls/FileBackedFingerprintRepository.java   |  172 ++
 .../tuweni/net/tls/FingerprintRepository.java      |   48 +
 .../net/tls/ServerFingerprintTrustManager.java     |  127 +
 .../tuweni/net/tls/SingleTrustManagerFactory.java  |   39 +
 .../main/java/org/apache/tuweni/net/tls/TLS.java   |  194 ++
 .../tuweni/net/tls/TLSEnvironmentException.java    |   24 +
 .../tuweni/net/tls/TrustManagerFactories.java      |  723 +++++
 .../tuweni/net/tls/TrustManagerFactoryWrapper.java |   54 +
 .../apache/tuweni/net/tls/VertxTrustOptions.java   |  649 +++++
 .../apache/tuweni}/net/tls/package-info.java       |    0
 .../cava/net/tls/ClientCaOrRecordTest.java         |  230 --
 .../consensys/cava/net/tls/ClientCaOrTofuTest.java |  191 --
 .../cava/net/tls/ClientCaOrWhitelistTest.java      |  161 --
 .../consensys/cava/net/tls/ClientRecordTest.java   |  211 --
 .../net/consensys/cava/net/tls/ClientTofuTest.java |  172 --
 .../cava/net/tls/ClientWhitelistTest.java          |  169 --
 .../tls/FileBackedFingerprintRepositoryTest.java   |   75 -
 .../cava/net/tls/InsecureTrustOptions.java         |   36 -
 .../consensys/cava/net/tls/SecurityTestUtils.java  |   76 -
 .../cava/net/tls/ServerCaOrRecordTest.java         |  207 --
 .../consensys/cava/net/tls/ServerCaOrTofaTest.java |  163 --
 .../cava/net/tls/ServerCaOrWhitelistTest.java      |  156 -
 .../consensys/cava/net/tls/ServerRecordTest.java   |  210 --
 .../net/consensys/cava/net/tls/ServerTofaTest.java |  166 --
 .../cava/net/tls/ServerWhitelistTest.java          |  157 -
 .../java/net/consensys/cava/net/tls/TLSTest.java   |  112 -
 .../tuweni/net/tls/ClientCaOrRecordTest.java       |  230 ++
 .../apache/tuweni/net/tls/ClientCaOrTofuTest.java  |  191 ++
 .../tuweni/net/tls/ClientCaOrWhitelistTest.java    |  161 ++
 .../apache/tuweni/net/tls/ClientRecordTest.java    |  211 ++
 .../org/apache/tuweni/net/tls/ClientTofuTest.java  |  172 ++
 .../apache/tuweni/net/tls/ClientWhitelistTest.java |  169 ++
 .../tls/FileBackedFingerprintRepositoryTest.java   |   75 +
 .../tuweni/net/tls/InsecureTrustOptions.java       |   36 +
 .../apache/tuweni/net/tls/SecurityTestUtils.java   |   76 +
 .../tuweni/net/tls/ServerCaOrRecordTest.java       |  207 ++
 .../apache/tuweni/net/tls/ServerCaOrTofaTest.java  |  163 ++
 .../tuweni/net/tls/ServerCaOrWhitelistTest.java    |  156 +
 .../apache/tuweni/net/tls/ServerRecordTest.java    |  210 ++
 .../org/apache/tuweni/net/tls/ServerTofaTest.java  |  166 ++
 .../apache/tuweni/net/tls/ServerWhitelistTest.java |  157 +
 .../java/org/apache/tuweni/net/tls/TLSTest.java    |  112 +
 .../cava/plumtree/EphemeralPeerRepository.java     |   74 -
 .../consensys/cava/plumtree/MessageHashing.java    |   25 -
 .../net/consensys/cava/plumtree/MessageSender.java |   39 -
 .../java/net/consensys/cava/plumtree/Peer.java     |   16 -
 .../consensys/cava/plumtree/PeerRepository.java    |   73 -
 .../java/net/consensys/cava/plumtree/State.java    |  198 --
 .../net/consensys/cava/plumtree/StateActor.java    |   16 -
 .../consensys/cava/plumtree/StateActorFactory.java |   18 -
 .../net/consensys/cava/plumtree/package-info.java  |   11 -
 .../tuweni/plumtree/EphemeralPeerRepository.java   |   74 +
 .../org/apache/tuweni/plumtree/MessageHashing.java |   25 +
 .../org/apache/tuweni/plumtree/MessageSender.java  |   39 +
 .../main/java/org/apache/tuweni/plumtree/Peer.java |   16 +
 .../org/apache/tuweni/plumtree/PeerRepository.java |   73 +
 .../java/org/apache/tuweni/plumtree/State.java     |  198 ++
 .../org/apache/tuweni/plumtree/StateActor.java     |   16 +
 .../apache/tuweni/plumtree/StateActorFactory.java  |   18 +
 .../org/apache/tuweni/plumtree/package-info.java   |   11 +
 .../net/consensys/cava/plumtree/StateTest.java     |  223 --
 .../java/org/apache/tuweni/plumtree/StateTest.java |  223 ++
 .../consensys/cava/rlp/AccumulatingRLPWriter.java  |   96 -
 .../consensys/cava/rlp/ByteBufferRLPWriter.java    |   80 -
 .../net/consensys/cava/rlp/BytesRLPReader.java     |  269 --
 .../net/consensys/cava/rlp/BytesRLPWriter.java     |   32 -
 .../consensys/cava/rlp/DelegatingRLPWriter.java    |   78 -
 .../net/consensys/cava/rlp/EndOfRLPException.java  |   22 -
 .../cava/rlp/InvalidRLPEncodingException.java      |   22 -
 .../cava/rlp/InvalidRLPTypeException.java          |   22 -
 rlp/src/main/java/net/consensys/cava/rlp/RLP.java  |  504 ----
 .../java/net/consensys/cava/rlp/RLPException.java  |   30 -
 .../java/net/consensys/cava/rlp/RLPReader.java     |  402 ---
 .../java/net/consensys/cava/rlp/RLPWriter.java     |  140 -
 .../java/net/consensys/cava/rlp/package-info.java  |   13 -
 .../apache/tuweni/rlp/AccumulatingRLPWriter.java   |   96 +
 .../org/apache/tuweni/rlp/ByteBufferRLPWriter.java |   80 +
 .../java/org/apache/tuweni/rlp/BytesRLPReader.java |  269 ++
 .../java/org/apache/tuweni/rlp/BytesRLPWriter.java |   32 +
 .../org/apache/tuweni/rlp/DelegatingRLPWriter.java |   78 +
 .../org/apache/tuweni/rlp/EndOfRLPException.java   |   22 +
 .../tuweni/rlp/InvalidRLPEncodingException.java    |   22 +
 .../apache/tuweni/rlp/InvalidRLPTypeException.java |   22 +
 rlp/src/main/java/org/apache/tuweni/rlp/RLP.java   |  504 ++++
 .../java/org/apache/tuweni/rlp/RLPException.java   |   30 +
 .../main/java/org/apache/tuweni/rlp/RLPReader.java |  402 +++
 .../main/java/org/apache/tuweni/rlp/RLPWriter.java |  140 +
 .../java/org/apache/tuweni/rlp/package-info.java   |   13 +
 .../consensys/cava/rlp/ByteBufferWriterTest.java   |  162 --
 .../net/consensys/cava/rlp/BytesRLPReaderTest.java |  222 --
 .../net/consensys/cava/rlp/BytesRLPWriterTest.java |  174 --
 .../apache/tuweni/rlp/ByteBufferWriterTest.java    |  162 ++
 .../org/apache/tuweni/rlp/BytesRLPReaderTest.java  |  222 ++
 .../org/apache/tuweni/rlp/BytesRLPWriterTest.java  |  174 ++
 .../cava/rlpx/EthereumIESEncryptionEngine.java     |  534 ----
 .../net/consensys/cava/rlpx/HandshakeMessage.java  |   32 -
 .../cava/rlpx/InitiatorHandshakeMessage.java       |   94 -
 .../consensys/cava/rlpx/InvalidMACException.java   |   27 -
 .../cava/rlpx/MemoryWireConnectionsRepository.java |   51 -
 .../net/consensys/cava/rlpx/RLPxConnection.java    |  315 --
 .../consensys/cava/rlpx/RLPxConnectionFactory.java |  333 ---
 .../java/net/consensys/cava/rlpx/RLPxMessage.java  |   74 -
 .../java/net/consensys/cava/rlpx/RLPxService.java  |   85 -
 .../cava/rlpx/ResponderHandshakeMessage.java       |   69 -
 .../cava/rlpx/WireConnectionRepository.java        |   52 -
 .../java/net/consensys/cava/rlpx/package-info.java |   12 -
 .../cava/rlpx/vertx/VertxRLPxService.java          |  390 ---
 .../consensys/cava/rlpx/vertx/package-info.java    |   12 -
 .../net/consensys/cava/rlpx/wire/Capability.java   |   56 -
 .../rlpx/wire/DefaultSubProtocolIdentifier.java    |   37 -
 .../cava/rlpx/wire/DefaultWireConnection.java      |  242 --
 .../cava/rlpx/wire/DisconnectMessage.java          |   47 -
 .../consensys/cava/rlpx/wire/DisconnectReason.java |   39 -
 .../net/consensys/cava/rlpx/wire/HelloMessage.java |  148 -
 .../net/consensys/cava/rlpx/wire/PingMessage.java  |   33 -
 .../net/consensys/cava/rlpx/wire/PongMessage.java  |   32 -
 .../net/consensys/cava/rlpx/wire/SubProtocol.java  |   49 -
 .../cava/rlpx/wire/SubProtocolHandler.java         |   47 -
 .../cava/rlpx/wire/SubProtocolIdentifier.java      |   35 -
 .../consensys/cava/rlpx/wire/WireConnection.java   |   26 -
 .../cava/rlpx/wire/WireProtocolMessage.java        |   32 -
 .../net/consensys/cava/rlpx/wire/package-info.java |   12 -
 .../tuweni/rlpx/EthereumIESEncryptionEngine.java   |  534 ++++
 .../org/apache/tuweni/rlpx/HandshakeMessage.java   |   32 +
 .../tuweni/rlpx/InitiatorHandshakeMessage.java     |   94 +
 .../apache/tuweni/rlpx/InvalidMACException.java    |   27 +
 .../rlpx/MemoryWireConnectionsRepository.java      |   51 +
 .../org/apache/tuweni/rlpx/RLPxConnection.java     |  315 ++
 .../apache/tuweni/rlpx/RLPxConnectionFactory.java  |  333 +++
 .../java/org/apache/tuweni/rlpx/RLPxMessage.java   |   74 +
 .../java/org/apache/tuweni/rlpx/RLPxService.java   |   85 +
 .../tuweni/rlpx/ResponderHandshakeMessage.java     |   69 +
 .../tuweni/rlpx/WireConnectionRepository.java      |   52 +
 .../java/org/apache/tuweni/rlpx/package-info.java  |   12 +
 .../apache/tuweni/rlpx/vertx/VertxRLPxService.java |  390 +++
 .../org/apache/tuweni/rlpx/vertx/package-info.java |   12 +
 .../org/apache/tuweni/rlpx/wire/Capability.java    |   56 +
 .../rlpx/wire/DefaultSubProtocolIdentifier.java    |   37 +
 .../tuweni/rlpx/wire/DefaultWireConnection.java    |  242 ++
 .../apache/tuweni/rlpx/wire/DisconnectMessage.java |   47 +
 .../apache/tuweni/rlpx/wire/DisconnectReason.java  |   39 +
 .../org/apache/tuweni/rlpx/wire/HelloMessage.java  |  148 +
 .../org/apache/tuweni/rlpx/wire/PingMessage.java   |   33 +
 .../org/apache/tuweni/rlpx/wire/PongMessage.java   |   32 +
 .../org/apache/tuweni/rlpx/wire/SubProtocol.java   |   49 +
 .../tuweni/rlpx/wire/SubProtocolHandler.java       |   47 +
 .../tuweni/rlpx/wire/SubProtocolIdentifier.java    |   35 +
 .../apache/tuweni/rlpx/wire/WireConnection.java    |   26 +
 .../tuweni/rlpx/wire/WireProtocolMessage.java      |   32 +
 .../org/apache/tuweni/rlpx/wire/package-info.java  |   12 +
 .../cava/rlpx/RLPxConnectionFactoryTest.java       |  263 --
 .../cava/rlpx/vertx/VertxAcceptanceTest.java       |  310 --
 .../cava/rlpx/vertx/VertxRLPxServiceTest.java      |  229 --
 .../cava/rlpx/wire/DefaultWireConnectionTest.java  |  224 --
 .../cava/rlpx/wire/DisconnectMessageTest.java      |   31 -
 .../consensys/cava/rlpx/wire/HelloMessageTest.java |   46 -
 .../net/consensys/cava/rlpx/wire/PingPongTest.java |   88 -
 .../wire/RLPxConnectionMessageExchangeTest.java    |  123 -
 .../tuweni/rlpx/RLPxConnectionFactoryTest.java     |  263 ++
 .../tuweni/rlpx/vertx/VertxAcceptanceTest.java     |  310 ++
 .../tuweni/rlpx/vertx/VertxRLPxServiceTest.java    |  229 ++
 .../rlpx/wire/DefaultWireConnectionTest.java       |  224 ++
 .../tuweni/rlpx/wire/DisconnectMessageTest.java    |   31 +
 .../apache/tuweni/rlpx/wire/HelloMessageTest.java  |   46 +
 .../org/apache/tuweni/rlpx/wire/PingPongTest.java  |   88 +
 .../wire/RLPxConnectionMessageExchangeTest.java    |  123 +
 .../cava/scuttlebutt/discovery/LocalIdentity.java  |  123 -
 .../ScuttlebuttLocalDiscoveryService.java          |  192 --
 .../cava/scuttlebutt/discovery/package-info.java   |   14 -
 .../scuttlebutt/discovery/LocalIdentity.java       |  123 +
 .../ScuttlebuttLocalDiscoveryService.java          |  192 ++
 .../tuweni/scuttlebutt/discovery/package-info.java |   14 +
 .../scuttlebutt/discovery/LocalIdentityTest.java   |   71 -
 .../ScuttlebuttLocalDiscoveryServiceTest.java      |  136 -
 .../scuttlebutt/discovery/LocalIdentityTest.java   |   71 +
 .../ScuttlebuttLocalDiscoveryServiceTest.java      |  136 +
 .../scuttlebutt/handshake/HandshakeException.java  |   23 -
 .../SecureScuttlebuttHandshakeClient.java          |  283 --
 .../SecureScuttlebuttHandshakeServer.java          |  273 --
 .../handshake/SecureScuttlebuttStream.java         |  152 -
 .../handshake/SecureScuttlebuttStreamClient.java   |   46 -
 .../handshake/SecureScuttlebuttStreamServer.java   |   56 -
 .../scuttlebutt/handshake/StreamException.java     |   20 -
 .../cava/scuttlebutt/handshake/package-info.java   |   14 -
 .../scuttlebutt/handshake/vertx/ClientHandler.java |   33 -
 .../handshake/vertx/ClientHandlerFactory.java      |   31 -
 .../vertx/SecureScuttlebuttVertxClient.java        |  218 --
 .../vertx/SecureScuttlebuttVertxServer.java        |  193 --
 .../scuttlebutt/handshake/vertx/ServerHandler.java |   33 -
 .../handshake/vertx/ServerHandlerFactory.java      |   31 -
 .../scuttlebutt/handshake/vertx/package-info.java  |   14 -
 .../scuttlebutt/handshake/HandshakeException.java  |   23 +
 .../SecureScuttlebuttHandshakeClient.java          |  283 ++
 .../SecureScuttlebuttHandshakeServer.java          |  273 ++
 .../handshake/SecureScuttlebuttStream.java         |  152 +
 .../handshake/SecureScuttlebuttStreamClient.java   |   46 +
 .../handshake/SecureScuttlebuttStreamServer.java   |   56 +
 .../scuttlebutt/handshake/StreamException.java     |   20 +
 .../tuweni/scuttlebutt/handshake/package-info.java |   14 +
 .../scuttlebutt/handshake/vertx/ClientHandler.java |   33 +
 .../handshake/vertx/ClientHandlerFactory.java      |   31 +
 .../vertx/SecureScuttlebuttVertxClient.java        |  218 ++
 .../vertx/SecureScuttlebuttVertxServer.java        |  193 ++
 .../scuttlebutt/handshake/vertx/ServerHandler.java |   33 +
 .../handshake/vertx/ServerHandlerFactory.java      |   31 +
 .../scuttlebutt/handshake/vertx/package-info.java  |   14 +
 .../SecureScuttlebuttHandshakeClientTest.java      |  152 -
 .../handshake/SecureScuttlebuttStreamTest.java     |  160 --
 .../handshake/vertx/VertxIntegrationTest.java      |  144 -
 .../SecureScuttlebuttHandshakeClientTest.java      |  152 +
 .../handshake/SecureScuttlebuttStreamTest.java     |  160 ++
 .../handshake/vertx/VertxIntegrationTest.java      |  144 +
 .../consensys/cava/scuttlebutt/rpc/RPCCodec.java   |  130 -
 .../consensys/cava/scuttlebutt/rpc/RPCFlag.java    |  124 -
 .../consensys/cava/scuttlebutt/rpc/RPCMessage.java |  140 -
 .../apache/tuweni/scuttlebutt/rpc/RPCCodec.java    |  130 +
 .../org/apache/tuweni/scuttlebutt/rpc/RPCFlag.java |  124 +
 .../apache/tuweni/scuttlebutt/rpc/RPCMessage.java  |  140 +
 .../scuttlebutt/rpc/PatchworkIntegrationTest.java  |  183 --
 .../cava/scuttlebutt/rpc/RPCEncodingTest.java      |   85 -
 .../cava/scuttlebutt/rpc/RPCFlagTest.java          |   56 -
 .../scuttlebutt/rpc/PatchworkIntegrationTest.java  |  183 ++
 .../tuweni/scuttlebutt/rpc/RPCEncodingTest.java    |   85 +
 .../apache/tuweni/scuttlebutt/rpc/RPCFlagTest.java |   56 +
 .../cava/scuttlebutt/Ed25519KeyPairIdentity.java   |   82 -
 .../cava/scuttlebutt/Ed25519PublicKeyIdentity.java |   83 -
 .../net/consensys/cava/scuttlebutt/Identity.java   |  192 --
 .../net/consensys/cava/scuttlebutt/Invite.java     |  102 -
 .../cava/scuttlebutt/SECP256K1KeyPairIdentity.java |   78 -
 .../scuttlebutt/SECP256K1PublicKeyIdentity.java    |   83 -
 .../consensys/cava/scuttlebutt/package-info.java   |   14 -
 .../tuweni/scuttlebutt/Ed25519KeyPairIdentity.java |   82 +
 .../scuttlebutt/Ed25519PublicKeyIdentity.java      |   83 +
 .../org/apache/tuweni/scuttlebutt/Identity.java    |  192 ++
 .../java/org/apache/tuweni/scuttlebutt/Invite.java |  102 +
 .../scuttlebutt/SECP256K1KeyPairIdentity.java      |   78 +
 .../scuttlebutt/SECP256K1PublicKeyIdentity.java    |   83 +
 .../apache/tuweni/scuttlebutt/package-info.java    |   14 +
 .../consensys/cava/scuttlebutt/IdentityTest.java   |  167 --
 .../net/consensys/cava/scuttlebutt/InviteTest.java |   54 -
 .../apache/tuweni/scuttlebutt/IdentityTest.java    |  167 ++
 .../org/apache/tuweni/scuttlebutt/InviteTest.java  |   54 +
 settings.gradle                                    |    2 +-
 .../consensys/cava/ssz/ByteBufferSSZWriter.java    |   36 -
 .../net/consensys/cava/ssz/BytesSSZReader.java     |  250 --
 .../net/consensys/cava/ssz/BytesSSZWriter.java     |   35 -
 .../net/consensys/cava/ssz/EndOfSSZException.java  |   22 -
 .../cava/ssz/InvalidSSZTypeException.java          |   22 -
 ssz/src/main/java/net/consensys/cava/ssz/SSZ.java  | 1861 ------------
 .../java/net/consensys/cava/ssz/SSZException.java  |   30 -
 .../java/net/consensys/cava/ssz/SSZReader.java     |  621 ----
 .../java/net/consensys/cava/ssz/SSZWriter.java     |  673 -----
 .../java/net/consensys/cava/ssz/package-info.java  |   13 -
 .../org/apache/tuweni/ssz/ByteBufferSSZWriter.java |   36 +
 .../java/org/apache/tuweni/ssz/BytesSSZReader.java |  250 ++
 .../java/org/apache/tuweni/ssz/BytesSSZWriter.java |   35 +
 .../org/apache/tuweni/ssz/EndOfSSZException.java   |   22 +
 .../apache/tuweni/ssz/InvalidSSZTypeException.java |   22 +
 ssz/src/main/java/org/apache/tuweni/ssz/SSZ.java   | 1861 ++++++++++++
 .../java/org/apache/tuweni/ssz/SSZException.java   |   30 +
 .../main/java/org/apache/tuweni/ssz/SSZReader.java |  621 ++++
 .../main/java/org/apache/tuweni/ssz/SSZWriter.java |  673 +++++
 .../java/org/apache/tuweni/ssz/package-info.java   |   13 +
 .../cava/ssz/experimental/BytesSSZReader.kt        |   87 -
 .../cava/ssz/experimental/BytesSSZWriter.kt        |  117 -
 .../net/consensys/cava/ssz/experimental/SSZ.kt     |  187 --
 .../consensys/cava/ssz/experimental/SSZReader.kt   |  524 ----
 .../consensys/cava/ssz/experimental/SSZWriter.kt   |  566 ----
 .../tuweni/ssz/experimental/BytesSSZReader.kt      |   91 +
 .../tuweni/ssz/experimental/BytesSSZWriter.kt      |  121 +
 .../org/apache/tuweni/ssz/experimental/SSZ.kt      |  191 ++
 .../apache/tuweni/ssz/experimental/SSZReader.kt    |  528 ++++
 .../apache/tuweni/ssz/experimental/SSZWriter.kt    |  570 ++++
 .../consensys/cava/ssz/ByteBufferWriterTest.java   |  127 -
 .../net/consensys/cava/ssz/BytesSSZReaderTest.java |  197 --
 .../net/consensys/cava/ssz/BytesSSZWriterTest.java |  429 ---
 .../net/consensys/cava/ssz/HashTreeRootTest.java   |  113 -
 .../apache/tuweni/ssz/ByteBufferWriterTest.java    |  127 +
 .../org/apache/tuweni/ssz/BytesSSZReaderTest.java  |  197 ++
 .../org/apache/tuweni/ssz/BytesSSZWriterTest.java  |  429 +++
 .../org/apache/tuweni/ssz/HashTreeRootTest.java    |  113 +
 .../net/consensys/cava/ssz/experimental/SSZTest.kt |   38 -
 .../org/apache/tuweni/ssz/experimental/SSZTest.kt  |   42 +
 toml/README.md                                     |   30 +-
 toml/build.gradle                                  |    2 +-
 .../apache/tuweni}/toml/internal/TomlLexer.g4      |    0
 .../apache/tuweni}/toml/internal/TomlParser.g4     |    0
 .../cava/toml/AccumulatingErrorListener.java       |  124 -
 .../java/net/consensys/cava/toml/ArrayVisitor.java |   49 -
 .../net/consensys/cava/toml/ErrorReporter.java     |   17 -
 .../consensys/cava/toml/InlineTableVisitor.java    |   51 -
 .../net/consensys/cava/toml/JsonSerializer.java    |  168 --
 .../java/net/consensys/cava/toml/KeyVisitor.java   |   48 -
 .../java/net/consensys/cava/toml/LineVisitor.java  |  112 -
 .../net/consensys/cava/toml/LocalDateVisitor.java  |  102 -
 .../net/consensys/cava/toml/LocalTimeVisitor.java  |  119 -
 .../net/consensys/cava/toml/MutableTomlArray.java  |  156 -
 .../net/consensys/cava/toml/MutableTomlTable.java  |  236 --
 .../main/java/net/consensys/cava/toml/Parser.java  |  100 -
 .../consensys/cava/toml/QuotedStringVisitor.java   |   99 -
 .../java/net/consensys/cava/toml/TokenName.java    |   73 -
 .../main/java/net/consensys/cava/toml/Toml.java    |  246 --
 .../java/net/consensys/cava/toml/TomlArray.java    |  304 --
 .../cava/toml/TomlInvalidTypeException.java        |   23 -
 .../net/consensys/cava/toml/TomlParseError.java    |   43 -
 .../net/consensys/cava/toml/TomlParseResult.java   |   35 -
 .../java/net/consensys/cava/toml/TomlPosition.java |  102 -
 .../java/net/consensys/cava/toml/TomlTable.java    | 1168 --------
 .../java/net/consensys/cava/toml/TomlType.java     |   61 -
 .../java/net/consensys/cava/toml/TomlVersion.java  |   62 -
 .../java/net/consensys/cava/toml/ValueVisitor.java |  173 --
 .../net/consensys/cava/toml/ZoneOffsetVisitor.java |   84 -
 .../java/net/consensys/cava/toml/package-info.java |   13 -
 .../tuweni/toml/AccumulatingErrorListener.java     |  124 +
 .../java/org/apache/tuweni/toml/ArrayVisitor.java  |   49 +
 .../java/org/apache/tuweni/toml/ErrorReporter.java |   17 +
 .../org/apache/tuweni/toml/InlineTableVisitor.java |   51 +
 .../org/apache/tuweni/toml/JsonSerializer.java     |  168 ++
 .../java/org/apache/tuweni/toml/KeyVisitor.java    |   48 +
 .../java/org/apache/tuweni/toml/LineVisitor.java   |  112 +
 .../org/apache/tuweni/toml/LocalDateVisitor.java   |  102 +
 .../org/apache/tuweni/toml/LocalTimeVisitor.java   |  119 +
 .../org/apache/tuweni/toml/MutableTomlArray.java   |  156 +
 .../org/apache/tuweni/toml/MutableTomlTable.java   |  236 ++
 .../main/java/org/apache/tuweni/toml/Parser.java   |  100 +
 .../apache/tuweni/toml/QuotedStringVisitor.java    |   99 +
 .../java/org/apache/tuweni/toml/TokenName.java     |   73 +
 .../src/main/java/org/apache/tuweni/toml/Toml.java |  246 ++
 .../java/org/apache/tuweni/toml/TomlArray.java     |  304 ++
 .../tuweni/toml/TomlInvalidTypeException.java      |   23 +
 .../org/apache/tuweni/toml/TomlParseError.java     |   43 +
 .../org/apache/tuweni/toml/TomlParseResult.java    |   35 +
 .../java/org/apache/tuweni/toml/TomlPosition.java  |  102 +
 .../java/org/apache/tuweni/toml/TomlTable.java     | 1168 ++++++++
 .../main/java/org/apache/tuweni/toml/TomlType.java |   61 +
 .../java/org/apache/tuweni/toml/TomlVersion.java   |   62 +
 .../java/org/apache/tuweni/toml/ValueVisitor.java  |  173 ++
 .../org/apache/tuweni/toml/ZoneOffsetVisitor.java  |   84 +
 .../java/org/apache/tuweni/toml/package-info.java  |   13 +
 .../consensys/cava/toml/MutableTomlArrayTest.java  |   90 -
 .../consensys/cava/toml/MutableTomlTableTest.java  |  194 --
 .../net/consensys/cava/toml/TokenNameTest.java     |   36 -
 .../java/net/consensys/cava/toml/TomlTest.java     |  563 ----
 .../apache/tuweni/toml/MutableTomlArrayTest.java   |   90 +
 .../apache/tuweni/toml/MutableTomlTableTest.java   |  194 ++
 .../java/org/apache/tuweni/toml/TokenNameTest.java |   36 +
 .../test/java/org/apache/tuweni/toml/TomlTest.java |  563 ++++
 .../apache/tuweni}/toml/example-v0.4.0.toml        |    0
 .../apache/tuweni}/toml/hard_example.toml          |    0
 .../apache/tuweni}/toml/hard_example_unicode.toml  |    0
 .../tuweni}/toml/toml-v0.5.0-spec-example.toml     |    0
 .../cava/units/bigints/BaseUInt256Value.java       |  335 ---
 .../cava/units/bigints/BaseUInt384Value.java       |  335 ---
 .../cava/units/bigints/BaseUInt64Value.java        |  334 ---
 .../net/consensys/cava/units/bigints/UInt256.java  |  782 -----
 .../cava/units/bigints/UInt256Domain.java          |   52 -
 .../consensys/cava/units/bigints/UInt256Value.java |  388 ---
 .../cava/units/bigints/UInt256ValueDomain.java     |   65 -
 .../net/consensys/cava/units/bigints/UInt256s.java |   42 -
 .../net/consensys/cava/units/bigints/UInt384.java  |  782 -----
 .../cava/units/bigints/UInt384Domain.java          |   52 -
 .../consensys/cava/units/bigints/UInt384Value.java |  388 ---
 .../cava/units/bigints/UInt384ValueDomain.java     |   65 -
 .../net/consensys/cava/units/bigints/UInt384s.java |   42 -
 .../net/consensys/cava/units/bigints/UInt64.java   |  559 ----
 .../consensys/cava/units/bigints/UInt64Domain.java |   52 -
 .../consensys/cava/units/bigints/UInt64Value.java  |  382 ---
 .../cava/units/bigints/UInt64ValueDomain.java      |   65 -
 .../net/consensys/cava/units/bigints/UInt64s.java  |   42 -
 .../net/consensys/cava/units/ethereum/Gas.java     |  151 -
 .../net/consensys/cava/units/ethereum/Wei.java     |   93 -
 .../net/consensys/cava/units/package-info.java     |    8 -
 .../tuweni/units/bigints/BaseUInt256Value.java     |  335 +++
 .../tuweni/units/bigints/BaseUInt384Value.java     |  335 +++
 .../tuweni/units/bigints/BaseUInt64Value.java      |  334 +++
 .../org/apache/tuweni/units/bigints/UInt256.java   |  782 +++++
 .../apache/tuweni/units/bigints/UInt256Domain.java |   52 +
 .../apache/tuweni/units/bigints/UInt256Value.java  |  388 +++
 .../tuweni/units/bigints/UInt256ValueDomain.java   |   65 +
 .../org/apache/tuweni/units/bigints/UInt256s.java  |   42 +
 .../org/apache/tuweni/units/bigints/UInt384.java   |  782 +++++
 .../apache/tuweni/units/bigints/UInt384Domain.java |   52 +
 .../apache/tuweni/units/bigints/UInt384Value.java  |  388 +++
 .../tuweni/units/bigints/UInt384ValueDomain.java   |   65 +
 .../org/apache/tuweni/units/bigints/UInt384s.java  |   42 +
 .../org/apache/tuweni/units/bigints/UInt64.java    |  559 ++++
 .../apache/tuweni/units/bigints/UInt64Domain.java  |   52 +
 .../apache/tuweni/units/bigints/UInt64Value.java   |  382 +++
 .../tuweni/units/bigints/UInt64ValueDomain.java    |   65 +
 .../org/apache/tuweni/units/bigints/UInt64s.java   |   42 +
 .../apache/tuweni}/units/bigints/package-info.java |    0
 .../java/org/apache/tuweni/units/ethereum/Gas.java |  151 +
 .../java/org/apache/tuweni/units/ethereum/Wei.java |   93 +
 .../tuweni}/units/ethereum/package-info.java       |    0
 .../java/org/apache/tuweni/units/package-info.java |    8 +
 .../cava/units/bigints/BaseUInt256ValueTest.java   |  904 ------
 .../cava/units/bigints/BaseUInt384ValueTest.java   |  813 ------
 .../cava/units/bigints/BaseUInt64ValueTest.java    |  745 -----
 .../consensys/cava/units/bigints/UInt256Test.java  |  928 ------
 .../consensys/cava/units/bigints/UInt384Test.java  |  947 ------
 .../consensys/cava/units/bigints/UInt64Test.java   |  760 -----
 .../net/consensys/cava/units/ethereum/GasTest.java |   86 -
 .../net/consensys/cava/units/ethereum/WeiTest.java |   63 -
 .../tuweni/units/bigints/BaseUInt256ValueTest.java |  904 ++++++
 .../tuweni/units/bigints/BaseUInt384ValueTest.java |  813 ++++++
 .../tuweni/units/bigints/BaseUInt64ValueTest.java  |  745 +++++
 .../apache/tuweni/units/bigints/UInt256Test.java   |  928 ++++++
 .../apache/tuweni/units/bigints/UInt384Test.java   |  947 ++++++
 .../apache/tuweni/units/bigints/UInt64Test.java    |  760 +++++
 .../org/apache/tuweni/units/ethereum/GasTest.java  |   86 +
 .../org/apache/tuweni/units/ethereum/WeiTest.java  |   63 +
 988 files changed, 89474 insertions(+), 89124 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 28/32: Fix logic of using credentials

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit d1437a12af062c7f427e154e55678a3e7e2e6b05
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Mon Apr 22 05:28:24 2019 -0700

    Fix logic of using credentials
---
 build.gradle | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/build.gradle b/build.gradle
index 5c19f32..13baa85 100644
--- a/build.gradle
+++ b/build.gradle
@@ -306,12 +306,9 @@ allprojects {
 
           if (!credentialsFound) {
             project.logger.info('Reading credentials from environment')
-            credentialsFound = System.getenv('NEXUS_USER') != null
-            if (credentialsFound) {
-              credentials {
-                username asfNexusUsername ?: System.getenv('NEXUS_USER')
-                password asfNexusPassword ?: System.getenv('NEXUS_PASSWORD')
-              }
+            credentials {
+              username project.findProperty('asfNexusUsername') ?: System.getenv('NEXUS_USER')
+              password project.findProperty('asfNexusPassword') ?: System.getenv('NEXUS_PASSWORD')
             }
           }
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 03/32: Add git submodules

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 01621154b60bf952300947892f9b35bdfd553ed1
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Tue Apr 2 22:11:23 2019 -0700

    Add git submodules
---
 eth-reference-tests/src/test/resources/eth2.0-tests | 1 +
 eth-reference-tests/src/test/resources/tests        | 1 +
 2 files changed, 2 insertions(+)

diff --git a/eth-reference-tests/src/test/resources/eth2.0-tests b/eth-reference-tests/src/test/resources/eth2.0-tests
new file mode 160000
index 0000000..33e762c
--- /dev/null
+++ b/eth-reference-tests/src/test/resources/eth2.0-tests
@@ -0,0 +1 @@
+Subproject commit 33e762c76e0a9458d9d89fa4f9c696e769fb2e2f
diff --git a/eth-reference-tests/src/test/resources/tests b/eth-reference-tests/src/test/resources/tests
new file mode 160000
index 0000000..ebb2dc8
--- /dev/null
+++ b/eth-reference-tests/src/test/resources/tests
@@ -0,0 +1 @@
+Subproject commit ebb2dc8c6a4c5bebce6479cebc9a9c9f77200e92


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org


[incubator-tuweni] 13/32: Add a sample integration example to plumtree

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 1da45edfe6114b0632690e00e1f4728c45572944
Author: Antoine Toulme <to...@apache.org>
AuthorDate: Wed Apr 3 16:58:53 2019 -0700

    Add a sample integration example to plumtree
---
 plumtree/build.gradle                              |   4 +
 .../{StateActor.java => MessageValidator.java}     |  18 +-
 .../main/java/org/apache/tuweni/plumtree/Peer.java |   5 +-
 .../java/org/apache/tuweni/plumtree/State.java     | 115 +++++++++---
 .../SocketPeer.java}                               |  26 ++-
 .../tuweni/plumtree/vertx/VertxGossipServer.java   | 208 +++++++++++++++++++++
 .../java/org/apache/tuweni/plumtree/StateTest.java |  92 ++++-----
 .../plumtree/vertx/VertxGossipServerTest.java      | 165 ++++++++++++++++
 8 files changed, 562 insertions(+), 71 deletions(-)

diff --git a/plumtree/build.gradle b/plumtree/build.gradle
index 9d6569f..041b8bb 100644
--- a/plumtree/build.gradle
+++ b/plumtree/build.gradle
@@ -2,9 +2,13 @@ description = 'Plumtree - Push-Lazy-pUsh Multicast TREE, an implementation of Ep
 
 dependencies {
   compile project(':bytes')
+  compile project(':concurrent')
   compile project(':crypto')
 
+  compileOnly 'io.vertx:vertx-core'
+
   testCompile project(':junit')
+  testCompile 'io.vertx:vertx-core'
   testCompile 'org.bouncycastle:bcprov-jdk15on'
   testCompile 'org.junit.jupiter:junit-jupiter-api'
   testCompile 'org.junit.jupiter:junit-jupiter-params'
diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/StateActor.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/MessageValidator.java
similarity index 63%
rename from plumtree/src/main/java/org/apache/tuweni/plumtree/StateActor.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/MessageValidator.java
index dc5029d..d17132d 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/StateActor.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/MessageValidator.java
@@ -12,5 +12,21 @@
  */
 package org.apache.tuweni.plumtree;
 
-public interface StateActor {
+import org.apache.tuweni.bytes.Bytes;
+
+/**
+ * Validator for a message and a peer.
+ *
+ * This validator is called prior to gossiping the message from that peer to other peers.
+ */
+public interface MessageValidator {
+
+  /**
+   * Validates that the message from the peer is valid.
+   *
+   * @param message the payload sent over the network
+   * @param peer the peer that sent the message
+   * @return true if the message is valid
+   */
+  boolean validate(Bytes message, Peer peer);
 }
diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/Peer.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/Peer.java
index bf42d86..10e87b3 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/Peer.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/Peer.java
@@ -12,5 +12,8 @@
  */
 package org.apache.tuweni.plumtree;
 
-public class Peer {
+/**
+ * A peer part of the gossip system.
+ */
+public interface Peer {
 }
diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
index 36ecd37..f35f358 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/State.java
@@ -15,15 +15,18 @@ package org.apache.tuweni.plumtree;
 import org.apache.tuweni.bytes.Bytes;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
 import java.util.Timer;
 import java.util.TimerTask;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
+import javax.annotation.Nullable;
 
 /**
  * Local state to our peer, representing the make-up of the tree of peers.
@@ -32,8 +35,19 @@ public final class State {
 
   private final PeerRepository peerRepository;
   private final MessageHashing messageHashingFunction;
-  private final Map<Bytes, MessageHandler> messageHandlers = new ConcurrentHashMap<>();
+  private final int maxMessagesHandlers = 1000000;
+  private final Map<Bytes, MessageHandler> messageHandlers =
+      Collections.synchronizedMap(new LinkedHashMap<Bytes, MessageHandler>() {
+
+        @Override
+        protected boolean removeEldestEntry(final Map.Entry<Bytes, MessageHandler> eldest) {
+          return super.size() > maxMessagesHandlers;
+        }
+      });
+
   private final MessageSender messageSender;
+  private final Consumer<Bytes> messageListener;
+  private final MessageValidator messageValidator;
   private final Queue<Runnable> lazyQueue = new ConcurrentLinkedQueue<>();
   private final Timer timer = new Timer("plumtree", true);
   private final long delay;
@@ -41,6 +55,7 @@ public final class State {
   final class MessageHandler {
 
     private final Bytes hash;
+
     private final AtomicBoolean receivedFullMessage = new AtomicBoolean(false);
     private final AtomicBoolean requestingGraftMessage = new AtomicBoolean(false);
     private List<TimerTask> tasks = new ArrayList<>();
@@ -50,26 +65,38 @@ public final class State {
       this.hash = hash;
     }
 
-    void fullMessageReceived(Peer sender, Bytes message) {
+    /**
+     * Acts on receiving the full message
+     * 
+     * @param sender the sender - may be null if we are submitting this message to the network
+     * @param message the payload to send to the network
+     */
+    void fullMessageReceived(@Nullable Peer sender, Bytes message) {
       if (receivedFullMessage.compareAndSet(false, true)) {
         for (TimerTask task : tasks) {
           task.cancel();
         }
-        for (Peer peer : peerRepository.eagerPushPeers()) {
-          if (!sender.equals(peer)) {
-            messageSender.sendMessage(MessageSender.Verb.GOSSIP, peer, message);
+
+        if (sender == null || messageValidator.validate(message, sender)) {
+          for (Peer peer : peerRepository.eagerPushPeers()) {
+            if (sender == null || !sender.equals(peer)) {
+              messageSender.sendMessage(MessageSender.Verb.GOSSIP, peer, message);
+            }
           }
+          lazyQueue.addAll(
+              peerRepository
+                  .lazyPushPeers()
+                  .stream()
+                  .filter(p -> !lazyPeers.contains(p))
+                  .map(peer -> (Runnable) (() -> messageSender.sendMessage(MessageSender.Verb.IHAVE, peer, hash)))
+                  .collect(Collectors.toList()));
+          messageListener.accept(message);
         }
-        lazyQueue.addAll(
-            peerRepository
-                .lazyPushPeers()
-                .stream()
-                .filter(p -> !lazyPeers.contains(p))
-                .map(peer -> (Runnable) (() -> messageSender.sendMessage(MessageSender.Verb.IHAVE, peer, hash)))
-                .collect(Collectors.toList()));
       } else {
-        messageSender.sendMessage(MessageSender.Verb.PRUNE, sender, null);
-        peerRepository.moveToLazy(sender);
+        if (sender != null) {
+          messageSender.sendMessage(MessageSender.Verb.PRUNE, sender, null);
+          peerRepository.moveToLazy(sender);
+        }
       }
     }
 
@@ -99,19 +126,49 @@ public final class State {
     }
   }
 
-  public State(PeerRepository peerRepository, MessageHashing messageHashingFunction, MessageSender messageSender) {
-    this(peerRepository, messageHashingFunction, messageSender, 5000, 5000);
+  /**
+   * Constructor using default time constants.
+   * 
+   * @param peerRepository the peer repository to use to store and access peer information.
+   * @param messageHashingFunction the function to use to hash messages into hashes to compare them.
+   * @param messageSender a function abstracting sending messages to other peers.
+   * @param messageListener a function consuming messages when they are gossiped.
+   * @param messageValidator a function validating messages before they are gossiped to other peers.
+   */
+  public State(
+      PeerRepository peerRepository,
+      MessageHashing messageHashingFunction,
+      MessageSender messageSender,
+      Consumer<Bytes> messageListener,
+      MessageValidator messageValidator) {
+    this(peerRepository, messageHashingFunction, messageSender, messageListener, messageValidator, 5000, 5000);
   }
 
+  /**
+   * Constructor using default time constants.
+   * 
+   * @param peerRepository the peer repository to use to store and access peer information.
+   * @param messageHashingFunction the function to use to hash messages into hashes to compare them.
+   * @param messageSender a function abstracting sending messages to other peers.
+   * @param messageListener a function consuming messages when they are gossiped.
+   * @param messageValidator a function validating messages before they are gossiped to other peers.
+   * @param graftDelay delay in milliseconds to apply before this peer grafts an other peer when it finds that peer has
+   *        data it misses.
+   * @param lazyQueueInterval the interval in milliseconds between sending messages to lazy peers.
+   */
   public State(
       PeerRepository peerRepository,
       MessageHashing messageHashingFunction,
       MessageSender messageSender,
+      Consumer<Bytes> messageListener,
+      MessageValidator messageValidator,
       long graftDelay,
       long lazyQueueInterval) {
     this.peerRepository = peerRepository;
     this.messageHashingFunction = messageHashingFunction;
     this.messageSender = messageSender;
+    this.messageListener = messageListener;
+    this.messageValidator = messageValidator;
     this.delay = graftDelay;
     timer.schedule(new TimerTask() {
       @Override
@@ -132,7 +189,7 @@ public final class State {
 
   /**
    * Removes a peer from the collection of peers we are connected to.
-   * 
+   *
    * @param peer the peer to remove
    */
   public void removePeer(Peer peer) {
@@ -141,31 +198,31 @@ public final class State {
   }
 
   /**
-   * Records a message was received in full from a peer
+   * Records a message was received in full from a peer.
    *
    * @param peer the peer that sent the message
    * @param message the hash of the message
    */
-  public void receiveFullMessage(Peer peer, Bytes message) {
+  public void receiveGossipMessage(Peer peer, Bytes message) {
     peerRepository.considerNewPeer(peer);
     MessageHandler handler = messageHandlers.computeIfAbsent(messageHashingFunction.hash(message), MessageHandler::new);
     handler.fullMessageReceived(peer, message);
   }
 
   /**
-   * Records a message was partially received from a peer
+   * Records a message was partially received from a peer.
    *
    * @param peer the peer that sent the message
    * @param messageHash the hash of the message
    */
-  public void receiveHeaderMessage(Peer peer, Bytes messageHash) {
+  public void receiveIHaveMessage(Peer peer, Bytes messageHash) {
     MessageHandler handler = messageHandlers.computeIfAbsent(messageHash, MessageHandler::new);
     handler.partialMessageReceived(peer);
   }
 
   /**
    * Requests a peer be pruned away from the eager peers into the lazy peers
-   * 
+   *
    * @param peer the peer to move to lazy peers
    */
   public void receivePruneMessage(Peer peer) {
@@ -174,7 +231,7 @@ public final class State {
 
   /**
    * Requests a peer be grafted to the eager peers list
-   * 
+   *
    * @param peer the peer to add to the eager peers
    * @param messageHash the hash of the message that triggers this grafting
    */
@@ -183,6 +240,16 @@ public final class State {
     messageSender.sendMessage(MessageSender.Verb.GOSSIP, peer, messageHash);
   }
 
+  /**
+   * Sends a gossip message to all peers, according to their status.
+   * 
+   * @param message the message to propagate
+   */
+  public void sendGossipMessage(Bytes message) {
+    MessageHandler handler = messageHandlers.computeIfAbsent(messageHashingFunction.hash(message), MessageHandler::new);
+    handler.fullMessageReceived(null, message);
+  }
+
   void processQueue() {
     for (Runnable r : lazyQueue) {
       r.run();
diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/StateActorFactory.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/SocketPeer.java
similarity index 63%
rename from plumtree/src/main/java/org/apache/tuweni/plumtree/StateActorFactory.java
rename to plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/SocketPeer.java
index 61d076b..d5322c2 100644
--- a/plumtree/src/main/java/org/apache/tuweni/plumtree/StateActorFactory.java
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/SocketPeer.java
@@ -10,9 +10,29 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package org.apache.tuweni.plumtree;
+package org.apache.tuweni.plumtree.vertx;
 
-public interface StateActorFactory {
+import org.apache.tuweni.plumtree.Peer;
 
-  public StateActor create(State state);
+import io.vertx.core.net.NetSocket;
+
+/**
+ * Vert.x gossip peer associated with a socket
+ */
+final class SocketPeer implements Peer {
+
+  private final NetSocket socket;
+
+  SocketPeer(NetSocket socket) {
+    this.socket = socket;
+  }
+
+  NetSocket socket() {
+    return socket;
+  }
+
+  @Override
+  public String toString() {
+    return socket.localAddress().toString();
+  }
 }
diff --git a/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/VertxGossipServer.java b/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/VertxGossipServer.java
new file mode 100644
index 0000000..303ac60
--- /dev/null
+++ b/plumtree/src/main/java/org/apache/tuweni/plumtree/vertx/VertxGossipServer.java
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.tuweni.plumtree.vertx;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.concurrent.AsyncCompletion;
+import org.apache.tuweni.concurrent.CompletableAsyncCompletion;
+import org.apache.tuweni.plumtree.MessageHashing;
+import org.apache.tuweni.plumtree.MessageSender;
+import org.apache.tuweni.plumtree.MessageValidator;
+import org.apache.tuweni.plumtree.Peer;
+import org.apache.tuweni.plumtree.PeerRepository;
+import org.apache.tuweni.plumtree.State;
+
+import java.io.IOException;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.vertx.core.Vertx;
+import io.vertx.core.buffer.Buffer;
+import io.vertx.core.net.NetClient;
+import io.vertx.core.net.NetServer;
+
+/**
+ * Vert.x implementation of the plumtree gossip.
+ *
+ * This implementation is provided as an example and relies on a simplistic JSON serialization of messages.
+ *
+ */
+public final class VertxGossipServer {
+
+  private static final ObjectMapper mapper = new ObjectMapper();
+
+  private static final class Message {
+
+    public MessageSender.Verb verb;
+    public String payload;
+  }
+  private final class SocketHandler {
+
+    private final Peer peer;
+
+    SocketHandler(Peer peer) {
+      this.peer = peer;
+      state.addPeer(peer);
+    }
+
+    private Bytes buffer = Bytes.EMPTY;
+
+    void handle(Buffer data) {
+      buffer = Bytes.concatenate(buffer, Bytes.wrapBuffer(data));
+      Message message;
+      try {
+        JsonParser parser = mapper.getFactory().createParser(buffer.toArrayUnsafe());
+        message = parser.readValueAs(Message.class);
+        buffer = buffer.slice((int) parser.getCurrentLocation().getByteOffset());
+      } catch (IOException e) {
+        return;
+      }
+
+      switch (message.verb) {
+        case IHAVE:
+          state.receiveIHaveMessage(peer, Bytes.fromHexString(message.payload));
+          break;
+        case GOSSIP:
+          state.receiveGossipMessage(peer, Bytes.fromHexString(message.payload));
+          break;
+        case GRAFT:
+          state.receiveGraftMessage(peer, Bytes.fromHexString(message.payload));
+          break;
+        case PRUNE:
+          state.receivePruneMessage(peer);
+          break;
+      }
+    }
+
+    void close(Void aVoid) {
+      state.removePeer(peer);
+    }
+  }
+
+  private final AtomicBoolean started = new AtomicBoolean(false);
+  private final Vertx vertx;
+  private final int port;
+  private final MessageHashing messageHashing;
+  private final String networkInterface;
+  private final PeerRepository peerRepository;
+  private final Consumer<Bytes> payloadListener;
+  private final MessageValidator payloadValidator;
+  private State state;
+  private NetServer server;
+  private NetClient client;
+
+  public VertxGossipServer(
+      Vertx vertx,
+      String networkInterface,
+      int port,
+      MessageHashing messageHashing,
+      PeerRepository peerRepository,
+      Consumer<Bytes> payloadListener,
+      MessageValidator payloadValidator) {
+    this.vertx = vertx;
+    this.networkInterface = networkInterface;
+    this.port = port;
+    this.messageHashing = messageHashing;
+    this.peerRepository = peerRepository;
+    this.payloadListener = payloadListener;
+    this.payloadValidator = payloadValidator;
+  }
+
+  public AsyncCompletion start() {
+    if (started.compareAndSet(false, true)) {
+      CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+      server = vertx.createNetServer();
+      client = vertx.createNetClient();
+      server.connectHandler(socket -> {
+        Peer peer = new SocketPeer(socket);
+        SocketHandler handler = new SocketHandler(peer);
+        socket.handler(handler::handle).closeHandler(handler::close);
+      });
+      server.listen(port, networkInterface, res -> {
+        if (res.failed()) {
+          completion.completeExceptionally(res.cause());
+        } else {
+          state = new State(peerRepository, messageHashing, (verb, peer, payload) -> {
+            Message message = new Message();
+            message.verb = verb;
+            message.payload = payload == null ? null : payload.toHexString();
+            try {
+              ((SocketPeer) peer).socket().write(Buffer.buffer(mapper.writeValueAsBytes(message)));
+            } catch (JsonProcessingException e) {
+              throw new RuntimeException(e);
+            }
+          }, payloadListener, payloadValidator);
+
+          completion.complete();
+        }
+      });
+
+      return completion;
+    } else {
+      return AsyncCompletion.completed();
+    }
+  }
+
+  public AsyncCompletion stop() {
+    if (started.compareAndSet(true, false)) {
+      CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+
+      state.stop();
+      client.close();
+      server.close(res -> {
+        if (res.failed()) {
+          completion.completeExceptionally(res.cause());
+        } else {
+          completion.complete();
+        }
+      });
+
+      return completion;
+    }
+    return AsyncCompletion.completed();
+  }
+
+  public AsyncCompletion connectTo(String host, int port) {
+    if (!started.get()) {
+      throw new IllegalStateException("Server has not started");
+    }
+    CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
+    client.connect(port, host, res -> {
+      if (res.failed()) {
+        completion.completeExceptionally(res.cause());
+      } else {
+        completion.complete();
+        Peer peer = new SocketPeer(res.result());
+        SocketHandler handler = new SocketHandler(peer);
+        res.result().handler(handler::handle).closeHandler(handler::close);
+      }
+    });
+
+    return completion;
+  }
+
+  /**
+   * Gossip a message to all known peers.
+   *
+   * @param message the payload to propagate
+   */
+  public void gossip(Bytes message) {
+    if (!started.get()) {
+      throw new IllegalStateException("Server has not started");
+    }
+    state.sendGossipMessage(message);
+  }
+}
diff --git a/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java b/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java
index ef4cade..3dfb206 100644
--- a/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java
+++ b/plumtree/src/test/java/org/apache/tuweni/plumtree/StateTest.java
@@ -21,12 +21,18 @@ import org.apache.tuweni.bytes.Bytes32;
 import org.apache.tuweni.crypto.Hash;
 import org.apache.tuweni.junit.BouncyCastleExtension;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
 @ExtendWith(BouncyCastleExtension.class)
 class StateTest {
 
+  private static class PeerImpl implements Peer {
+
+  }
+
   private static class MockMessageSender implements MessageSender {
 
     Verb verb;
@@ -42,10 +48,12 @@ class StateTest {
     }
   }
 
+  private static final AtomicReference<Bytes> messageRef = new AtomicReference<>();
+
   @Test
   void testInitialState() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
-    State state = new State(repo, Hash::keccak256, new MockMessageSender());
+    State state = new State(repo, Hash::keccak256, new MockMessageSender(), messageRef::set, (message, peer) -> true);
     assertTrue(repo.peers().isEmpty());
     assertTrue(repo.lazyPushPeers().isEmpty());
     assertTrue(repo.eagerPushPeers().isEmpty());
@@ -54,10 +62,10 @@ class StateTest {
   @Test
   void firstRoundWithThreePeers() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
-    State state = new State(repo, Hash::keccak256, new MockMessageSender());
-    state.addPeer(new Peer());
-    state.addPeer(new Peer());
-    state.addPeer(new Peer());
+    State state = new State(repo, Hash::keccak256, new MockMessageSender(), messageRef::set, (message, peer) -> true);
+    state.addPeer(new PeerImpl());
+    state.addPeer(new PeerImpl());
+    state.addPeer(new PeerImpl());
     assertTrue(repo.lazyPushPeers().isEmpty());
     assertEquals(3, repo.eagerPushPeers().size());
   }
@@ -65,8 +73,8 @@ class StateTest {
   @Test
   void removePeer() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
-    State state = new State(repo, Hash::keccak256, new MockMessageSender());
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, new MockMessageSender(), messageRef::set, (message, peer) -> true);
+    Peer peer = new PeerImpl();
     state.addPeer(peer);
     state.removePeer(peer);
     assertTrue(repo.peers().isEmpty());
@@ -77,8 +85,8 @@ class StateTest {
   @Test
   void prunePeer() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
-    State state = new State(repo, Hash::keccak256, new MockMessageSender());
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, new MockMessageSender(), messageRef::set, (message, peer) -> true);
+    Peer peer = new PeerImpl();
     state.addPeer(peer);
     state.receivePruneMessage(peer);
     assertEquals(0, repo.eagerPushPeers().size());
@@ -88,8 +96,8 @@ class StateTest {
   @Test
   void graftPeer() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
-    State state = new State(repo, Hash::keccak256, new MockMessageSender());
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, new MockMessageSender(), messageRef::set, (message, peer) -> true);
+    Peer peer = new PeerImpl();
     state.addPeer(peer);
     state.receivePruneMessage(peer);
     assertEquals(0, repo.eagerPushPeers().size());
@@ -103,13 +111,13 @@ class StateTest {
   void receiveFullMessageFromEagerPeer() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
     MockMessageSender messageSender = new MockMessageSender();
-    State state = new State(repo, Hash::keccak256, messageSender);
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, messageSender, messageRef::set, (message, peer) -> true);
+    Peer peer = new PeerImpl();
     state.addPeer(peer);
-    Peer otherPeer = new Peer();
+    Peer otherPeer = new PeerImpl();
     state.addPeer(otherPeer);
     Bytes32 msg = Bytes32.random();
-    state.receiveFullMessage(peer, msg);
+    state.receiveGossipMessage(peer, msg);
     assertEquals(msg, messageSender.payload);
     assertEquals(otherPeer, messageSender.peer);
   }
@@ -118,16 +126,16 @@ class StateTest {
   void receiveFullMessageFromEagerPeerWithALazyPeer() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
     MockMessageSender messageSender = new MockMessageSender();
-    State state = new State(repo, Hash::keccak256, messageSender);
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, messageSender, messageRef::set, (message, peer) -> true);
+    Peer peer = new PeerImpl();
     state.addPeer(peer);
-    Peer otherPeer = new Peer();
+    Peer otherPeer = new PeerImpl();
     state.addPeer(otherPeer);
     Bytes32 msg = Bytes32.random();
-    Peer lazyPeer = new Peer();
+    Peer lazyPeer = new PeerImpl();
     state.addPeer(lazyPeer);
     repo.moveToLazy(lazyPeer);
-    state.receiveFullMessage(peer, msg);
+    state.receiveGossipMessage(peer, msg);
     assertEquals(msg, messageSender.payload);
     assertEquals(otherPeer, messageSender.peer);
     state.processQueue();
@@ -140,15 +148,15 @@ class StateTest {
   void receiveFullMessageFromEagerPeerThenPartialMessageFromLazyPeer() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
     MockMessageSender messageSender = new MockMessageSender();
-    State state = new State(repo, Hash::keccak256, messageSender);
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, messageSender, messageRef::set, (message, peer) -> true);
+    Peer peer = new PeerImpl();
     state.addPeer(peer);
-    Peer lazyPeer = new Peer();
+    Peer lazyPeer = new PeerImpl();
     state.addPeer(lazyPeer);
     repo.moveToLazy(lazyPeer);
     Bytes message = Bytes32.random();
-    state.receiveFullMessage(peer, message);
-    state.receiveHeaderMessage(lazyPeer, message);
+    state.receiveGossipMessage(peer, message);
+    state.receiveIHaveMessage(lazyPeer, message);
     assertNull(messageSender.payload);
     assertNull(messageSender.peer);
   }
@@ -157,14 +165,14 @@ class StateTest {
   void receivePartialMessageFromLazyPeerAndNoFullMessage() throws Exception {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
     MockMessageSender messageSender = new MockMessageSender();
-    State state = new State(repo, Hash::keccak256, messageSender, 100, 4000);
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, messageSender, messageRef::set, (message, peer) -> true, 100, 4000);
+    Peer peer = new PeerImpl();
     state.addPeer(peer);
-    Peer lazyPeer = new Peer();
+    Peer lazyPeer = new PeerImpl();
     state.addPeer(lazyPeer);
     repo.moveToLazy(lazyPeer);
     Bytes message = Bytes32.random();
-    state.receiveHeaderMessage(lazyPeer, message);
+    state.receiveIHaveMessage(lazyPeer, message);
     Thread.sleep(200);
     assertEquals(message, messageSender.payload);
     assertEquals(lazyPeer, messageSender.peer);
@@ -175,16 +183,16 @@ class StateTest {
   void receivePartialMessageFromLazyPeerAndThenFullMessage() throws Exception {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
     MockMessageSender messageSender = new MockMessageSender();
-    State state = new State(repo, Hash::keccak256, messageSender, 500, 4000);
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, messageSender, messageRef::set, (message, peer) -> true, 500, 4000);
+    Peer peer = new PeerImpl();
     state.addPeer(peer);
-    Peer lazyPeer = new Peer();
+    Peer lazyPeer = new PeerImpl();
     state.addPeer(lazyPeer);
     repo.moveToLazy(lazyPeer);
     Bytes message = Bytes32.random();
-    state.receiveHeaderMessage(lazyPeer, Hash.keccak256(message));
+    state.receiveIHaveMessage(lazyPeer, Hash.keccak256(message));
     Thread.sleep(100);
-    state.receiveFullMessage(peer, message);
+    state.receiveGossipMessage(peer, message);
     Thread.sleep(500);
     assertNull(messageSender.verb);
     assertNull(messageSender.payload);
@@ -195,10 +203,10 @@ class StateTest {
   void receiveFullMessageFromUnknownPeer() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
     MockMessageSender messageSender = new MockMessageSender();
-    State state = new State(repo, Hash::keccak256, messageSender);
-    Peer peer = new Peer();
+    State state = new State(repo, Hash::keccak256, messageSender, messageRef::set, (message, peer) -> true);
+    Peer peer = new PeerImpl();
     Bytes message = Bytes32.random();
-    state.receiveFullMessage(peer, message);
+    state.receiveGossipMessage(peer, message);
     assertEquals(1, repo.eagerPushPeers().size());
     assertEquals(0, repo.lazyPushPeers().size());
     assertEquals(peer, repo.eagerPushPeers().iterator().next());
@@ -208,12 +216,12 @@ class StateTest {
   void prunePeerWhenReceivingTwiceTheSameFullMessage() {
     EphemeralPeerRepository repo = new EphemeralPeerRepository();
     MockMessageSender messageSender = new MockMessageSender();
-    State state = new State(repo, Hash::keccak256, messageSender);
-    Peer peer = new Peer();
-    Peer secondPeer = new Peer();
+    State state = new State(repo, Hash::keccak256, messageSender, messageRef::set, (message, peer) -> true);
+    Peer peer = new PeerImpl();
+    Peer secondPeer = new PeerImpl();
     Bytes message = Bytes32.random();
-    state.receiveFullMessage(peer, message);
-    state.receiveFullMessage(secondPeer, message);
+    state.receiveGossipMessage(peer, message);
+    state.receiveGossipMessage(secondPeer, message);
     assertEquals(1, repo.eagerPushPeers().size());
     assertEquals(1, repo.lazyPushPeers().size());
     assertNull(messageSender.payload);
diff --git a/plumtree/src/test/java/org/apache/tuweni/plumtree/vertx/VertxGossipServerTest.java b/plumtree/src/test/java/org/apache/tuweni/plumtree/vertx/VertxGossipServerTest.java
new file mode 100644
index 0000000..f465afb
--- /dev/null
+++ b/plumtree/src/test/java/org/apache/tuweni/plumtree/vertx/VertxGossipServerTest.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.tuweni.plumtree.vertx;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.apache.tuweni.bytes.Bytes;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
+import org.apache.tuweni.plumtree.EphemeralPeerRepository;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+import io.vertx.core.Vertx;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+@ExtendWith(VertxExtension.class)
+class VertxGossipServerTest {
+
+  @Test
+  void gossipDeadBeefToOtherNode(@VertxInstance Vertx vertx) throws Exception {
+
+    AtomicReference<Bytes> messageReceived1 = new AtomicReference<>();
+    AtomicReference<Bytes> messageReceived2 = new AtomicReference<>();
+
+    VertxGossipServer server1 = new VertxGossipServer(
+        vertx,
+        "127.0.0.1",
+        10000,
+        bytes -> bytes,
+        new EphemeralPeerRepository(),
+        messageReceived1::set,
+        (message, peer) -> true);
+    VertxGossipServer server2 = new VertxGossipServer(
+        vertx,
+        "127.0.0.1",
+        10001,
+        bytes -> bytes,
+        new EphemeralPeerRepository(),
+        messageReceived2::set,
+        (message, peer) -> true);
+
+    server1.start().join();
+    server2.start().join();
+
+    server1.connectTo("127.0.0.1", 10001).join();
+    server1.gossip(Bytes.fromHexString("deadbeef"));
+    Thread.sleep(1000);
+    assertEquals(Bytes.fromHexString("deadbeef"), messageReceived2.get());
+
+    server1.stop().join();
+    server2.stop().join();
+  }
+
+  @Test
+  void gossipDeadBeefToTwoOtherNodes(@VertxInstance Vertx vertx) throws Exception {
+
+    AtomicReference<Bytes> messageReceived1 = new AtomicReference<>();
+    AtomicReference<Bytes> messageReceived2 = new AtomicReference<>();
+    AtomicReference<Bytes> messageReceived3 = new AtomicReference<>();
+
+    VertxGossipServer server1 = new VertxGossipServer(
+        vertx,
+        "127.0.0.1",
+        10000,
+        bytes -> bytes,
+        new EphemeralPeerRepository(),
+        messageReceived1::set,
+        (message, peer) -> true);
+    VertxGossipServer server2 = new VertxGossipServer(
+        vertx,
+        "127.0.0.1",
+        10001,
+        bytes -> bytes,
+        new EphemeralPeerRepository(),
+        messageReceived2::set,
+        (message, peer) -> true);
+    VertxGossipServer server3 = new VertxGossipServer(
+        vertx,
+        "127.0.0.1",
+        10002,
+        bytes -> bytes,
+        new EphemeralPeerRepository(),
+        messageReceived3::set,
+        (message, peer) -> true);
+
+    server1.start().join();
+    server2.start().join();
+    server3.start().join();
+
+    server1.connectTo("127.0.0.1", 10001).join();
+    server3.connectTo("127.0.0.1", 10001).join();
+    server1.gossip(Bytes.fromHexString("deadbeef"));
+    Thread.sleep(1000);
+    assertEquals(Bytes.fromHexString("deadbeef"), messageReceived2.get());
+    assertEquals(Bytes.fromHexString("deadbeef"), messageReceived3.get());
+
+    server1.stop().join();
+    server2.stop().join();
+  }
+
+  @Test
+  void gossipCollision(@VertxInstance Vertx vertx) throws Exception {
+    AtomicReference<Bytes> messageReceived1 = new AtomicReference<>();
+    AtomicReference<Bytes> messageReceived2 = new AtomicReference<>();
+
+    EphemeralPeerRepository peerRepository1 = new EphemeralPeerRepository();
+    EphemeralPeerRepository peerRepository3 = new EphemeralPeerRepository();
+
+    VertxGossipServer server1 = new VertxGossipServer(
+        vertx,
+        "127.0.0.1",
+        10000,
+        bytes -> bytes,
+        peerRepository1,
+        messageReceived1::set,
+        (message, peer) -> true);
+    VertxGossipServer server2 = new VertxGossipServer(
+        vertx,
+        "127.0.0.1",
+        10001,
+        bytes -> bytes,
+        new EphemeralPeerRepository(),
+        messageReceived2::set,
+        (message, peer) -> true);
+    VertxGossipServer server3 = new VertxGossipServer(
+        vertx,
+        "127.0.0.1",
+        10002,
+        bytes -> bytes,
+        peerRepository3,
+        messageReceived2::set,
+        (message, peer) -> true);
+
+    server1.start().join();
+    server2.start().join();
+    server3.start().join();
+
+    server1.connectTo("127.0.0.1", 10001).join();
+    server2.connectTo("127.0.0.1", 10002).join();
+    server1.connectTo("127.0.0.1", 10002).join();
+    server1.gossip(Bytes.fromHexString("deadbeef"));
+    Thread.sleep(1000);
+    assertEquals(Bytes.fromHexString("deadbeef"), messageReceived2.get());
+    Thread.sleep(1000);
+
+    assertTrue(peerRepository1.lazyPushPeers().size() == 1 || peerRepository3.lazyPushPeers().size() == 1);
+
+    server1.stop().join();
+    server2.stop().join();
+    server3.stop().join();
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org