Skip to content

Commit

Permalink
Added object classes for deposit fields
Browse files Browse the repository at this point in the history
  • Loading branch information
ensi321 committed Feb 19, 2023
1 parent 8bd8857 commit f39bb57
Show file tree
Hide file tree
Showing 11 changed files with 357 additions and 43 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/*
* Copyright contributors to Hyperledger Besu
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 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.
*
* SPDX-License-Identifier: Apache-2.0
*/
package org.hyperledger.besu.datatypes;

import com.fasterxml.jackson.annotation.JsonCreator;
import org.apache.tuweni.bytes.Bytes;
import org.apache.tuweni.bytes.DelegatingBytes;
import org.hyperledger.besu.ethereum.rlp.RLPException;
import org.hyperledger.besu.ethereum.rlp.RLPInput;

import static com.google.common.base.Preconditions.checkArgument;

/** A BLS public key. */
public class BLSPublicKey extends DelegatingBytes implements org.hyperledger.besu.plugin.data.PublicKey {

/** The constant SIZE. */
public static final int SIZE = 48;

/**
* Instantiates a new BLSPublicKey.
*
* @param bytes the bytes
*/
protected BLSPublicKey(final Bytes bytes) {
super(bytes);
}

/**
* Wrap public key.
*
* @param value the value
* @return the BLS public key
*/
public static BLSPublicKey wrap(final Bytes value) {
checkArgument(
value.size() == SIZE,
"A BLS public key must be %s bytes long, got %s",
SIZE,
value.size());
return new BLSPublicKey(value);
}

/**
* Creates a bls public key from the given RLP-encoded input.
*
* @param input The input to read from
* @return the input's corresponding public key
*/
public static BLSPublicKey readFrom(final RLPInput input) {
final Bytes bytes = input.readBytes();
if (bytes.size() != SIZE) {
throw new RLPException(
String.format("BLSPublicKey unexpected size of %s (needs %s)", bytes.size(), SIZE));
}
return BLSPublicKey.wrap(bytes);
}

/**
* Parse a hexadecimal string representing an public key.
*
* @param str A hexadecimal string (with or without the leading '0x') representing a valid bls public key.
* @return The parsed bls public key: {@code null} if the provided string is {@code null}.
* @throws IllegalArgumentException if the string is either not hexadecimal, or not the valid
* representation of a BLSPublicKey.
*/
@JsonCreator
public static BLSPublicKey fromHexString(final String str) {
if (str == null) return null;
return wrap(Bytes.fromHexStringLenient(str, SIZE));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/*
* Copyright contributors to Hyperledger Besu
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 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.
*
* SPDX-License-Identifier: Apache-2.0
*/
package org.hyperledger.besu.datatypes;

import com.fasterxml.jackson.annotation.JsonCreator;
import org.apache.tuweni.bytes.Bytes;
import org.apache.tuweni.bytes.DelegatingBytes;
import org.hyperledger.besu.ethereum.rlp.RLPException;
import org.hyperledger.besu.ethereum.rlp.RLPInput;

import static com.google.common.base.Preconditions.checkArgument;

/** A BLS Signature **/
public class BLSSignature extends DelegatingBytes implements org.hyperledger.besu.plugin.data.Signature {

/** The constant SIZE. */
public static final int SIZE = 96;

/**
* Instantiates a new BLSSignature.
*
* @param bytes the bytes
*/
protected BLSSignature(final Bytes bytes) {
super(bytes);
}

/**
* Wrap signature.
*
* @param value the value
* @return the signature
*/
public static BLSSignature wrap(final Bytes value) {
checkArgument(
value.size() == SIZE,
"A signature must be %s bytes long, got %s",
SIZE,
value.size());
return new BLSSignature(value);
}

/**
* Creates a signature from the given RLP-encoded input.
*
* @param input The input to read from
* @return the input's corresponding signature
*/
public static BLSSignature readFrom(final RLPInput input) {
final Bytes bytes = input.readBytes();
if (bytes.size() != SIZE) {
throw new RLPException(
String.format("BLSSignature unexpected size of %s (needs %s)", bytes.size(), SIZE));
}
return BLSSignature.wrap(bytes);
}

/**
* Parse a hexadecimal string representing a signature.
*
* @param str A hexadecimal string (with or without the leading '0x') representing a valid bls signature.
* @return The parsed signature: {@code null} if the provided string is {@code null}.
* @throws IllegalArgumentException if the string is either not hexadecimal, or not the valid
* representation of a bls signature.
*/
@JsonCreator
public static BLSSignature fromHexString(final String str) {
if (str == null) return null;
return wrap(Bytes.fromHexStringLenient(str, SIZE));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/*
* Copyright contributors to Hyperledger Besu
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 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.
*
* SPDX-License-Identifier: Apache-2.0
*/
package org.hyperledger.besu.datatypes;

import com.fasterxml.jackson.annotation.JsonCreator;
import org.apache.tuweni.bytes.Bytes;
import org.apache.tuweni.bytes.DelegatingBytes;
import org.hyperledger.besu.ethereum.rlp.RLPException;
import org.hyperledger.besu.ethereum.rlp.RLPInput;

import static com.google.common.base.Preconditions.checkArgument;

/** A withdrawal credential of a Deposit. */
public class WithdrawalCredential extends DelegatingBytes implements org.hyperledger.besu.plugin.data.WithdrawalCredential {

/** The constant SIZE. */
public static final int SIZE = 32;

/**
* Instantiates a new WIthdrawalCredential.
*
* @param bytes the bytes
*/
protected WithdrawalCredential(final Bytes bytes) {
super(bytes);
}

/**
* Wrap withdrawal crednetial.
*
* @param value the value
* @return the withdrawal credential
*/
public static WithdrawalCredential wrap(final Bytes value) {
checkArgument(
value.size() == SIZE,
"A withdrawal credential must be %s bytes long, got %s",
SIZE,
value.size());
return new WithdrawalCredential(value);
}

/**
* Creates an withdrawal credential from the given RLP-encoded input.
*
* @param input The input to read from
* @return the input's corresponding withdrawal credential
*/
public static WithdrawalCredential readFrom(final RLPInput input) {
final Bytes bytes = input.readBytes();
if (bytes.size() != SIZE) {
throw new RLPException(
String.format("Withdrawal credential unexpected size of %s (needs %s)", bytes.size(), SIZE));
}
return WithdrawalCredential.wrap(bytes);
}

/**
* Parse a hexadecimal string representing a withdrawal credential.
*
* @param str A hexadecimal string (with or without the leading '0x') representing a valid withdrawal credential.
* @return The parsed withdrawal credential: {@code null} if the provided string is {@code null}.
* @throws IllegalArgumentException if the string is either not hexadecimal, or not the valid
* representation of a withdrawal credential.
*/
@JsonCreator
public static WithdrawalCredential fromHexString(final String str) {
if (str == null) return null;
return wrap(Bytes.fromHexStringLenient(str, SIZE));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,17 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import io.vertx.core.json.JsonObject;
import org.apache.tuweni.units.bigints.UInt64;
import org.hyperledger.besu.datatypes.Address;
import org.hyperledger.besu.datatypes.BLSPublicKey;
import org.hyperledger.besu.datatypes.BLSSignature;
import org.hyperledger.besu.datatypes.GWei;
import org.hyperledger.besu.ethereum.core.Withdrawal;
import org.hyperledger.besu.datatypes.WithdrawalCredential;
import org.hyperledger.besu.ethereum.core.Deposit;

import java.util.Objects;

public class DepositParameter {

private final String pubKey;
private final String publicKey;

private final String withdrawalCredentials;
private final String amount;
Expand All @@ -43,7 +44,7 @@ public DepositParameter(
@JsonProperty("amount") final String amount,
@JsonProperty("signature") final String signature,
@JsonProperty("index") final String index) {
this.pubKey = pubKey;
this.publicKey = pubKey;
this.withdrawalCredentials = withdrawalCredentials;
this.amount = amount;
this.signature = signature;
Expand All @@ -52,36 +53,35 @@ public DepositParameter(

public static DepositParameter fromDeposit(final Deposit deposit) {
return new DepositParameter(
deposit.getPubKey().toString(), //TODO
deposit.getPublicKey().toString(),
deposit.getWithdrawalCredentials().toString(),
deposit.getAmount().toShortHexString(),
deposit.getSignature().toString(),
deposit.getIndex().toBytes().toQuantityHexString()
);
}

//TODO
public Deposit toDeposit() {
return new Deposit(
pubKey,
withdrawalCredentials,
BLSPublicKey.fromHexString(publicKey),
WithdrawalCredential.fromHexString(withdrawalCredentials),
GWei.fromHexString(amount),
signature,
BLSSignature.fromHexString(signature),
UInt64.fromHexString(index));
}

public JsonObject asJsonObject() {
return new JsonObject()
.put("pubKey", pubKey)
.put("pubKey", publicKey)
.put("withdrawalCredentials", withdrawalCredentials)
.put("amount", amount)
.put("signature", signature)
.put("index", index);
}

@JsonGetter
public String getPubKey() {
return pubKey;
public String getPublicKey() {
return publicKey;
}

@JsonGetter
Expand Down Expand Up @@ -109,7 +109,7 @@ public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final DepositParameter that = (DepositParameter) o;
return Objects.equals(pubKey, that.pubKey)
return Objects.equals(publicKey, that.publicKey)
&& Objects.equals(withdrawalCredentials, that.withdrawalCredentials)
&& Objects.equals(amount, that.amount)
&& Objects.equals(signature, that.signature)
Expand All @@ -118,13 +118,13 @@ public boolean equals(final Object o) {

@Override
public int hashCode() {
return Objects.hash(pubKey, withdrawalCredentials, amount, signature, index);
return Objects.hash(publicKey, withdrawalCredentials, amount, signature, index);
}

@Override
public String toString() {
return "DepositParameter{" +
"pubKey='" + pubKey + '\'' +
"pubKey='" + publicKey + '\'' +
", withdrawalCredentials='" + withdrawalCredentials + '\'' +
", amount='" + amount + '\'' +
", signature='" + signature + '\'' +
Expand Down
Loading

0 comments on commit f39bb57

Please sign in to comment.