Skip to content

Commit

Permalink
Aligned with Besu OnChainPermissioning signature modified from 20.10.…
Browse files Browse the repository at this point in the history
…0 version
  • Loading branch information
alberto-hernandez committed Mar 16, 2021
1 parent 202dcc2 commit 79ded02
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 18 deletions.
30 changes: 22 additions & 8 deletions besu/src/main/java/org/web3j/protocol/besu/JsonRpc2_0Besu.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public class JsonRpc2_0Besu extends JsonRpc2_0Eea implements Besu {

private final JsonRpc2_0BesuRx besuRx;
private final long blockTime;
private final OnChainPrivacyTransactionBuilder onChainPrivacyTransactionBuilder;

public JsonRpc2_0Besu(final Web3jService web3jService) {
this(web3jService, DEFAULT_BLOCK_TIME, Async.defaultExecutorService());
Expand All @@ -73,9 +74,23 @@ public JsonRpc2_0Besu(
Web3jService web3jService,
long pollingInterval,
ScheduledExecutorService scheduledExecutorService) {
this(
web3jService,
pollingInterval,
scheduledExecutorService,
new OnChainPrivacyTransactionBuilder());
}

public JsonRpc2_0Besu(
Web3jService web3jService,
long pollingInterval,
ScheduledExecutorService scheduledExecutorService,
OnChainPrivacyTransactionBuilder onChainPrivacyTransactionBuilder) {
super(web3jService, pollingInterval, scheduledExecutorService);

this.besuRx = new JsonRpc2_0BesuRx(this, scheduledExecutorService);
this.blockTime = pollingInterval;
this.onChainPrivacyTransactionBuilder = onChainPrivacyTransactionBuilder;
}

@Override
Expand Down Expand Up @@ -261,7 +276,7 @@ public Request<?, EthSendTransaction> privOnChainSetGroupLockState(
lock ? "lock" : "unlock");

String lockPrivacyGroupTransactionPayload =
OnChainPrivacyTransactionBuilder.buildOnChainPrivateTransaction(
onChainPrivacyTransactionBuilder.buildOnChainPrivateTransaction(
privacyGroupId,
credentials,
enclaveKey,
Expand All @@ -287,7 +302,7 @@ public Request<?, EthSendTransaction> privOnChainAddToPrivacyGroup(
OnChainPrivacyTransactionBuilder.getEncodedSingleParamFunction("lock");

String lockPrivacyGroupTransactionPayload =
OnChainPrivacyTransactionBuilder.buildOnChainPrivateTransaction(
onChainPrivacyTransactionBuilder.buildOnChainPrivateTransaction(
privacyGroupId,
credentials,
enclaveKey,
Expand Down Expand Up @@ -327,11 +342,10 @@ public Request<?, EthSendTransaction> privOnChainCreatePrivacyGroup(
.send()
.getTransactionCount();
String addToContractCall =
OnChainPrivacyTransactionBuilder.getEncodedAddToGroupFunction(
enclaveKey, participantsAsBytes);
OnChainPrivacyTransactionBuilder.getEncodedAddToGroupFunction(participantsAsBytes);

String addToPrivacyGroupTransactionPayload =
OnChainPrivacyTransactionBuilder.buildOnChainPrivateTransaction(
onChainPrivacyTransactionBuilder.buildOnChainPrivateTransaction(
privacyGroupId,
credentials,
enclaveKey,
Expand All @@ -356,15 +370,15 @@ public Request<?, EthSendTransaction> privOnChainRemoveFromPrivacyGroup(
OnChainPrivacyTransactionBuilder.getEncodedRemoveFromGroupFunction(
enclaveKey, participant.raw());

String removeFromProupTransactionPayload =
OnChainPrivacyTransactionBuilder.buildOnChainPrivateTransaction(
String removeFromGroupTransactionPayload =
onChainPrivacyTransactionBuilder.buildOnChainPrivateTransaction(
privacyGroupId,
credentials,
enclaveKey,
transactionCount,
removeFromContractCall);

return eeaSendRawTransaction(removeFromProupTransactionPayload);
return eeaSendRawTransaction(removeFromGroupTransactionPayload);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,25 @@ public class OnChainPrivacyTransactionBuilder {

private static final BesuPrivacyGasProvider ZERO_GAS_PROVIDER =
new BesuPrivacyGasProvider(BigInteger.valueOf(0));
public static final String OnChainPrivacyPrecompiledContract =
"0x000000000000000000000000000000000000007c";

private final long chainId;
private final BesuPrivacyGasProvider gasProvider;
private final Restriction restriction;

public OnChainPrivacyTransactionBuilder(
final long chainId,
final BesuPrivacyGasProvider gasProvider,
final Restriction restriction) {
this.chainId = chainId;
this.gasProvider = gasProvider;
this.restriction = restriction;
}

public OnChainPrivacyTransactionBuilder() {
this(2018, ZERO_GAS_PROVIDER, Restriction.RESTRICTED);
}

public static String getEncodedRemoveFromGroupFunction(
Base64String enclaveKey, byte[] participant) {
Expand All @@ -45,13 +64,11 @@ public static String getEncodedRemoveFromGroupFunction(
return FunctionEncoder.encode(function);
}

public static String getEncodedAddToGroupFunction(
Base64String enclaveKey, List<byte[]> participants) {
public static String getEncodedAddToGroupFunction(List<byte[]> participants) {
final Function function =
new Function(
"addParticipants",
Arrays.asList(
new Bytes32(enclaveKey.raw()),
new DynamicArray<>(
Bytes32.class, Utils.typeMap(participants, Bytes32.class))),
Collections.emptyList());
Expand All @@ -64,25 +81,24 @@ public static String getEncodedSingleParamFunction(final String functionName) {
return FunctionEncoder.encode(function);
}

public static String buildOnChainPrivateTransaction(
public String buildOnChainPrivateTransaction(
Base64String privacyGroupId,
Credentials credentials,
Base64String enclaveKey,
final BigInteger nonce,
String call) {

RawPrivateTransaction rawTransaction =
RawPrivateTransaction.createTransaction(
nonce,
ZERO_GAS_PROVIDER.getGasPrice(),
ZERO_GAS_PROVIDER.getGasLimit(),
"0x000000000000000000000000000000000000007c",
gasProvider.getGasPrice(),
gasProvider.getGasLimit(),
OnChainPrivacyPrecompiledContract,
call,
enclaveKey,
privacyGroupId,
Restriction.RESTRICTED);
restriction);

return Numeric.toHexString(
PrivateTransactionEncoder.signMessage(rawTransaction, 2018, credentials));
PrivateTransactionEncoder.signMessage(rawTransaction, chainId, credentials));
}
}

0 comments on commit 79ded02

Please sign in to comment.