mirror of https://github.com/hyperledger/besu
PIE-1792: Added chainId validation to PrivateTransactionValidator (#1741)
* PIE-1792: Added chainId validation to PrivateTransactionValidator Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>pull/2/head
parent
46eb7ef590
commit
d215ff5acf
@ -0,0 +1,139 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2018 ConsenSys AG. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 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 tech.pegasys.pantheon.ethereum.core; |
||||||
|
|
||||||
|
import tech.pegasys.pantheon.crypto.SECP256K1.KeyPair; |
||||||
|
import tech.pegasys.pantheon.ethereum.privacy.PrivateTransaction; |
||||||
|
import tech.pegasys.pantheon.ethereum.privacy.Restriction; |
||||||
|
import tech.pegasys.pantheon.util.bytes.BytesValue; |
||||||
|
import tech.pegasys.pantheon.util.bytes.BytesValues; |
||||||
|
|
||||||
|
import java.math.BigInteger; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Optional; |
||||||
|
|
||||||
|
import com.google.common.collect.Lists; |
||||||
|
|
||||||
|
public class PrivateTransactionTestFixture { |
||||||
|
|
||||||
|
private long nonce = 0; |
||||||
|
|
||||||
|
private Wei gasPrice = Wei.of(5); |
||||||
|
|
||||||
|
private long gasLimit = 5000; |
||||||
|
|
||||||
|
private Optional<Address> to = Optional.empty(); |
||||||
|
private Address sender = Address.fromHexString(String.format("%020x", 1)); |
||||||
|
|
||||||
|
private Wei value = Wei.of(4); |
||||||
|
|
||||||
|
private BytesValue payload = BytesValue.EMPTY; |
||||||
|
|
||||||
|
private Optional<BigInteger> chainId = Optional.of(BigInteger.valueOf(2018)); |
||||||
|
|
||||||
|
private BytesValue privateFrom = |
||||||
|
BytesValues.fromBase64("A1aVtMxLCUHmBVHXoZzzBgPbW/wj5axDpW9X8l91SGo="); |
||||||
|
|
||||||
|
private Optional<List<BytesValue>> privateFor = |
||||||
|
Optional.of( |
||||||
|
Lists.newArrayList( |
||||||
|
BytesValues.fromBase64("Ko2bVqD+nNlNYL5EE7y3IdOnviftjiizpjRt+HTuFBs="))); |
||||||
|
|
||||||
|
private Optional<BytesValue> privacyGroupId = Optional.empty(); |
||||||
|
|
||||||
|
private Restriction restriction = Restriction.RESTRICTED; |
||||||
|
|
||||||
|
public PrivateTransaction createTransaction(final KeyPair keys) { |
||||||
|
final PrivateTransaction.Builder builder = PrivateTransaction.builder(); |
||||||
|
builder |
||||||
|
.gasLimit(gasLimit) |
||||||
|
.gasPrice(gasPrice) |
||||||
|
.nonce(nonce) |
||||||
|
.payload(payload) |
||||||
|
.value(value) |
||||||
|
.sender(sender) |
||||||
|
.privateFrom(privateFrom) |
||||||
|
.restriction(restriction); |
||||||
|
|
||||||
|
to.ifPresent(builder::to); |
||||||
|
chainId.ifPresent(builder::chainId); |
||||||
|
|
||||||
|
if (privacyGroupId.isPresent()) { |
||||||
|
this.privacyGroupId(privacyGroupId.get()); |
||||||
|
} else { |
||||||
|
privateFor.ifPresent(builder::privateFor); |
||||||
|
} |
||||||
|
|
||||||
|
if (privacyGroupId.isEmpty() && privateFor.isEmpty()) { |
||||||
|
throw new IllegalArgumentException( |
||||||
|
"Private transaction needs a privacyGroupId or privateFor field"); |
||||||
|
} |
||||||
|
|
||||||
|
return builder.signAndBuild(keys); |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture nonce(final long nonce) { |
||||||
|
this.nonce = nonce; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture gasPrice(final Wei gasPrice) { |
||||||
|
this.gasPrice = gasPrice; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture gasLimit(final long gasLimit) { |
||||||
|
this.gasLimit = gasLimit; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture to(final Optional<Address> to) { |
||||||
|
this.to = to; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture sender(final Address sender) { |
||||||
|
this.sender = sender; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture value(final Wei value) { |
||||||
|
this.value = value; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture payload(final BytesValue payload) { |
||||||
|
this.payload = payload; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture chainId(final Optional<BigInteger> chainId) { |
||||||
|
this.chainId = chainId; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture privateFrom(final BytesValue privateFrom) { |
||||||
|
this.privateFrom = privateFrom; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture privateFor(final List<BytesValue> privateFor) { |
||||||
|
this.privateFor = Optional.of(privateFor); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public PrivateTransactionTestFixture privacyGroupId(final BytesValue privacyGroupId) { |
||||||
|
this.privacyGroupId = Optional.of(privacyGroupId); |
||||||
|
return this; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue