diff --git a/CHANGELOG.md b/CHANGELOG.md index 98ae3516e07..e9532112a38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## 22.7.1 +### Breaking Changes +- Flexible Privacy Groups support to Tessera's EC encryptor (contracts modified) [#4282](https://github.com/hyperledger/besu/pull/4282) + ### Additions and Improvements - Introduce a cap to reputation score increase [#4230](https://github.com/hyperledger/besu/pull/4230) - Add experimental CLI option for `--Xp2p-peer-lower-bound` [#4200](https://github.com/hyperledger/besu/pull/4200) diff --git a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/privacy/PrivacyNodeFactory.java b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/privacy/PrivacyNodeFactory.java index 0d96b6c3f2b..03188db8a27 100644 --- a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/privacy/PrivacyNodeFactory.java +++ b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/privacy/PrivacyNodeFactory.java @@ -19,6 +19,7 @@ import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationFactory; import org.hyperledger.besu.tests.acceptance.dsl.privacy.PrivacyNode; import org.hyperledger.besu.tests.acceptance.dsl.privacy.account.PrivacyAccount; +import org.hyperledger.enclave.testutil.EnclaveEncryptorType; import org.hyperledger.enclave.testutil.EnclaveKeyConfiguration; import org.hyperledger.enclave.testutil.EnclaveType; @@ -233,8 +234,11 @@ public PrivacyNode createFlexiblePrivacyGroupEnabledMinerNode( final BesuNodeConfigurationBuilder besuNodeConfigurationBuilder = new BesuNodeConfigurationBuilder(); if (multiTenancyEnabled) { - besuNodeConfigurationBuilder.jsonRpcAuthenticationConfiguration( - "authentication/auth_priv.toml"); + final String authPrivTomlPath = + EnclaveEncryptorType.EC.equals(privacyAccount.getEnclaveEncryptorType()) + ? "authentication/auth_priv_ec_pubkey.toml" + : "authentication/auth_priv.toml"; + besuNodeConfigurationBuilder.jsonRpcAuthenticationConfiguration(authPrivTomlPath); } return create( new PrivacyNodeConfiguration( @@ -252,7 +256,9 @@ public PrivacyNode createFlexiblePrivacyGroupEnabledMinerNode( .keyFilePath(privacyAccount.getPrivateKeyPath()) .build(), new EnclaveKeyConfiguration( - privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())), + privacyAccount.getEnclaveKeyPaths(), + privacyAccount.getEnclavePrivateKeyPaths(), + privacyAccount.getEnclaveEncryptorType())), enclaveType, containerNetwork); } @@ -279,7 +285,9 @@ public PrivacyNode createFlexiblePrivacyGroupEnabledNode( .webSocketEnabled() .build(), new EnclaveKeyConfiguration( - privacyAccount.getEnclaveKeyPaths(), privacyAccount.getEnclavePrivateKeyPaths())), + privacyAccount.getEnclaveKeyPaths(), + privacyAccount.getEnclavePrivateKeyPaths(), + privacyAccount.getEnclaveEncryptorType())), enclaveType, containerNetwork); } diff --git a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/transaction/privacy/PrivacyRequestFactory.java b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/transaction/privacy/PrivacyRequestFactory.java index 5aa58ff7c4e..056598a9d56 100644 --- a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/transaction/privacy/PrivacyRequestFactory.java +++ b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/transaction/privacy/PrivacyRequestFactory.java @@ -14,7 +14,6 @@ */ package org.hyperledger.besu.tests.acceptance.dsl.transaction.privacy; -import static com.google.common.base.Preconditions.checkArgument; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.hyperledger.besu.ethereum.core.PrivacyParameters.FLEXIBLE_PRIVACY_PROXY; @@ -41,6 +40,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import org.apache.tuweni.bytes.Bytes; +import org.web3j.abi.FunctionEncoder; +import org.web3j.abi.TypeReference; +import org.web3j.abi.Utils; +import org.web3j.abi.datatypes.Bool; +import org.web3j.abi.datatypes.DynamicArray; +import org.web3j.abi.datatypes.DynamicBytes; +import org.web3j.abi.datatypes.Function; +import org.web3j.abi.datatypes.Type; import org.web3j.crypto.Credentials; import org.web3j.protocol.Web3jService; import org.web3j.protocol.besu.Besu; @@ -102,8 +109,6 @@ public static class GetPrivacyPrecompileAddressResponse extends Response
{} - public static class JsonRpcSuccessResponseResponse extends Response {} - public static class CreatePrivacyGroupResponse extends Response {} public static class DeletePrivacyGroupResponse extends Response {} @@ -232,7 +237,13 @@ public String privxRemoveFromPrivacyGroup( } private Bytes encodeRemoveFromGroupFunctionCall(final Bytes toRemove) { - return Bytes.concatenate(FlexibleGroupManagement.REMOVE_PARTICIPANT_METHOD_SIGNATURE, toRemove); + final Function function = + new Function( + "removeParticipant", + Arrays.asList(new DynamicBytes(toRemove.toArrayUnsafe())), + Arrays.asList(new TypeReference() {})); + + return Bytes.fromHexString(FunctionEncoder.encode(function)); } public String privxLockPrivacyGroup( @@ -588,29 +599,19 @@ public String getTransactionHash() { } private Bytes encodeAddToGroupFunctionCall(final List participants) { - return Bytes.concatenate( - FlexibleGroupManagement.ADD_PARTICIPANTS_METHOD_SIGNATURE, encodeList(participants)); - } - - private Bytes encodeList(final List participants) { - final Bytes dynamicParameterOffset = encodeLong(32); - final Bytes length = encodeLong(participants.size()); - return Bytes.concatenate( - dynamicParameterOffset, - length, - Bytes.fromHexString( - participants.stream() - .map(Bytes::toUnprefixedHexString) - .collect(Collectors.joining("")))); - } - - // long to uint256, 8 bytes big endian, so left padded by 24 bytes - private static Bytes encodeLong(final long l) { - checkArgument(l >= 0, "Unsigned value must be positive"); - final byte[] longBytes = new byte[8]; - for (int i = 0; i < 8; i++) { - longBytes[i] = (byte) ((l >> ((7 - i) * 8)) & 0xFF); - } - return Bytes.concatenate(Bytes.wrap(new byte[24]), Bytes.wrap(longBytes)); + final Function function = + new Function( + "addParticipants", + Arrays.asList( + new DynamicArray<>( + DynamicBytes.class, + Utils.typeMap( + participants.stream() + .map(Bytes::toArrayUnsafe) + .collect(Collectors.toList()), + DynamicBytes.class))), + Collections.emptyList()); + + return Bytes.fromHexString(FunctionEncoder.encode(function)); } } diff --git a/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/FlexiblePrivacyAcceptanceTest.java b/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/FlexiblePrivacyAcceptanceTest.java index d64f73d2a03..3f32904ba76 100644 --- a/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/FlexiblePrivacyAcceptanceTest.java +++ b/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/FlexiblePrivacyAcceptanceTest.java @@ -17,6 +17,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.hyperledger.besu.ethereum.core.PrivacyParameters.FLEXIBLE_PRIVACY_PROXY; +import static org.hyperledger.enclave.testutil.EnclaveEncryptorType.EC; +import static org.hyperledger.enclave.testutil.EnclaveEncryptorType.NACL; +import static org.hyperledger.enclave.testutil.EnclaveType.TESSERA; import static org.junit.runners.Parameterized.Parameters; import org.hyperledger.besu.tests.acceptance.dsl.condition.eth.EthConditions; @@ -53,14 +56,21 @@ public class FlexiblePrivacyAcceptanceTest extends FlexiblePrivacyAcceptanceTestBase { private final EnclaveType enclaveType; + private final EnclaveEncryptorType enclaveEncryptorType; - public FlexiblePrivacyAcceptanceTest(final EnclaveType enclaveType) { + public FlexiblePrivacyAcceptanceTest( + final EnclaveType enclaveType, final EnclaveEncryptorType enclaveEncryptorType) { this.enclaveType = enclaveType; + this.enclaveEncryptorType = enclaveEncryptorType; } - @Parameters(name = "{0}") - public static Collection enclaveTypes() { - return EnclaveType.valuesForTests(); + @Parameters(name = "{0} enclave type with {1} encryptor") + public static Collection enclaveParameters() { + return Arrays.asList( + new Object[][] { + {TESSERA, NACL}, + {TESSERA, EC} + }); } private PrivacyNode alice; @@ -82,21 +92,21 @@ public void setUp() throws Exception { alice = privacyBesu.createFlexiblePrivacyGroupEnabledMinerNode( "node1", - PrivacyAccountResolver.ALICE.resolve(EnclaveEncryptorType.NACL), + PrivacyAccountResolver.ALICE.resolve(enclaveEncryptorType), false, enclaveType, Optional.of(containerNetwork)); bob = privacyBesu.createFlexiblePrivacyGroupEnabledNode( "node2", - PrivacyAccountResolver.BOB.resolve(EnclaveEncryptorType.NACL), + PrivacyAccountResolver.BOB.resolve(enclaveEncryptorType), false, enclaveType, Optional.of(containerNetwork)); charlie = privacyBesu.createFlexiblePrivacyGroupEnabledNode( "node3", - PrivacyAccountResolver.CHARLIE.resolve(EnclaveEncryptorType.NACL), + PrivacyAccountResolver.CHARLIE.resolve(enclaveEncryptorType), false, enclaveType, Optional.of(containerNetwork)); diff --git a/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/FlexiblePrivacyAcceptanceTestBase.java b/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/FlexiblePrivacyAcceptanceTestBase.java index 7dc2460f82e..9e4f1638dad 100644 --- a/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/FlexiblePrivacyAcceptanceTestBase.java +++ b/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/FlexiblePrivacyAcceptanceTestBase.java @@ -18,7 +18,6 @@ import static org.hyperledger.besu.ethereum.core.PrivacyParameters.FLEXIBLE_PRIVACY_PROXY; import static org.hyperledger.besu.ethereum.privacy.group.FlexibleGroupManagement.GET_PARTICIPANTS_METHOD_SIGNATURE; -import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.Quantity; import org.hyperledger.besu.tests.acceptance.dsl.privacy.PrivacyAcceptanceTestBase; import org.hyperledger.besu.tests.acceptance.dsl.privacy.PrivacyNode; import org.hyperledger.besu.tests.acceptance.dsl.privacy.condition.ExpectValidFlexiblePrivacyGroupCreated; @@ -32,6 +31,10 @@ import java.util.stream.Collectors; import org.apache.tuweni.bytes.Bytes; +import org.web3j.abi.FunctionEncoder; +import org.web3j.abi.Utils; +import org.web3j.abi.datatypes.DynamicArray; +import org.web3j.abi.datatypes.DynamicBytes; import org.web3j.protocol.besu.response.privacy.PrivateTransactionReceipt; import org.web3j.protocol.core.methods.response.TransactionReceipt; import org.web3j.tx.Contract; @@ -79,8 +82,7 @@ protected String createFlexiblePrivacyGroup( final String commitmentHash = callGetParticipantsMethodAndReturnCommitmentHash(privacyGroupId, groupCreator, privateFrom); final PrivateTransactionReceipt expectedReceipt = - buildExpectedAddMemberTransactionReceipt( - privacyGroupId, groupCreator, addresses.toArray(new String[] {})); + buildExpectedAddMemberTransactionReceipt(privacyGroupId, groupCreator, addresses); for (final PrivacyNode member : members) { member.verify( @@ -103,7 +105,7 @@ protected String callGetParticipantsMethodAndReturnCommitmentHash( } protected PrivateTransactionReceipt buildExpectedAddMemberTransactionReceipt( - final String privacyGroupId, final PrivacyNode groupCreator, final String[] members) { + final String privacyGroupId, final PrivacyNode groupCreator, final List members) { return buildExpectedAddMemberTransactionReceipt( privacyGroupId, groupCreator, groupCreator.getEnclaveKey(), members); } @@ -112,18 +114,26 @@ protected PrivateTransactionReceipt buildExpectedAddMemberTransactionReceipt( final String privacyGroupId, final PrivacyNode groupCreator, final String privateFrom, - final String[] members) { + final List members) { + final StringBuilder output = new StringBuilder(); // hex prefix output.append("0x"); - // Dynamic array offset - output.append("0000000000000000000000000000000000000000000000000000000000000020"); - // Length of the array (with padded zeros to the left) - output.append(Quantity.longToPaddedHex(members.length, 32).substring(2)); - // Each member enclave key converted from Base64 to bytes - for (final String member : members) { - output.append(Bytes.fromBase64String(member).toUnprefixedHexString()); - } + + final String encodedParameters = + FunctionEncoder.encode( + "", + Arrays.asList( + new DynamicArray<>( + DynamicBytes.class, + Utils.typeMap( + members.stream() + .map(Bytes::fromBase64String) + .map(Bytes::toArrayUnsafe) + .collect(Collectors.toList()), + DynamicBytes.class)))); + + output.append(encodedParameters); return new PrivateTransactionReceipt( null, diff --git a/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/multitenancy/FlexibleMultiTenancyAcceptanceTest.java b/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/multitenancy/FlexibleMultiTenancyAcceptanceTest.java index 7907c37a110..da692f21ba1 100644 --- a/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/multitenancy/FlexibleMultiTenancyAcceptanceTest.java +++ b/acceptance-tests/tests/src/test/java/org/hyperledger/besu/tests/acceptance/privacy/multitenancy/FlexibleMultiTenancyAcceptanceTest.java @@ -16,6 +16,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.hyperledger.enclave.testutil.EnclaveEncryptorType.EC; +import static org.hyperledger.enclave.testutil.EnclaveEncryptorType.NACL; +import static org.hyperledger.enclave.testutil.EnclaveType.TESSERA; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNode; @@ -32,6 +35,7 @@ import org.hyperledger.enclave.testutil.EnclaveType; import java.math.BigInteger; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -53,14 +57,21 @@ public class FlexibleMultiTenancyAcceptanceTest extends FlexiblePrivacyAcceptanceTestBase { private final EnclaveType enclaveType; + private final EnclaveEncryptorType enclaveEncryptorType; - public FlexibleMultiTenancyAcceptanceTest(final EnclaveType enclaveType) { + public FlexibleMultiTenancyAcceptanceTest( + final EnclaveType enclaveType, final EnclaveEncryptorType enclaveEncryptorType) { this.enclaveType = enclaveType; + this.enclaveEncryptorType = enclaveEncryptorType; } - @Parameterized.Parameters(name = "{0}") - public static Collection enclaveTypes() { - return EnclaveType.valuesForTests(); + @Parameterized.Parameters(name = "{0} enclave type with {1} encryptor") + public static Collection enclaveParameters() { + return Arrays.asList( + new Object[][] { + {TESSERA, NACL}, + {TESSERA, EC} + }); } private static final PermissioningTransactions permissioningTransactions = @@ -75,7 +86,7 @@ public void setUp() throws Exception { alice = privacyBesu.createFlexiblePrivacyGroupEnabledMinerNode( "node1", - PrivacyAccountResolver.MULTI_TENANCY.resolve(EnclaveEncryptorType.NACL), + PrivacyAccountResolver.MULTI_TENANCY.resolve(enclaveEncryptorType), true, enclaveType, Optional.empty()); @@ -448,7 +459,7 @@ private String createFlexiblePrivacyGroup(final MultiTenancyPrivacyGroup group) privacyGroupId, groupCreatorNode, groupCreatorTenant); final PrivateTransactionReceipt expectedReceipt = buildExpectedAddMemberTransactionReceipt( - privacyGroupId, groupCreatorNode, groupCreatorTenant, members.toArray(new String[] {})); + privacyGroupId, groupCreatorNode, groupCreatorTenant, members); for (final MultiTenancyPrivacyNode mtpn : multiTenancyPrivacyNodes) { final PrivacyNode privacyNode = mtpn.getPrivacyNode(); diff --git a/acceptance-tests/tests/src/test/resources/authentication/auth_priv_ec_pubkey.toml b/acceptance-tests/tests/src/test/resources/authentication/auth_priv_ec_pubkey.toml new file mode 100644 index 00000000000..291973d7ce7 --- /dev/null +++ b/acceptance-tests/tests/src/test/resources/authentication/auth_priv_ec_pubkey.toml @@ -0,0 +1,19 @@ +[Users.user] +password = "$2a$10$l3GA7K8g6rJ/Yv.YFSygCuI9byngpEzxgWS9qEg5emYDZomQW7fGC" +permissions = ["fakePermission", "*:*"] +privacyPublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES8nC4qT/KdoAoTSF3qs/47DUsDihyVbWiRjZAiyvqp9eSDkqV1RzlM+58oOwnpFRwvWNZM+AxMVxT+MvxdsqMA==" + +[Users.user2] +password = "$2a$10$0ikMUcSYugKmnXilimhc1eGNnfMRvKt2PxQJPo1oCemN16QL2NNo." +permissions = ["fakePermission", "*:*"] +privacyPublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXIgZqRA25V+3nN+Do6b5r0jiUunub6ubjPhqwHpPxP44uUYh9RKCQNRnsqCJ9PjeTnC8R3ieJk7HWAlycU1bug==" + +[Users.user3] +password = "$2a$10$Mydyzpul6CtgPRbUd6It2OpZDOfqOocpi6.UYhlyU5aphQHi1iQZq" +permissions = ["fakePermission", "*:*"] +privacyPublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFl85WnNPyzSEX+evc774xoqUQdjSnQMTE1uIyMOve+iVwjs6dUEUwz5teiKuUUf63a/qYe4n6SGnQ7HnmtDViQ==" + +[Users.failUser] +password = "$2a$10$l3GA7K8g6rJ/Yv.YFSygCuI9byngpEzxgWS9qEg5emYDZomQW7fGC" +permissions = ["fakePermission", "*:*"] +privacyPublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE30vyCv2v4EHwqnr0LEGaCX6GWfmYIIxLRw1PISeFsOk1tmY2hAYjEHkaZzu31SlFx0ickh10MEublBnrxCiJIA==" diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexiblePrivacyController.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexiblePrivacyController.java index df731e88399..595727752b5 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexiblePrivacyController.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexiblePrivacyController.java @@ -16,7 +16,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.hyperledger.besu.ethereum.core.PrivacyParameters.FLEXIBLE_PRIVACY_PROXY; -import static org.hyperledger.besu.ethereum.privacy.FlexiblePrivacyGroupContract.decodeList; import static org.hyperledger.besu.ethereum.privacy.group.FlexibleGroupManagement.GET_PARTICIPANTS_METHOD_SIGNATURE; import static org.hyperledger.besu.ethereum.privacy.group.FlexibleGroupManagement.GET_VERSION_METHOD_SIGNATURE; @@ -130,7 +129,11 @@ public Optional findPrivacyGroupByGroupId( if (rlpInput.nextSize() > 0) { return Optional.of( new PrivacyGroup( - privacyGroupId, PrivacyGroup.Type.FLEXIBLE, "", "", decodeList(rlpInput.raw()))); + privacyGroupId, + PrivacyGroup.Type.FLEXIBLE, + "", + "", + FlexibleUtil.decodeList(rlpInput.raw()))); } } return Optional.empty(); @@ -283,6 +286,7 @@ private Optional buildAndSendAddPayload( enclave.send(bytes.toBase64String(), privacyUserId, privateFor).getKey()); } } + return Optional.empty(); } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexiblePrivacyGroupContract.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexiblePrivacyGroupContract.java index 90b4d6c2403..6a1ce56f70a 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexiblePrivacyGroupContract.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexiblePrivacyGroupContract.java @@ -39,15 +39,12 @@ import org.hyperledger.besu.evm.worldstate.WorldUpdater; import org.hyperledger.besu.plugin.data.Restriction; -import java.util.ArrayList; -import java.util.List; import java.util.Optional; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import org.apache.tuweni.bytes.Bytes; import org.apache.tuweni.bytes.Bytes32; -import org.apache.tuweni.units.bigints.UInt256; /* This class is an abstraction on top of the privacy group management smart contract. @@ -67,6 +64,7 @@ that is not on a block boundary. Used this way, the object's lifetime is intended to be short. */ public class FlexiblePrivacyGroupContract { + @FunctionalInterface public interface TransactionSimulator { Optional simulate( @@ -167,7 +165,11 @@ private Optional readPrivacyGroupFromResult( if (rlpInput.nextSize() > 0) { final PrivacyGroup privacyGroup = new PrivacyGroup( - privacyGroupId, PrivacyGroup.Type.FLEXIBLE, "", "", decodeList(rlpInput.raw())); + privacyGroupId, + PrivacyGroup.Type.FLEXIBLE, + "", + "", + FlexibleUtil.decodeList(rlpInput.raw())); return Optional.of(privacyGroup); } else { return Optional.empty(); @@ -227,20 +229,4 @@ private CallParameter buildCallParams(final Bytes methodCall) { return new CallParameter( Address.ZERO, FLEXIBLE_PRIVACY_PROXY, 3000000, Wei.of(1000), Wei.ZERO, methodCall); } - - public static List decodeList(final Bytes rlpEncodedList) { - final ArrayList decodedElements = new ArrayList<>(); - // first 32 bytes is dynamic list offset - if (rlpEncodedList.size() < 64) return decodedElements; - // Bytes uses a byte[] for the content which can only have up to Integer.MAX_VALUE-5 elements - final int lengthOfList = - UInt256.fromBytes(rlpEncodedList.slice(32, 32)).toInt(); // length of list - if (rlpEncodedList.size() < 64 + lengthOfList * 32) return decodedElements; - - for (int i = 0; i < lengthOfList; ++i) { - decodedElements.add( - Bytes.wrap(rlpEncodedList.slice(64 + (32 * i), 32)).toBase64String()); // participant - } - return decodedElements; - } } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexibleUtil.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexibleUtil.java index ab3382b4815..a759394aff2 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexibleUtil.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/FlexibleUtil.java @@ -20,10 +20,12 @@ import org.hyperledger.besu.datatypes.Address; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Optional; import org.apache.tuweni.bytes.Bytes; +import org.apache.tuweni.units.bigints.UInt256; public class FlexibleUtil { @@ -40,11 +42,42 @@ public static boolean isGroupAdditionTransaction(final PrivateTransaction privat } public static List getParticipantsFromParameter(final Bytes input) { + final int numberOfParticipants = input.slice(4 + 32, 32).toBigInteger().intValue(); + if (numberOfParticipants == 0) return Collections.emptyList(); + // Method selector + offset + number of participants + (offset * number of participants) + final Bytes mungedParticipants = input.slice(4 + 32 + 32 + (32 * numberOfParticipants)); + + return getParticipantsFromMungedParticipants(mungedParticipants, numberOfParticipants); + } + + public static List decodeList(final Bytes rlpEncodedList) { + // first 32 bytes is dynamic list offset + if (rlpEncodedList.size() < 64) return Collections.emptyList(); + // Bytes uses a byte[] for the content which can only have up to Integer.MAX_VALUE-5 elements + final int lengthOfList = + UInt256.fromBytes(rlpEncodedList.slice(32, 32)).toInt(); // length of list + if (lengthOfList == 0 || rlpEncodedList.size() < 64 + lengthOfList * 32) + return Collections.emptyList(); + + final Bytes mungedParticipants = rlpEncodedList.slice(32 + 32 + (32 * lengthOfList)); + + return getParticipantsFromMungedParticipants(mungedParticipants, lengthOfList); + } + + private static List getParticipantsFromMungedParticipants( + final Bytes mungedParticipants, final int numberOfParticipants) { final List participants = new ArrayList<>(); - final Bytes mungedParticipants = input.slice(4 + 32 + 32); - for (int i = 0; i <= mungedParticipants.size() - 32; i += 32) { - participants.add(mungedParticipants.slice(i, 32).toBase64String()); + // The participant value is enclosed in the closest multiple of 32 (for instance, 91 would be + // enclosed in 96) + final int sliceSize = mungedParticipants.size() / numberOfParticipants; + // All the participants have to have the same size, so it is enough to check the first one + final int participantSize = mungedParticipants.slice(0, 32).toBigInteger().intValue(); + + for (int i = 0; i <= mungedParticipants.size() - sliceSize; i += sliceSize) { + // The size of each participant (as of now, either 32 or 91) is stored in 32 bytes + participants.add(mungedParticipants.slice(i + 32, participantSize).toBase64String()); } + return participants; } } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/group/FlexibleGroupManagement.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/group/FlexibleGroupManagement.java index 30d6a704a12..973762aa5bb 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/group/FlexibleGroupManagement.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/privacy/group/FlexibleGroupManagement.java @@ -19,17 +19,17 @@ public class FlexibleGroupManagement { public static final Bytes PROXY_RUNTIME_BYTECODE = Bytes.fromHexString( - "608060405234801561001057600080fd5b506004361061009e5760003560e01c80639738968c116100665780639738968c146101b8578063a69df4b5146101d8578063b4926e25146101e2578063f83d08ba146102b0578063fd017797146102ba5761009e565b80630d8e6e2c146100a35780633659cfe6146100c15780635aa68ac0146101055780635c60da1b1461016457806378b9033714610198575b600080fd5b6100ab6102fe565b6040518082815260200191505060405180910390f35b610103600480360360208110156100d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103ab565b005b61010d61083e565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610150578082015181840152602081019050610135565b505050509050019250505060405180910390f35b61016c610987565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a06109ab565b60405180821515815260200191505060405180910390f35b6101c0610a58565b60405180821515815260200191505060405180910390f35b6101e0610b07565b005b610298600480360360208110156101f857600080fd5b810190808035906020019064010000000081111561021557600080fd5b82018360208201111561022757600080fd5b8035906020019184602083028401116401000000008311171561024957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610b90565b60405180821515815260200191505060405180910390f35b6102b8610c8d565b005b6102e6600480360360208110156102d057600080fd5b8101908080359060200190929190505050610d16565b60405180821515815260200191505060405180910390f35b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16630d8e6e2c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561036a57600080fd5b505afa15801561037e573d6000803e3d6000fd5b505050506040513d602081101561039457600080fd5b810190808051906020019092919050505091505090565b3073ffffffffffffffffffffffffffffffffffffffff166378b903376040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f157600080fd5b505afa158015610405573d6000803e3d6000fd5b505050506040513d602081101561041b57600080fd5b810190808051906020019092919050505061049e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f54686520636f6e7472616374206973206c6f636b65642e00000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610543576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526054815260200180610e5a6054913960600191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16639738968c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058b57600080fd5b505af115801561059f573d6000803e3d6000fd5b505050506040513d60208110156105b557600080fd5b810190808051906020019092919050505061061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180610eae602f913960400191505060405180910390fd5b60603073ffffffffffffffffffffffffffffffffffffffff16635aa68ac06040518163ffffffff1660e01b815260040160006040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156106a157600080fd5b81019080805160405193929190846401000000008211156106c157600080fd5b838201915060208201858111156106d757600080fd5b82518660208202830111640100000000821117156106f457600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561072b578082015181840152602081019050610710565b50505050905001604052505050905061074382610e16565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b4926e25836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019060200280838360005b838110156107d85780820151818401526020810190506107bd565b5050505090500192505050602060405180830381600087803b1580156107fd57600080fd5b505af1158015610811573d6000803e3d6000fd5b505050506040513d602081101561082757600080fd5b810190808051906020019092919050505050505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16635aa68ac06040518163ffffffff1660e01b815260040160006040518083038186803b1580156108ac57600080fd5b505afa1580156108c0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156108ea57600080fd5b810190808051604051939291908464010000000082111561090a57600080fd5b8382019150602082018581111561092057600080fd5b825186602082028301116401000000008211171561093d57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015610974578082015181840152602081019050610959565b5050505090500160405250505091505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166378b903376040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1757600080fd5b505afa158015610a2b573d6000803e3d6000fd5b505050506040513d6020811015610a4157600080fd5b810190808051906020019092919050505091505090565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639738968c6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610ac657600080fd5b505af1158015610ada573d6000803e3d6000fd5b505050506040513d6020811015610af057600080fd5b810190808051906020019092919050505091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a69df4b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b7557600080fd5b505af1158015610b89573d6000803e3d6000fd5b5050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b4926e25846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019060200280838360005b83811015610c25578082015181840152602081019050610c0a565b5050505090500192505050602060405180830381600087803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b505050506040513d6020811015610c7457600080fd5b8101908080519060200190929190505050915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663f83d08ba6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b5050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663fd017797856040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015610d9157600080fd5b505af1158015610da5573d6000803e3d6000fd5b505050506040513d6020811015610dbb57600080fd5b810190808051906020019092919050505090508015610e0c577fef2df0cc0f44b5a36a7de9951ef49ba4d861649244ff89bcf7ffaa1ac7291e89846040518082815260200191505060405180910390a15b8092505050919050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe54686520636f6e747261637420746f207570677261646520746f2068617320746f20626520646966666572656e742066726f6d207468652063757272656e74206d616e6167656d656e7420636f6e74726163742e4e6f7420616c6c6f77656420746f207570677261646520746865206d616e6167656d656e7420636f6e74726163742ea26469706673582212203cacc7680fcd907639c87ed995ee91e1de9ef4d7da7437f854fb3a8fbab9b0db64736f6c634300060c0033"); + "608060405234801561001057600080fd5b506004361061009e5760003560e01c806378b903371161006657806378b9033714610149578063965a25ef146101675780639738968c14610197578063a69df4b5146101b5578063f83d08ba146101bf5761009e565b80630d8e6e2c146100a35780631f52a8ee146100c15780633659cfe6146100f15780635aa68ac01461010d5780635c60da1b1461012b575b600080fd5b6100ab6101c9565b6040516100b891906110dd565b60405180910390f35b6100db60048036038101906100d69190610eab565b610273565b6040516100e891906110c2565b60405180910390f35b61010b60048036038101906101069190610d92565b610370565b005b6101156106c2565b60405161012291906110a0565b60405180910390f35b610133610773565b6040516101409190611085565b60405180910390f35b610151610797565b60405161015e91906110c2565b60405180910390f35b610181600480360381019061017c9190610dbf565b610841565b60405161018e91906110c2565b60405180910390f35b61019f6108fa565b6040516101ac91906110c2565b60405180910390f35b6101bd6109a6565b005b6101c7610a2f565b005b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16630d8e6e2c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561023557600080fd5b505afa158015610249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026d9190610e7e565b91505090565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16631f52a8ee856040518263ffffffff1660e01b81526004016102d491906110f8565b602060405180830381600087803b1580156102ee57600080fd5b505af1158015610302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103269190610e51565b90508015610366577f52213552a930e6de0c0d7df74ece31dac1306b2c7e200ceded7a4442853189b58460405161035d91906110f8565b60405180910390a15b8092505050919050565b3073ffffffffffffffffffffffffffffffffffffffff166378b903376040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b657600080fd5b505afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee9190610e51565b61042d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104249061111a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156104bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b39061113a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16639738968c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561050457600080fd5b505af1158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c9190610e51565b61057b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105729061115a565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16635aa68ac06040518163ffffffff1660e01b815260040160006040518083038186803b1580156105c357600080fd5b505afa1580156105d7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906106009190610e08565b905061060b82610ab8565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663965a25ef836040518263ffffffff1660e01b815260040161066a91906110a0565b602060405180830381600087803b15801561068457600080fd5b505af1158015610698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bc9190610e51565b50505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16635aa68ac06040518163ffffffff1660e01b815260040160006040518083038186803b15801561073057600080fd5b505afa158015610744573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061076d9190610e08565b91505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166378b903376040518163ffffffff1660e01b815260040160206040518083038186803b15801561080357600080fd5b505afa158015610817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083b9190610e51565b91505090565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663965a25ef846040518263ffffffff1660e01b81526004016108a091906110a0565b602060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190610e51565b915050919050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639738968c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561096857600080fd5b505af115801561097c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a09190610e51565b91505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a69df4b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663f83d08ba6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a9d57600080fd5b505af1158015610ab1573d6000803e3d6000fd5b5050505050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b0e610b098461119f565b61117a565b90508083825260208201905082856020860282011115610b3157610b30611362565b5b60005b85811015610b7f57813567ffffffffffffffff811115610b5757610b5661135d565b5b808601610b648982610d36565b85526020850194506020840193505050600181019050610b34565b5050509392505050565b6000610b9c610b978461119f565b61117a565b90508083825260208201905082856020860282011115610bbf57610bbe611362565b5b60005b85811015610c0d57815167ffffffffffffffff811115610be557610be461135d565b5b808601610bf28982610d64565b85526020850194506020840193505050600181019050610bc2565b5050509392505050565b6000610c2a610c25846111cb565b61117a565b905082815260208101848484011115610c4657610c45611367565b5b610c518482856112bb565b509392505050565b6000610c6c610c67846111cb565b61117a565b905082815260208101848484011115610c8857610c87611367565b5b610c938482856112ca565b509392505050565b600081359050610caa81611474565b92915050565b600082601f830112610cc557610cc461135d565b5b8135610cd5848260208601610afb565b91505092915050565b600082601f830112610cf357610cf261135d565b5b8151610d03848260208601610b89565b91505092915050565b600081519050610d1b8161148b565b92915050565b600081519050610d30816114a2565b92915050565b600082601f830112610d4b57610d4a61135d565b5b8135610d5b848260208601610c17565b91505092915050565b600082601f830112610d7957610d7861135d565b5b8151610d89848260208601610c59565b91505092915050565b600060208284031215610da857610da7611371565b5b6000610db684828501610c9b565b91505092915050565b600060208284031215610dd557610dd4611371565b5b600082013567ffffffffffffffff811115610df357610df261136c565b5b610dff84828501610cb0565b91505092915050565b600060208284031215610e1e57610e1d611371565b5b600082015167ffffffffffffffff811115610e3c57610e3b61136c565b5b610e4884828501610cde565b91505092915050565b600060208284031215610e6757610e66611371565b5b6000610e7584828501610d0c565b91505092915050565b600060208284031215610e9457610e93611371565b5b6000610ea284828501610d21565b91505092915050565b600060208284031215610ec157610ec0611371565b5b600082013567ffffffffffffffff811115610edf57610ede61136c565b5b610eeb84828501610d36565b91505092915050565b6000610f008383610faa565b905092915050565b610f1181611273565b82525050565b6000610f228261120c565b610f2c818561122f565b935083602082028501610f3e856111fc565b8060005b85811015610f7a5784840389528151610f5b8582610ef4565b9450610f6683611222565b925060208a01995050600181019050610f42565b50829750879550505050505092915050565b610f9581611285565b82525050565b610fa481611291565b82525050565b6000610fb582611217565b610fbf8185611240565b9350610fcf8185602086016112ca565b610fd881611376565b840191505092915050565b6000610fee82611217565b610ff88185611251565b93506110088185602086016112ca565b61101181611376565b840191505092915050565b6000611029601783611262565b915061103482611387565b602082019050919050565b600061104c605483611262565b9150611057826113b0565b606082019050919050565b600061106f602f83611262565b915061107a82611425565b604082019050919050565b600060208201905061109a6000830184610f08565b92915050565b600060208201905081810360008301526110ba8184610f17565b905092915050565b60006020820190506110d76000830184610f8c565b92915050565b60006020820190506110f26000830184610f9b565b92915050565b600060208201905081810360008301526111128184610fe3565b905092915050565b600060208201905081810360008301526111338161101c565b9050919050565b600060208201905081810360008301526111538161103f565b9050919050565b6000602082019050818103600083015261117381611062565b9050919050565b6000611184611195565b905061119082826112fd565b919050565b6000604051905090565b600067ffffffffffffffff8211156111ba576111b961132e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156111e6576111e561132e565b5b6111ef82611376565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061127e8261129b565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156112e85780820151818401526020810190506112cd565b838111156112f7576000848401525b50505050565b61130682611376565b810181811067ffffffffffffffff821117156113255761132461132e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f54686520636f6e7472616374206973206c6f636b65642e000000000000000000600082015250565b7f54686520636f6e747261637420746f207570677261646520746f20686173207460008201527f6f20626520646966666572656e742066726f6d207468652063757272656e742060208201527f6d616e6167656d656e7420636f6e74726163742e000000000000000000000000604082015250565b7f4e6f7420616c6c6f77656420746f207570677261646520746865206d616e616760008201527f656d656e7420636f6e74726163742e0000000000000000000000000000000000602082015250565b61147d81611273565b811461148857600080fd5b50565b61149481611285565b811461149f57600080fd5b50565b6114ab81611291565b81146114b657600080fd5b5056fea264697066735822122060bd2e9b7be3bc8ba6cb06b883675904d1330adce674f0d4e90c75da9b48b39f64736f6c63430008070033"); public static final Bytes DEFAULT_GROUP_MANAGEMENT_RUNTIME_BYTECODE = Bytes.fromHexString( - "608060405234801561001057600080fd5b50600436106100885760003560e01c8063a69df4b51161005b578063a69df4b51461014a578063b4926e2514610154578063f83d08ba14610222578063fd0177971461022c57610088565b80630d8e6e2c1461008d5780635aa68ac0146100ab57806378b903371461010a5780639738968c1461012a575b600080fd5b610095610270565b6040518082815260200191505060405180910390f35b6100b361027a565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156100f65780820151818401526020810190506100db565b505050509050019250505060405180910390f35b6101126102d2565b60405180821515815260200191505060405180910390f35b6101326102e8565b60405180821515815260200191505060405180910390f35b61015261033f565b005b61020a6004803603602081101561016a57600080fd5b810190808035906020019064010000000081111561018757600080fd5b82018360208201111561019957600080fd5b803590602001918460208302840111640100000000831117156101bb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610437565b60405180821515815260200191505060405180910390f35b61022a6105e3565b005b6102586004803603602081101561024257600080fd5b81019080803590602001909291905050506106d9565b60405180821515815260200191505060405180910390f35b6000600154905090565b606060028054806020026020016040519081016040528092919081815260200182805480156102c857602002820191906000526020600020905b8154815260200190600101908083116102b4575b5050505050905090565b60008060149054906101000a900460ff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614905090565b600060149054906101000a900460ff161561035957600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461041a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f726967696e206e6f7420746865206f776e65722e000000000000000000000081525060200191505060405180910390fd5b6001600060146101000a81548160ff021916908315150217905550565b60008060149054906101000a900460ff161561045257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156104e857326000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146105a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f726967696e206e6f7420746865206f776e65722e000000000000000000000081525060200191505060405180910390fd5b60006105b4836107d3565b90506001600060146101000a81548160ff0219169083151502179055506105d9610a0c565b5080915050919050565b600060149054906101000a900460ff166105fc57600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146106bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f726967696e206e6f7420746865206f776e65722e000000000000000000000081525060200191505060405180910390fd5b60008060146101000a81548160ff021916908315150217905550565b60008060149054906101000a900460ff166106f357600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f726967696e206e6f7420746865206f776e65722e000000000000000000000081525060200191505060405180910390fd5b60006107bf83610a96565b90506107c9610a0c565b5080915050919050565b6000806001905060005b8351811015610a02576108028482815181106107f557fe5b6020026020010151610b81565b156108a7577fcc7365305ae5f16c463d1383713d699f43c5548bbda5537ee61373ceb9aaf213600085838151811061083657fe5b6020026020010151604051808315158152602001828152602001806020018281038252601b8152602001807f4163636f756e7420697320616c72656164792061204d656d6265720000000000815250602001935050505060405180910390a18180156108a0575060005b91506109f5565b60006108c58583815181106108b857fe5b6020026020010151610ba1565b9050606081610909576040518060400160405280601b81526020017f4163636f756e7420697320616c72656164792061204d656d6265720000000000815250610923565b604051806060016040528060218152602001610c18602191395b90507fcc7365305ae5f16c463d1383713d699f43c5548bbda5537ee61373ceb9aaf2138287858151811061095357fe5b60200260200101518360405180841515815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156109aa57808201518184015260208101905061098f565b50505050905090810190601f1680156109d75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a18380156109f05750815b935050505b80806001019150506107dd565b5080915050919050565b60006001430340416002604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1660601b81526014018280548015610a7057602002820191906000526020600020905b815481526020019060010190808311610a5c575b505093505050506040516020818303038152906040528051906020012060018190555090565b60008060036000848152602001908152602001600020549050600081118015610ac457506002805490508111155b15610b76576002805490508114610b32576000600260016002805490500381548110610aec57fe5b906000526020600020015490508060026001840381548110610b0a57fe5b9060005260206000200181905550816003600083815260200190815260200160002081905550505b6002805480610b3d57fe5b60019003818190600052602060002001600090559055600060036000858152602001908152602001600020819055506001915050610b7c565b60009150505b919050565b600080600360008481526020019081526020016000205414159050919050565b60008060036000848152602001908152602001600020541415610c0d576002829080600181540180825580915050600190039060005260206000200160009091909190915055600280549050600360008481526020019081526020016000208190555060019050610c12565b600090505b91905056fe4d656d626572206163636f756e74206164646564207375636365737366756c6c79a26469706673582212208c78668851cd6fd2c8c66c0f57ff99c07d7fa22aaac6e0806def9d467f320ecf64736f6c634300060c0033"); + "608060405234801561001057600080fd5b50600436106100885760003560e01c8063965a25ef1161005b578063965a25ef146101175780639738968c14610147578063a69df4b514610165578063f83d08ba1461016f57610088565b80630d8e6e2c1461008d5780631f52a8ee146100ab5780635aa68ac0146100db57806378b90337146100f9575b600080fd5b610095610179565b6040516100a2919061120f565b60405180910390f35b6100c560048036038101906100c09190610d74565b610183565b6040516100d2919061116c565b60405180910390f35b6100e3610249565b6040516100f0919061114a565b60405180910390f35b610101610322565b60405161010e919061116c565b60405180910390f35b610131600480360381019061012c9190610d2b565b610338565b60405161013e919061116c565b60405180910390f35b61014f6104b0565b60405161015c919061116c565b60405180910390f35b61016d610507565b005b6101776105cc565b005b6000600154905090565b60008060149054906101000a900460ff1661019d57600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461022b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022290611268565b60405180910390fd5b60006102368361068f565b90506102406107dd565b80915050919050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561031957838290600052602060002001805461028c906114b6565b80601f01602080910402602001604051908101604052809291908181526020018280546102b8906114b6565b80156103055780601f106102da57610100808354040283529160200191610305565b820191906000526020600020905b8154815290600101906020018083116102e857829003601f168201915b50505050508152602001906001019061026d565b50505050905090565b60008060149054906101000a900460ff16905090565b60008060149054906101000a900460ff161561035357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156103e957326000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046e90611268565b60405180910390fd5b60006104828361081e565b90506001600060146101000a81548160ff0219169083151502179055506104a76107dd565b80915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614905090565b600060149054906101000a900460ff161561052157600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a690611268565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff166105e557600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a90611268565b60405180910390fd5b60008060146101000a81548160ff021916908315150217905550565b6000806003836040516106a2919061111c565b90815260200160405180910390205490506000811180156106c857506002805490508111155b156107d2576002805490508114610774576000600260016002805490506106ef91906113ee565b81548110610700576106ff6115ef565b5b90600052602060002001905080600260018461071c91906113ee565b8154811061072d5761072c6115ef565b5b90600052602060002001908054610743906114b6565b61074e929190610a8f565b50816003826040516107609190611133565b908152602001604051809103902081905550505b6002805480610786576107856115c0565b5b6001900381819060005260206000200160006107a29190610b1c565b905560006003846040516107b6919061111c565b90815260200160405180910390208190555060019150506107d8565b60009150505b919050565b6001436107ea91906113ee565b404160026040516020016108009392919061122a565b60405160208183030381529060405280519060200120600181905550565b6000806001905060005b83518110156109bb57610854848281518110610847576108466115ef565b5b60200260200101516109c5565b156108bf577f1673b13ca99fc5f5d54f8ebc163339b3c03f5f661cec3f5dfe506fdbd2602de6600085838151811061088f5761088e6115ef565b5b60200260200101516040516108a59291906111cc565b60405180910390a18180156108b8575060005b91506109a8565b60006108e48583815181106108d7576108d66115ef565b5b60200260200101516109f0565b9050600081610928576040518060400160405280601b81526020017f4163636f756e7420697320616c72656164792061204d656d6265720000000000815250610942565b6040518060600160405280602181526020016116ca602191395b90507f1673b13ca99fc5f5d54f8ebc163339b3c03f5f661cec3f5dfe506fdbd2602de682878581518110610979576109786115ef565b5b60200260200101518360405161099193929190611187565b60405180910390a18380156109a35750815b935050505b80806109b390611519565b915050610828565b5080915050919050565b6000806003836040516109d8919061111c565b90815260200160405180910390205414159050919050565b600080600383604051610a03919061111c565b9081526020016040518091039020541415610a8557600282908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190610a53929190610b5c565b50600280549050600383604051610a6a919061111c565b90815260200160405180910390208190555060019050610a8a565b600090505b919050565b828054610a9b906114b6565b90600052602060002090601f016020900481019282610abd5760008555610b0b565b82601f10610ace5780548555610b0b565b82800160010185558215610b0b57600052602060002091601f016020900482015b82811115610b0a578254825591600101919060010190610aef565b5b509050610b189190610be2565b5090565b508054610b28906114b6565b6000825580601f10610b3a5750610b59565b601f016020900490600052602060002090810190610b589190610be2565b5b50565b828054610b68906114b6565b90600052602060002090601f016020900481019282610b8a5760008555610bd1565b82601f10610ba357805160ff1916838001178555610bd1565b82800160010185558215610bd1579182015b82811115610bd0578251825591602001919060010190610bb5565b5b509050610bde9190610be2565b5090565b5b80821115610bfb576000816000905550600101610be3565b5090565b6000610c12610c0d846112ad565b611288565b90508083825260208201905082856020860282011115610c3557610c34611652565b5b60005b85811015610c8357813567ffffffffffffffff811115610c5b57610c5a61164d565b5b808601610c688982610cfd565b85526020850194506020840193505050600181019050610c38565b5050509392505050565b6000610ca0610c9b846112d9565b611288565b905082815260208101848484011115610cbc57610cbb611657565b5b610cc7848285611474565b509392505050565b600082601f830112610ce457610ce361164d565b5b8135610cf4848260208601610bff565b91505092915050565b600082601f830112610d1257610d1161164d565b5b8135610d22848260208601610c8d565b91505092915050565b600060208284031215610d4157610d40611661565b5b600082013567ffffffffffffffff811115610d5f57610d5e61165c565b5b610d6b84828501610ccf565b91505092915050565b600060208284031215610d8a57610d89611661565b5b600082013567ffffffffffffffff811115610da857610da761165c565b5b610db484828501610cfd565b91505092915050565b6000610dc98383610efb565b905092915050565b6000610ddd838361101d565b905092915050565b610dee81611422565b82525050565b6000610dff82611359565b610e09818561139f565b935083602082028501610e1b8561130a565b8060005b85811015610e575784840389528151610e388582610dbd565b9450610e4383611385565b925060208a01995050600181019050610e1f565b50829750879550505050505092915050565b6000610e7482611364565b610e7e818561139f565b935083602082028501610e908561131a565b8060005b85811015610ecb57848403895281610eac8582610dd1565b9450610eb783611392565b925060208a01995050600181019050610e94565b50829750879550505050505092915050565b610ee681611434565b82525050565b610ef581611440565b82525050565b6000610f068261136f565b610f1081856113b0565b9350610f20818560208601611483565b610f2981611666565b840191505092915050565b6000610f3f8261136f565b610f4981856113c1565b9350610f59818560208601611483565b610f6281611666565b840191505092915050565b6000610f788261136f565b610f8281856113d2565b9350610f92818560208601611483565b80840191505092915050565b60008154610fab816114b6565b610fb581866113d2565b94506001821660008114610fd05760018114610fe157611014565b60ff19831686528186019350611014565b610fea85611344565b60005b8381101561100c57815481890152600182019150602081019050610fed565b838801955050505b50505092915050565b6000815461102a816114b6565b61103481866113b0565b9450600182166000811461104f576001811461106157611094565b60ff1983168652602086019350611094565b61106a8561132f565b60005b8381101561108c5781548189015260018201915060208101905061106d565b808801955050505b50505092915050565b60006110a88261137a565b6110b281856113dd565b93506110c2818560208601611483565b6110cb81611666565b840191505092915050565b60006110e36015836113dd565b91506110ee82611677565b602082019050919050565b6000611106601b836113dd565b9150611111826116a0565b602082019050919050565b60006111288284610f6d565b915081905092915050565b600061113f8284610f9e565b915081905092915050565b600060208201905081810360008301526111648184610df4565b905092915050565b60006020820190506111816000830184610edd565b92915050565b600060608201905061119c6000830186610edd565b81810360208301526111ae8185610f34565b905081810360408301526111c2818461109d565b9050949350505050565b60006060820190506111e16000830185610edd565b81810360208301526111f38184610f34565b90508181036040830152611206816110f9565b90509392505050565b60006020820190506112246000830184610eec565b92915050565b600060608201905061123f6000830186610eec565b61124c6020830185610de5565b818103604083015261125e8184610e69565b9050949350505050565b60006020820190508181036000830152611281816110d6565b9050919050565b60006112926112a3565b905061129e82826114e8565b919050565b6000604051905090565b600067ffffffffffffffff8211156112c8576112c761161e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156112f4576112f361161e565b5b6112fd82611666565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000600182019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006113f98261146a565b91506114048361146a565b92508282101561141757611416611562565b5b828203905092915050565b600061142d8261144a565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156114a1578082015181840152602081019050611486565b838111156114b0576000848401525b50505050565b600060028204905060018216806114ce57607f821691505b602082108114156114e2576114e1611591565b5b50919050565b6114f182611666565b810181811067ffffffffffffffff821117156115105761150f61161e565b5b80604052505050565b60006115248261146a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561155757611556611562565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f726967696e206e6f7420746865206f776e65722e0000000000000000000000600082015250565b7f4163636f756e7420697320616c72656164792061204d656d626572000000000060008201525056fe4d656d626572206163636f756e74206164646564207375636365737366756c6c79a26469706673582212206f188cc196924591bbf2fea27b2d6701b638b174204e33344b0c07cfa019038064736f6c63430008070033"); - public static final Bytes ADD_PARTICIPANTS_METHOD_SIGNATURE = Bytes.fromHexString("0xb4926e25"); + public static final Bytes ADD_PARTICIPANTS_METHOD_SIGNATURE = Bytes.fromHexString("0x965a25ef"); public static final Bytes CAN_EXECUTE_METHOD_SIGNATURE = Bytes.fromHexString("0x78b90337"); public static final Bytes GET_PARTICIPANTS_METHOD_SIGNATURE = Bytes.fromHexString("0x5aa68ac0"); public static final Bytes GET_VERSION_METHOD_SIGNATURE = Bytes.fromHexString("0x0d8e6e2c"); public static final Bytes LOCK_GROUP_METHOD_SIGNATURE = Bytes.fromHexString("0xf83d08ba"); - public static final Bytes REMOVE_PARTICIPANT_METHOD_SIGNATURE = Bytes.fromHexString("0xfd017797"); + public static final Bytes REMOVE_PARTICIPANT_METHOD_SIGNATURE = Bytes.fromHexString("0x1f52a8ee"); public static final Bytes UNLOCK_GROUP_METHOD_SIGNATURE = Bytes.fromHexString("0xa69df4b5"); } diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/privacy/FlexibleUtilTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/privacy/FlexibleUtilTest.java new file mode 100644 index 00000000000..67f85b11362 --- /dev/null +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/privacy/FlexibleUtilTest.java @@ -0,0 +1,87 @@ +/* + * Copyright ConsenSys AG. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 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.ethereum.privacy; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.List; + +import org.apache.tuweni.bytes.Bytes; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class FlexibleUtilTest { + + private static final String EXPECTED_EC_PARTICIPANT_1 = + "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES8nC4qT/KdoAoTSF3qs/47DUsDihyVbWiRjZAiyvqp9eSDkqV1RzlM+58oOwnpFRwvWNZM+AxMVxT+MvxdsqMA=="; + + private static final String EXPECTED_EC_PARTICIPANT_2 = + "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXIgZqRA25V+3nN+Do6b5r0jiUunub6ubjPhqwHpPxP44uUYh9RKCQNRnsqCJ9PjeTnC8R3ieJk7HWAlycU1bug=="; + + @Test + public void testGetParticipantsFromParameter() { + final String parameterNaCl = + "llol7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACADVpW0zEsJQeYFUdehnPMGA9tb/CPlrEOlb1fyX3VIagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKo2bVqD+nNlNYL5EE7y3IdOnviftjiizpjRt+HTuFBs="; + final String expectedNaClParticipant1 = "A1aVtMxLCUHmBVHXoZzzBgPbW/wj5axDpW9X8l91SGo="; + final String expectedNaClParticipant2 = "Ko2bVqD+nNlNYL5EE7y3IdOnviftjiizpjRt+HTuFBs="; + + List actualParticipants = + FlexibleUtil.getParticipantsFromParameter(Bytes.fromBase64String(parameterNaCl)); + + assertThat(actualParticipants).hasSize(2); + assertThat(actualParticipants.get(0)).isEqualTo(expectedNaClParticipant1); + assertThat(actualParticipants.get(1)).isEqualTo(expectedNaClParticipant2); + + final String parameterEC = + "llol7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFswWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARLycLipP8p2gChNIXeqz/jsNSwOKHJVtaJGNkCLK+qn15IOSpXVHOUz7nyg7CekVHC9Y1kz4DExXFP4y/F2yowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyIGakQNuVft5zfg6Om+a9I4lLp7m+rm4z4asB6T8T+OLlGIfUSgkDUZ7KgifT43k5wvEd4niZOx1gJcnFNW7oAAAAAAA=="; + + actualParticipants = + FlexibleUtil.getParticipantsFromParameter(Bytes.fromBase64String(parameterEC)); + + assertThat(actualParticipants).hasSize(2); + assertThat(actualParticipants.get(0)).isEqualTo(EXPECTED_EC_PARTICIPANT_1); + assertThat(actualParticipants.get(1)).isEqualTo(EXPECTED_EC_PARTICIPANT_2); + + final String parameterEC2 = + "llol7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES8nC4qT/KdoAoTSF3qs/47DUsDihyVbWiRjZAiyvqp9eSDkqV1RzlM+58oOwnpFRwvWNZM+AxMVxT+MvxdsqMAAAAAAA"; + + actualParticipants = + FlexibleUtil.getParticipantsFromParameter(Bytes.fromBase64String(parameterEC2)); + + assertThat(actualParticipants).hasSize(1); + assertThat(actualParticipants.get(0)).isEqualTo(EXPECTED_EC_PARTICIPANT_1); + } + + @Test + public void testDecodeList() { + final Bytes rlpEncodedOneParticipant = + Bytes.fromBase64String( + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFswWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARLycLipP8p2gChNIXeqz/jsNSwOKHJVtaJGNkCLK+qn15IOSpXVHOUz7nyg7CekVHC9Y1kz4DExXFP4y/F2yowAAAAAAA="); + + List actualParticipants = FlexibleUtil.decodeList(rlpEncodedOneParticipant); + + assertThat(actualParticipants).isEqualTo(Arrays.asList(EXPECTED_EC_PARTICIPANT_1)); + + final Bytes wrongBytes = + Bytes.fromBase64String( + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); + + actualParticipants = FlexibleUtil.decodeList(wrongBytes); + assertThat(actualParticipants).isEmpty(); + } +} diff --git a/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/DefaultFlexiblePrivacyGroupManagementContract.java b/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/DefaultFlexiblePrivacyGroupManagementContract.java index 73bfd458687..c098ed55e2d 100644 --- a/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/DefaultFlexiblePrivacyGroupManagementContract.java +++ b/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/DefaultFlexiblePrivacyGroupManagementContract.java @@ -27,6 +27,7 @@ import org.web3j.abi.TypeReference; import org.web3j.abi.datatypes.Bool; import org.web3j.abi.datatypes.DynamicArray; +import org.web3j.abi.datatypes.DynamicBytes; import org.web3j.abi.datatypes.Event; import org.web3j.abi.datatypes.Type; import org.web3j.abi.datatypes.Utf8String; @@ -53,12 +54,12 @@ * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the codegen module to update. * - *

Generated with web3j version 4.5.16. + *

Generated with web3j version 1.4.1. */ @SuppressWarnings("rawtypes") public class DefaultFlexiblePrivacyGroupManagementContract extends Contract { public static final String BINARY = - "608060405234801561001057600080fd5b50610c6e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a69df4b51161005b578063a69df4b51461014a578063b4926e2514610154578063f83d08ba14610222578063fd0177971461022c57610088565b80630d8e6e2c1461008d5780635aa68ac0146100ab57806378b903371461010a5780639738968c1461012a575b600080fd5b610095610270565b6040518082815260200191505060405180910390f35b6100b361027a565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156100f65780820151818401526020810190506100db565b505050509050019250505060405180910390f35b6101126102d2565b60405180821515815260200191505060405180910390f35b6101326102e8565b60405180821515815260200191505060405180910390f35b61015261033f565b005b61020a6004803603602081101561016a57600080fd5b810190808035906020019064010000000081111561018757600080fd5b82018360208201111561019957600080fd5b803590602001918460208302840111640100000000831117156101bb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610437565b60405180821515815260200191505060405180910390f35b61022a6105e3565b005b6102586004803603602081101561024257600080fd5b81019080803590602001909291905050506106d9565b60405180821515815260200191505060405180910390f35b6000600154905090565b606060028054806020026020016040519081016040528092919081815260200182805480156102c857602002820191906000526020600020905b8154815260200190600101908083116102b4575b5050505050905090565b60008060149054906101000a900460ff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614905090565b600060149054906101000a900460ff161561035957600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461041a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f726967696e206e6f7420746865206f776e65722e000000000000000000000081525060200191505060405180910390fd5b6001600060146101000a81548160ff021916908315150217905550565b60008060149054906101000a900460ff161561045257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156104e857326000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146105a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f726967696e206e6f7420746865206f776e65722e000000000000000000000081525060200191505060405180910390fd5b60006105b4836107d3565b90506001600060146101000a81548160ff0219169083151502179055506105d9610a0c565b5080915050919050565b600060149054906101000a900460ff166105fc57600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146106bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f726967696e206e6f7420746865206f776e65722e000000000000000000000081525060200191505060405180910390fd5b60008060146101000a81548160ff021916908315150217905550565b60008060149054906101000a900460ff166106f357600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f726967696e206e6f7420746865206f776e65722e000000000000000000000081525060200191505060405180910390fd5b60006107bf83610a96565b90506107c9610a0c565b5080915050919050565b6000806001905060005b8351811015610a02576108028482815181106107f557fe5b6020026020010151610b81565b156108a7577fcc7365305ae5f16c463d1383713d699f43c5548bbda5537ee61373ceb9aaf213600085838151811061083657fe5b6020026020010151604051808315158152602001828152602001806020018281038252601b8152602001807f4163636f756e7420697320616c72656164792061204d656d6265720000000000815250602001935050505060405180910390a18180156108a0575060005b91506109f5565b60006108c58583815181106108b857fe5b6020026020010151610ba1565b9050606081610909576040518060400160405280601b81526020017f4163636f756e7420697320616c72656164792061204d656d6265720000000000815250610923565b604051806060016040528060218152602001610c18602191395b90507fcc7365305ae5f16c463d1383713d699f43c5548bbda5537ee61373ceb9aaf2138287858151811061095357fe5b60200260200101518360405180841515815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156109aa57808201518184015260208101905061098f565b50505050905090810190601f1680156109d75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a18380156109f05750815b935050505b80806001019150506107dd565b5080915050919050565b60006001430340416002604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1660601b81526014018280548015610a7057602002820191906000526020600020905b815481526020019060010190808311610a5c575b505093505050506040516020818303038152906040528051906020012060018190555090565b60008060036000848152602001908152602001600020549050600081118015610ac457506002805490508111155b15610b76576002805490508114610b32576000600260016002805490500381548110610aec57fe5b906000526020600020015490508060026001840381548110610b0a57fe5b9060005260206000200181905550816003600083815260200190815260200160002081905550505b6002805480610b3d57fe5b60019003818190600052602060002001600090559055600060036000858152602001908152602001600020819055506001915050610b7c565b60009150505b919050565b600080600360008481526020019081526020016000205414159050919050565b60008060036000848152602001908152602001600020541415610c0d576002829080600181540180825580915050600190039060005260206000200160009091909190915055600280549050600360008481526020019081526020016000208190555060019050610c12565b600090505b91905056fe4d656d626572206163636f756e74206164646564207375636365737366756c6c79a2646970667358221220aaa2dd79ed65e1a55d25832a79d0bd9f47b1b0bae7b719d96723f776987a93b264736f6c634300060c0033"; + "608060405234801561001057600080fd5b50611719806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063965a25ef1161005b578063965a25ef146101175780639738968c14610147578063a69df4b514610165578063f83d08ba1461016f57610088565b80630d8e6e2c1461008d5780631f52a8ee146100ab5780635aa68ac0146100db57806378b90337146100f9575b600080fd5b610095610179565b6040516100a29190610c18565b60405180910390f35b6100c560048036038101906100c09190610d8d565b610183565b6040516100d29190610df1565b60405180910390f35b6100e3610249565b6040516100f09190610f56565b60405180910390f35b610101610322565b60405161010e9190610df1565b60405180910390f35b610131600480360381019061012c919061105e565b610338565b60405161013e9190610df1565b60405180910390f35b61014f6104b0565b60405161015c9190610df1565b60405180910390f35b61016d610507565b005b6101776105cc565b005b6000600154905090565b60008060149054906101000a900460ff1661019d57600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461022b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022290611104565b60405180910390fd5b60006102368361068f565b90506102406107dd565b80915050919050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561031957838290600052602060002001805461028c90611153565b80601f01602080910402602001604051908101604052809291908181526020018280546102b890611153565b80156103055780601f106102da57610100808354040283529160200191610305565b820191906000526020600020905b8154815290600101906020018083116102e857829003601f168201915b50505050508152602001906001019061026d565b50505050905090565b60008060149054906101000a900460ff16905090565b60008060149054906101000a900460ff161561035357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156103e957326000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046e90611104565b60405180910390fd5b60006104828361081e565b90506001600060146101000a81548160ff0219169083151502179055506104a76107dd565b80915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614905090565b600060149054906101000a900460ff161561052157600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a690611104565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff166105e557600080fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a90611104565b60405180910390fd5b60008060146101000a81548160ff021916908315150217905550565b6000806003836040516106a291906111c1565b90815260200160405180910390205490506000811180156106c857506002805490508111155b156107d2576002805490508114610774576000600260016002805490506106ef9190611211565b81548110610700576106ff611245565b5b90600052602060002001905080600260018461071c9190611211565b8154811061072d5761072c611245565b5b9060005260206000200190805461074390611153565b61074e929190610a8f565b50816003826040516107609190611308565b908152602001604051809103902081905550505b60028054806107865761078561131f565b5b6001900381819060005260206000200160006107a29190610b1c565b905560006003846040516107b691906111c1565b90815260200160405180910390208190555060019150506107d8565b60009150505b919050565b6001436107ea9190611211565b40416002604051602001610800939291906114d9565b60405160208183030381529060405280519060200120600181905550565b6000806001905060005b83518110156109bb5761085484828151811061084757610846611245565b5b60200260200101516109c5565b156108bf577f1673b13ca99fc5f5d54f8ebc163339b3c03f5f661cec3f5dfe506fdbd2602de6600085838151811061088f5761088e611245565b5b60200260200101516040516108a59291906115ad565b60405180910390a18180156108b8575060005b91506109a8565b60006108e48583815181106108d7576108d6611245565b5b60200260200101516109f0565b9050600081610928576040518060400160405280601b81526020017f4163636f756e7420697320616c72656164792061204d656d6265720000000000815250610942565b6040518060600160405280602181526020016116c3602191395b90507f1673b13ca99fc5f5d54f8ebc163339b3c03f5f661cec3f5dfe506fdbd2602de68287858151811061097957610978611245565b5b60200260200101518360405161099193929190611634565b60405180910390a18380156109a35750815b935050505b80806109b390611679565b915050610828565b5080915050919050565b6000806003836040516109d891906111c1565b90815260200160405180910390205414159050919050565b600080600383604051610a0391906111c1565b9081526020016040518091039020541415610a8557600282908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190610a53929190610b5c565b50600280549050600383604051610a6a91906111c1565b90815260200160405180910390208190555060019050610a8a565b600090505b919050565b828054610a9b90611153565b90600052602060002090601f016020900481019282610abd5760008555610b0b565b82601f10610ace5780548555610b0b565b82800160010185558215610b0b57600052602060002091601f016020900482015b82811115610b0a578254825591600101919060010190610aef565b5b509050610b189190610be2565b5090565b508054610b2890611153565b6000825580601f10610b3a5750610b59565b601f016020900490600052602060002090810190610b589190610be2565b5b50565b828054610b6890611153565b90600052602060002090601f016020900481019282610b8a5760008555610bd1565b82601f10610ba357805160ff1916838001178555610bd1565b82800160010185558215610bd1579182015b82811115610bd0578251825591602001919060010190610bb5565b5b509050610bde9190610be2565b5090565b5b80821115610bfb576000816000905550600101610be3565b5090565b6000819050919050565b610c1281610bff565b82525050565b6000602082019050610c2d6000830184610c09565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610c9a82610c51565b810181811067ffffffffffffffff82111715610cb957610cb8610c62565b5b80604052505050565b6000610ccc610c33565b9050610cd88282610c91565b919050565b600067ffffffffffffffff821115610cf857610cf7610c62565b5b610d0182610c51565b9050602081019050919050565b82818337600083830152505050565b6000610d30610d2b84610cdd565b610cc2565b905082815260208101848484011115610d4c57610d4b610c4c565b5b610d57848285610d0e565b509392505050565b600082601f830112610d7457610d73610c47565b5b8135610d84848260208601610d1d565b91505092915050565b600060208284031215610da357610da2610c3d565b5b600082013567ffffffffffffffff811115610dc157610dc0610c42565b5b610dcd84828501610d5f565b91505092915050565b60008115159050919050565b610deb81610dd6565b82525050565b6000602082019050610e066000830184610de2565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e72578082015181840152602081019050610e57565b83811115610e81576000848401525b50505050565b6000610e9282610e38565b610e9c8185610e43565b9350610eac818560208601610e54565b610eb581610c51565b840191505092915050565b6000610ecc8383610e87565b905092915050565b6000602082019050919050565b6000610eec82610e0c565b610ef68185610e17565b935083602082028501610f0885610e28565b8060005b85811015610f445784840389528151610f258582610ec0565b9450610f3083610ed4565b925060208a01995050600181019050610f0c565b50829750879550505050505092915050565b60006020820190508181036000830152610f708184610ee1565b905092915050565b600067ffffffffffffffff821115610f9357610f92610c62565b5b602082029050602081019050919050565b600080fd5b6000610fbc610fb784610f78565b610cc2565b90508083825260208201905060208402830185811115610fdf57610fde610fa4565b5b835b8181101561102657803567ffffffffffffffff81111561100457611003610c47565b5b8086016110118982610d5f565b85526020850194505050602081019050610fe1565b5050509392505050565b600082601f83011261104557611044610c47565b5b8135611055848260208601610fa9565b91505092915050565b60006020828403121561107457611073610c3d565b5b600082013567ffffffffffffffff81111561109257611091610c42565b5b61109e84828501611030565b91505092915050565b600082825260208201905092915050565b7f4f726967696e206e6f7420746865206f776e65722e0000000000000000000000600082015250565b60006110ee6015836110a7565b91506110f9826110b8565b602082019050919050565b6000602082019050818103600083015261111d816110e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061116b57607f821691505b6020821081141561117f5761117e611124565b5b50919050565b600081905092915050565b600061119b82610e38565b6111a58185611185565b93506111b5818560208601610e54565b80840191505092915050565b60006111cd8284611190565b915081905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061121c826111d8565b9150611227836111d8565b92508282101561123a576112396111e2565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008190508160005260206000209050919050565b6000815461129681611153565b6112a08186611185565b945060018216600081146112bb57600181146112cc576112ff565b60ff198316865281860193506112ff565b6112d585611274565b60005b838110156112f7578154818901526001820191506020810190506112d8565b838801955050505b50505092915050565b60006113148284611289565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113798261134e565b9050919050565b6113898161136e565b82525050565b600081549050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081546113d181611153565b6113db8186610e43565b945060018216600081146113f657600181146114085761143b565b60ff198316865260208601935061143b565b611411856113af565b60005b8381101561143357815481890152600182019150602081019050611414565b808801955050505b50505092915050565b600061145083836113c4565b905092915050565b6000600182019050919050565b60006114708261138f565b61147a8185610e17565b93508360208202850161148c8561139a565b8060005b858110156114c7578484038952816114a88582611444565b94506114b383611458565b925060208a01995050600181019050611490565b50829750879550505050505092915050565b60006060820190506114ee6000830186610c09565b6114fb6020830185611380565b818103604083015261150d8184611465565b9050949350505050565b600082825260208201905092915050565b600061153382610e38565b61153d8185611517565b935061154d818560208601610e54565b61155681610c51565b840191505092915050565b7f4163636f756e7420697320616c72656164792061204d656d6265720000000000600082015250565b6000611597601b836110a7565b91506115a282611561565b602082019050919050565b60006060820190506115c26000830185610de2565b81810360208301526115d48184611528565b905081810360408301526115e78161158a565b90509392505050565b600081519050919050565b6000611606826115f0565b61161081856110a7565b9350611620818560208601610e54565b61162981610c51565b840191505092915050565b60006060820190506116496000830186610de2565b818103602083015261165b8185611528565b9050818103604083015261166f81846115fb565b9050949350505050565b6000611684826111d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156116b7576116b66111e2565b5b60018201905091905056fe4d656d626572206163636f756e74206164646564207375636365737366756c6c79a26469706673582212209609f1a5cb6e2f48cc955820079a7ccc398144555e6ad4b22d2092ee447da95a64736f6c634300080c0033"; public static final String FUNC_ADDPARTICIPANTS = "addParticipants"; @@ -81,8 +82,9 @@ public class DefaultFlexiblePrivacyGroupManagementContract extends Contract { "ParticipantAdded", Arrays.>asList( new TypeReference() {}, - new TypeReference() {}, + new TypeReference() {}, new TypeReference() {})); + ; @Deprecated protected DefaultFlexiblePrivacyGroupManagementContract( @@ -171,10 +173,10 @@ public RemoteFunctionCall addParticipants(List _publ new org.web3j.abi.datatypes.Function( FUNC_ADDPARTICIPANTS, Arrays.asList( - new org.web3j.abi.datatypes.DynamicArray( - org.web3j.abi.datatypes.generated.Bytes32.class, + new org.web3j.abi.datatypes.DynamicArray( + org.web3j.abi.datatypes.DynamicBytes.class, org.web3j.abi.Utils.typeMap( - _publicEnclaveKeys, org.web3j.abi.datatypes.generated.Bytes32.class))), + _publicEnclaveKeys, org.web3j.abi.datatypes.DynamicBytes.class))), Collections.>emptyList()); return executeRemoteCallTransaction(function); } @@ -188,11 +190,13 @@ public RemoteFunctionCall canExecute() { return executeRemoteCallSingleValueReturn(function, Boolean.class); } - public RemoteFunctionCall canUpgrade() { + public RemoteFunctionCall canUpgrade() { final org.web3j.abi.datatypes.Function function = new org.web3j.abi.datatypes.Function( - FUNC_CANUPGRADE, Arrays.asList(), Collections.>emptyList()); - return executeRemoteCallTransaction(function); + FUNC_CANUPGRADE, + Arrays.asList(), + Arrays.>asList(new TypeReference() {})); + return executeRemoteCallSingleValueReturn(function, Boolean.class); } public RemoteFunctionCall getParticipants() { @@ -200,7 +204,7 @@ public RemoteFunctionCall getParticipants() { new org.web3j.abi.datatypes.Function( FUNC_GETPARTICIPANTS, Arrays.asList(), - Arrays.>asList(new TypeReference>() {})); + Arrays.>asList(new TypeReference>() {})); return new RemoteFunctionCall( function, new Callable() { @@ -233,7 +237,7 @@ public RemoteFunctionCall removeParticipant(byte[] _particip final org.web3j.abi.datatypes.Function function = new org.web3j.abi.datatypes.Function( FUNC_REMOVEPARTICIPANT, - Arrays.asList(new org.web3j.abi.datatypes.generated.Bytes32(_participant)), + Arrays.asList(new org.web3j.abi.datatypes.DynamicBytes(_participant)), Collections.>emptyList()); return executeRemoteCallTransaction(function); } diff --git a/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/FlexiblePrivacyGroupManagementInterface.java b/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/FlexiblePrivacyGroupManagementInterface.java index 76738026cd8..dff393c2a16 100644 --- a/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/FlexiblePrivacyGroupManagementInterface.java +++ b/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/FlexiblePrivacyGroupManagementInterface.java @@ -23,6 +23,7 @@ import org.web3j.abi.TypeReference; import org.web3j.abi.datatypes.Bool; import org.web3j.abi.datatypes.DynamicArray; +import org.web3j.abi.datatypes.DynamicBytes; import org.web3j.abi.datatypes.Function; import org.web3j.abi.datatypes.Type; import org.web3j.abi.datatypes.generated.Bytes32; @@ -44,7 +45,7 @@ * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the codegen module to update. * - *

Generated with web3j version 4.5.16. + *

Generated with web3j version 1.4.1. */ @SuppressWarnings("rawtypes") public class FlexiblePrivacyGroupManagementInterface extends Contract { @@ -107,10 +108,10 @@ public RemoteFunctionCall addParticipants(List publi new Function( FUNC_ADDPARTICIPANTS, Arrays.asList( - new org.web3j.abi.datatypes.DynamicArray( - org.web3j.abi.datatypes.generated.Bytes32.class, + new org.web3j.abi.datatypes.DynamicArray( + org.web3j.abi.datatypes.DynamicBytes.class, org.web3j.abi.Utils.typeMap( - publicEnclaveKeys, org.web3j.abi.datatypes.generated.Bytes32.class))), + publicEnclaveKeys, org.web3j.abi.datatypes.DynamicBytes.class))), Collections.>emptyList()); return executeRemoteCallTransaction(function); } @@ -136,7 +137,7 @@ public RemoteFunctionCall getParticipants() { new Function( FUNC_GETPARTICIPANTS, Arrays.asList(), - Arrays.>asList(new TypeReference>() {})); + Arrays.>asList(new TypeReference>() {})); return new RemoteFunctionCall( function, new Callable() { @@ -168,7 +169,7 @@ public RemoteFunctionCall removeParticipant(byte[] participa final Function function = new Function( FUNC_REMOVEPARTICIPANT, - Arrays.asList(new org.web3j.abi.datatypes.generated.Bytes32(participant)), + Arrays.asList(new org.web3j.abi.datatypes.DynamicBytes(participant)), Collections.>emptyList()); return executeRemoteCallTransaction(function); } diff --git a/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/FlexiblePrivacyGroupManagementProxy.java b/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/FlexiblePrivacyGroupManagementProxy.java index 96b22afe95c..e596a5cd4aa 100644 --- a/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/FlexiblePrivacyGroupManagementProxy.java +++ b/privacy-contracts/src/main/java/org/hyperledger/besu/privacy/contracts/generated/FlexiblePrivacyGroupManagementProxy.java @@ -29,6 +29,7 @@ import org.web3j.abi.datatypes.Address; import org.web3j.abi.datatypes.Bool; import org.web3j.abi.datatypes.DynamicArray; +import org.web3j.abi.datatypes.DynamicBytes; import org.web3j.abi.datatypes.Event; import org.web3j.abi.datatypes.Type; import org.web3j.abi.datatypes.generated.Bytes32; @@ -54,12 +55,12 @@ * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the codegen module to update. * - *

Generated with web3j version 4.5.16. + *

Generated with web3j version 1.4.1. */ @SuppressWarnings("rawtypes") public class FlexiblePrivacyGroupManagementProxy extends Contract { public static final String BINARY = - "608060405234801561001057600080fd5b50604051610fa6380380610fa68339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610f12806100946000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639738968c116100665780639738968c146101b8578063a69df4b5146101d8578063b4926e25146101e2578063f83d08ba146102b0578063fd017797146102ba5761009e565b80630d8e6e2c146100a35780633659cfe6146100c15780635aa68ac0146101055780635c60da1b1461016457806378b9033714610198575b600080fd5b6100ab6102fe565b6040518082815260200191505060405180910390f35b610103600480360360208110156100d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103ab565b005b61010d61083e565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610150578082015181840152602081019050610135565b505050509050019250505060405180910390f35b61016c610987565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a06109ab565b60405180821515815260200191505060405180910390f35b6101c0610a58565b60405180821515815260200191505060405180910390f35b6101e0610b07565b005b610298600480360360208110156101f857600080fd5b810190808035906020019064010000000081111561021557600080fd5b82018360208201111561022757600080fd5b8035906020019184602083028401116401000000008311171561024957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610b90565b60405180821515815260200191505060405180910390f35b6102b8610c8d565b005b6102e6600480360360208110156102d057600080fd5b8101908080359060200190929190505050610d16565b60405180821515815260200191505060405180910390f35b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16630d8e6e2c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561036a57600080fd5b505afa15801561037e573d6000803e3d6000fd5b505050506040513d602081101561039457600080fd5b810190808051906020019092919050505091505090565b3073ffffffffffffffffffffffffffffffffffffffff166378b903376040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f157600080fd5b505afa158015610405573d6000803e3d6000fd5b505050506040513d602081101561041b57600080fd5b810190808051906020019092919050505061049e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f54686520636f6e7472616374206973206c6f636b65642e00000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610543576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526054815260200180610e5a6054913960600191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16639738968c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058b57600080fd5b505af115801561059f573d6000803e3d6000fd5b505050506040513d60208110156105b557600080fd5b810190808051906020019092919050505061061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180610eae602f913960400191505060405180910390fd5b60603073ffffffffffffffffffffffffffffffffffffffff16635aa68ac06040518163ffffffff1660e01b815260040160006040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156106a157600080fd5b81019080805160405193929190846401000000008211156106c157600080fd5b838201915060208201858111156106d757600080fd5b82518660208202830111640100000000821117156106f457600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561072b578082015181840152602081019050610710565b50505050905001604052505050905061074382610e16565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b4926e25836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019060200280838360005b838110156107d85780820151818401526020810190506107bd565b5050505090500192505050602060405180830381600087803b1580156107fd57600080fd5b505af1158015610811573d6000803e3d6000fd5b505050506040513d602081101561082757600080fd5b810190808051906020019092919050505050505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16635aa68ac06040518163ffffffff1660e01b815260040160006040518083038186803b1580156108ac57600080fd5b505afa1580156108c0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156108ea57600080fd5b810190808051604051939291908464010000000082111561090a57600080fd5b8382019150602082018581111561092057600080fd5b825186602082028301116401000000008211171561093d57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015610974578082015181840152602081019050610959565b5050505090500160405250505091505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166378b903376040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1757600080fd5b505afa158015610a2b573d6000803e3d6000fd5b505050506040513d6020811015610a4157600080fd5b810190808051906020019092919050505091505090565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639738968c6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610ac657600080fd5b505af1158015610ada573d6000803e3d6000fd5b505050506040513d6020811015610af057600080fd5b810190808051906020019092919050505091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a69df4b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b7557600080fd5b505af1158015610b89573d6000803e3d6000fd5b5050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b4926e25846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019060200280838360005b83811015610c25578082015181840152602081019050610c0a565b5050505090500192505050602060405180830381600087803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b505050506040513d6020811015610c7457600080fd5b8101908080519060200190929190505050915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663f83d08ba6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b5050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663fd017797856040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015610d9157600080fd5b505af1158015610da5573d6000803e3d6000fd5b505050506040513d6020811015610dbb57600080fd5b810190808051906020019092919050505090508015610e0c577fef2df0cc0f44b5a36a7de9951ef49ba4d861649244ff89bcf7ffaa1ac7291e89846040518082815260200191505060405180910390a15b8092505050919050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe54686520636f6e747261637420746f207570677261646520746f2068617320746f20626520646966666572656e742066726f6d207468652063757272656e74206d616e6167656d656e7420636f6e74726163742e4e6f7420616c6c6f77656420746f207570677261646520746865206d616e6167656d656e7420636f6e74726163742ea26469706673582212207d77b2288fb78b354ca3a252d7513de3d808fcaa42e73f475b95f412c24a314f64736f6c634300060c0033"; + "60806040523480156200001157600080fd5b5060405162001575380380620015758339818101604052810190620000379190620000e8565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200011a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b08262000083565b9050919050565b620000c281620000a3565b8114620000ce57600080fd5b50565b600081519050620000e281620000b7565b92915050565b6000602082840312156200010157620001006200007e565b5b60006200011184828501620000d1565b91505092915050565b61144b806200012a6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806378b903371161006657806378b9033714610149578063965a25ef146101675780639738968c14610197578063a69df4b5146101b5578063f83d08ba146101bf5761009e565b80630d8e6e2c146100a35780631f52a8ee146100c15780633659cfe6146100f15780635aa68ac01461010d5780635c60da1b1461012b575b600080fd5b6100ab6101c9565b6040516100b89190610a7e565b60405180910390f35b6100db60048036038101906100d69190610bf3565b610264565b6040516100e89190610c57565b60405180910390f35b61010b60048036038101906101069190610cd0565b610352565b005b610115610668565b6040516101229190610e47565b60405180910390f35b61013361070a565b6040516101409190610e78565b60405180910390f35b61015161072e565b60405161015e9190610c57565b60405180910390f35b610181600480360381019061017c9190610f79565b6107c9565b60405161018e9190610c57565b60405180910390f35b61019f610873565b6040516101ac9190610c57565b60405180910390f35b6101bd610910565b005b6101c7610999565b005b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16630d8e6e2c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561023a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025e9190610fee565b91505090565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16631f52a8ee856040518263ffffffff1660e01b81526004016102c59190611065565b6020604051808303816000875af11580156102e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030891906110b3565b90508015610348577f52213552a930e6de0c0d7df74ece31dac1306b2c7e200ceded7a4442853189b58460405161033f9190611065565b60405180910390a15b8092505050919050565b3073ffffffffffffffffffffffffffffffffffffffff166378b903376040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c191906110b3565b610400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f79061113d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561048f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610486906111f5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16639738968c6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156104dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050091906110b3565b61053f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053690611287565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16635aa68ac06040518163ffffffff1660e01b8152600401600060405180830381865afa15801561058c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906105b591906113cc565b90506105c082610a22565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663965a25ef836040518263ffffffff1660e01b815260040161061f9190610e47565b6020604051808303816000875af115801561063e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066291906110b3565b50505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16635aa68ac06040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106db573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061070491906113cc565b91505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166378b903376040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c391906110b3565b91505090565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663965a25ef846040518263ffffffff1660e01b81526004016108289190610e47565b6020604051808303816000875af1158015610847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086b91906110b3565b915050919050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639738968c6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090a91906110b3565b91505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a69df4b56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561097e57600080fd5b505af1158015610992573d6000803e3d6000fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663f83d08ba6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b5050505050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b610a7881610a65565b82525050565b6000602082019050610a936000830184610a6f565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610b0082610ab7565b810181811067ffffffffffffffff82111715610b1f57610b1e610ac8565b5b80604052505050565b6000610b32610a99565b9050610b3e8282610af7565b919050565b600067ffffffffffffffff821115610b5e57610b5d610ac8565b5b610b6782610ab7565b9050602081019050919050565b82818337600083830152505050565b6000610b96610b9184610b43565b610b28565b905082815260208101848484011115610bb257610bb1610ab2565b5b610bbd848285610b74565b509392505050565b600082601f830112610bda57610bd9610aad565b5b8135610bea848260208601610b83565b91505092915050565b600060208284031215610c0957610c08610aa3565b5b600082013567ffffffffffffffff811115610c2757610c26610aa8565b5b610c3384828501610bc5565b91505092915050565b60008115159050919050565b610c5181610c3c565b82525050565b6000602082019050610c6c6000830184610c48565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c9d82610c72565b9050919050565b610cad81610c92565b8114610cb857600080fd5b50565b600081359050610cca81610ca4565b92915050565b600060208284031215610ce657610ce5610aa3565b5b6000610cf484828501610cbb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d63578082015181840152602081019050610d48565b83811115610d72576000848401525b50505050565b6000610d8382610d29565b610d8d8185610d34565b9350610d9d818560208601610d45565b610da681610ab7565b840191505092915050565b6000610dbd8383610d78565b905092915050565b6000602082019050919050565b6000610ddd82610cfd565b610de78185610d08565b935083602082028501610df985610d19565b8060005b85811015610e355784840389528151610e168582610db1565b9450610e2183610dc5565b925060208a01995050600181019050610dfd565b50829750879550505050505092915050565b60006020820190508181036000830152610e618184610dd2565b905092915050565b610e7281610c92565b82525050565b6000602082019050610e8d6000830184610e69565b92915050565b600067ffffffffffffffff821115610eae57610ead610ac8565b5b602082029050602081019050919050565b600080fd5b6000610ed7610ed284610e93565b610b28565b90508083825260208201905060208402830185811115610efa57610ef9610ebf565b5b835b81811015610f4157803567ffffffffffffffff811115610f1f57610f1e610aad565b5b808601610f2c8982610bc5565b85526020850194505050602081019050610efc565b5050509392505050565b600082601f830112610f6057610f5f610aad565b5b8135610f70848260208601610ec4565b91505092915050565b600060208284031215610f8f57610f8e610aa3565b5b600082013567ffffffffffffffff811115610fad57610fac610aa8565b5b610fb984828501610f4b565b91505092915050565b610fcb81610a65565b8114610fd657600080fd5b50565b600081519050610fe881610fc2565b92915050565b60006020828403121561100457611003610aa3565b5b600061101284828501610fd9565b91505092915050565b600082825260208201905092915050565b600061103782610d29565b611041818561101b565b9350611051818560208601610d45565b61105a81610ab7565b840191505092915050565b6000602082019050818103600083015261107f818461102c565b905092915050565b61109081610c3c565b811461109b57600080fd5b50565b6000815190506110ad81611087565b92915050565b6000602082840312156110c9576110c8610aa3565b5b60006110d78482850161109e565b91505092915050565b600082825260208201905092915050565b7f54686520636f6e7472616374206973206c6f636b65642e000000000000000000600082015250565b60006111276017836110e0565b9150611132826110f1565b602082019050919050565b600060208201905081810360008301526111568161111a565b9050919050565b7f54686520636f6e747261637420746f207570677261646520746f20686173207460008201527f6f20626520646966666572656e742066726f6d207468652063757272656e742060208201527f6d616e6167656d656e7420636f6e74726163742e000000000000000000000000604082015250565b60006111df6054836110e0565b91506111ea8261115d565b606082019050919050565b6000602082019050818103600083015261120e816111d2565b9050919050565b7f4e6f7420616c6c6f77656420746f207570677261646520746865206d616e616760008201527f656d656e7420636f6e74726163742e0000000000000000000000000000000000602082015250565b6000611271602f836110e0565b915061127c82611215565b604082019050919050565b600060208201905081810360008301526112a081611264565b9050919050565b60006112ba6112b584610b43565b610b28565b9050828152602081018484840111156112d6576112d5610ab2565b5b6112e1848285610d45565b509392505050565b600082601f8301126112fe576112fd610aad565b5b815161130e8482602086016112a7565b91505092915050565b600061132a61132584610e93565b610b28565b9050808382526020820190506020840283018581111561134d5761134c610ebf565b5b835b8181101561139457805167ffffffffffffffff81111561137257611371610aad565b5b80860161137f89826112e9565b8552602085019450505060208101905061134f565b5050509392505050565b600082601f8301126113b3576113b2610aad565b5b81516113c3848260208601611317565b91505092915050565b6000602082840312156113e2576113e1610aa3565b5b600082015167ffffffffffffffff811115611400576113ff610aa8565b5b61140c8482850161139e565b9150509291505056fea26469706673582212204124f39a2be595e1342726249c5797782cd26b3fc6fdc2430537b7a34228ada564736f6c634300080c0033"; public static final String FUNC_ADDPARTICIPANTS = "addParticipants"; @@ -83,7 +84,9 @@ public class FlexiblePrivacyGroupManagementProxy extends Contract { public static final Event PARTICIPANTREMOVED_EVENT = new Event( - "ParticipantRemoved", Arrays.>asList(new TypeReference() {})); + "ParticipantRemoved", + Arrays.>asList(new TypeReference() {})); + ; @Deprecated protected FlexiblePrivacyGroupManagementProxy( @@ -168,10 +171,10 @@ public RemoteFunctionCall addParticipants(List _publ new org.web3j.abi.datatypes.Function( FUNC_ADDPARTICIPANTS, Arrays.asList( - new org.web3j.abi.datatypes.DynamicArray( - org.web3j.abi.datatypes.generated.Bytes32.class, + new org.web3j.abi.datatypes.DynamicArray( + org.web3j.abi.datatypes.DynamicBytes.class, org.web3j.abi.Utils.typeMap( - _publicEnclaveKeys, org.web3j.abi.datatypes.generated.Bytes32.class))), + _publicEnclaveKeys, org.web3j.abi.datatypes.DynamicBytes.class))), Collections.>emptyList()); return executeRemoteCallTransaction(function); } @@ -197,7 +200,7 @@ public RemoteFunctionCall getParticipants() { new org.web3j.abi.datatypes.Function( FUNC_GETPARTICIPANTS, Arrays.asList(), - Arrays.>asList(new TypeReference>() {})); + Arrays.>asList(new TypeReference>() {})); return new RemoteFunctionCall( function, new Callable() { @@ -239,7 +242,7 @@ public RemoteFunctionCall removeParticipant(byte[] _particip final org.web3j.abi.datatypes.Function function = new org.web3j.abi.datatypes.Function( FUNC_REMOVEPARTICIPANT, - Arrays.asList(new org.web3j.abi.datatypes.generated.Bytes32(_participant)), + Arrays.asList(new org.web3j.abi.datatypes.DynamicBytes(_participant)), Collections.>emptyList()); return executeRemoteCallTransaction(function); } diff --git a/privacy-contracts/src/main/solidity/DefaultFlexiblePrivacyGroupManagementContract.sol b/privacy-contracts/src/main/solidity/DefaultFlexiblePrivacyGroupManagementContract.sol index 2ca8a511ece..ad088203c6e 100644 --- a/privacy-contracts/src/main/solidity/DefaultFlexiblePrivacyGroupManagementContract.sol +++ b/privacy-contracts/src/main/solidity/DefaultFlexiblePrivacyGroupManagementContract.sol @@ -12,7 +12,8 @@ * * SPDX-License-Identifier: Apache-2.0 */ -pragma solidity ^0.6.0; +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; import "./FlexiblePrivacyGroupManagementInterface.sol"; contract DefaultFlexiblePrivacyGroupManagementContract is FlexiblePrivacyGroupManagementInterface { @@ -20,8 +21,8 @@ contract DefaultFlexiblePrivacyGroupManagementContract is FlexiblePrivacyGroupMa address private _owner; bool private _canExecute; bytes32 private _version; - bytes32[] private distributionList; - mapping(bytes32 => uint256) private distributionIndexOf; + bytes[] private distributionList; + mapping(bytes => uint256) private distributionIndexOf; function getVersion() external view override returns (bytes32) { return _version; @@ -43,10 +44,10 @@ contract DefaultFlexiblePrivacyGroupManagementContract is FlexiblePrivacyGroupMa _canExecute = true; } - function addParticipants(bytes32[] memory _publicEnclaveKeys) public override returns (bool) { + function addParticipants(bytes[] memory _publicEnclaveKeys) public override returns (bool) { require(!_canExecute); if (_owner == address(0x0)) { - // The account creating this group is set to be the owner + // The account creating this group is set to be the owner _owner = tx.origin; } require(tx.origin == _owner, "Origin not the owner."); @@ -56,7 +57,7 @@ contract DefaultFlexiblePrivacyGroupManagementContract is FlexiblePrivacyGroupMa return result; } - function removeParticipant(bytes32 _participant) public override returns (bool) { + function removeParticipant(bytes memory _participant) public override returns (bool) { require(_canExecute); require(tx.origin == _owner, "Origin not the owner."); bool result = removeInternal(_participant); @@ -64,17 +65,17 @@ contract DefaultFlexiblePrivacyGroupManagementContract is FlexiblePrivacyGroupMa return result; } - function getParticipants() public view override returns (bytes32[] memory) { + function getParticipants() public view override returns (bytes[] memory) { return distributionList; } - function canUpgrade() external override returns (bool) { + function canUpgrade() external view override returns (bool) { return tx.origin == _owner; } //internal functions - function addAll(bytes32[] memory _publicEnclaveKeys) internal returns (bool) { + function addAll(bytes[] memory _publicEnclaveKeys) internal returns (bool) { bool allAdded = true; for (uint i = 0; i < _publicEnclaveKeys.length; i++) { if (isMember(_publicEnclaveKeys[i])) { @@ -90,11 +91,11 @@ contract DefaultFlexiblePrivacyGroupManagementContract is FlexiblePrivacyGroupMa return allAdded; } - function isMember(bytes32 _publicEnclaveKey) internal view returns (bool) { + function isMember(bytes memory _publicEnclaveKey) internal view returns (bool) { return distributionIndexOf[_publicEnclaveKey] != 0; } - function addParticipant(bytes32 _publicEnclaveKey) internal returns (bool) { + function addParticipant(bytes memory _publicEnclaveKey) internal returns (bool) { if (distributionIndexOf[_publicEnclaveKey] == 0) { distributionList.push(_publicEnclaveKey); distributionIndexOf[_publicEnclaveKey] = distributionList.length; @@ -103,12 +104,12 @@ contract DefaultFlexiblePrivacyGroupManagementContract is FlexiblePrivacyGroupMa return false; } - function removeInternal(bytes32 _participant) internal returns (bool) { + function removeInternal(bytes memory _participant) internal returns (bool) { uint256 index = distributionIndexOf[_participant]; if (index > 0 && index <= distributionList.length) { //move last address into index being vacated (unless we are dealing with last index) if (index != distributionList.length) { - bytes32 lastPublicKey = distributionList[distributionList.length - 1]; + bytes storage lastPublicKey = distributionList[distributionList.length - 1]; distributionList[index - 1] = lastPublicKey; distributionIndexOf[lastPublicKey] = index; } @@ -119,13 +120,13 @@ contract DefaultFlexiblePrivacyGroupManagementContract is FlexiblePrivacyGroupMa return false; } - function updateVersion() internal returns (int) { - _version = keccak256(abi.encodePacked(blockhash(block.number-1), block.coinbase, distributionList)); + function updateVersion() internal { + _version = keccak256(abi.encode(blockhash(block.number-1), block.coinbase, distributionList)); } event ParticipantAdded( bool success, - bytes32 publicEnclaveKey, + bytes publicEnclaveKey, string message ); } diff --git a/privacy-contracts/src/main/solidity/FlexiblePrivacyGroupManagementInterface.sol b/privacy-contracts/src/main/solidity/FlexiblePrivacyGroupManagementInterface.sol index 45a4104347e..0b3131bef9f 100644 --- a/privacy-contracts/src/main/solidity/FlexiblePrivacyGroupManagementInterface.sol +++ b/privacy-contracts/src/main/solidity/FlexiblePrivacyGroupManagementInterface.sol @@ -12,14 +12,16 @@ * * SPDX-License-Identifier: Apache-2.0 */ -pragma solidity ^0.6.0; +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + interface FlexiblePrivacyGroupManagementInterface { - function addParticipants(bytes32[] calldata publicEnclaveKeys) external returns (bool); + function addParticipants(bytes[] calldata publicEnclaveKeys) external returns (bool); - function removeParticipant(bytes32 participant) external returns (bool); + function removeParticipant(bytes calldata participant) external returns (bool); - function getParticipants() external view returns (bytes32[] memory); + function getParticipants() external view returns (bytes[] memory); function lock() external; diff --git a/privacy-contracts/src/main/solidity/FlexiblePrivacyGroupManagementProxy.sol b/privacy-contracts/src/main/solidity/FlexiblePrivacyGroupManagementProxy.sol index 28f47c973ff..0ff047679f6 100644 --- a/privacy-contracts/src/main/solidity/FlexiblePrivacyGroupManagementProxy.sol +++ b/privacy-contracts/src/main/solidity/FlexiblePrivacyGroupManagementProxy.sol @@ -12,14 +12,15 @@ * * SPDX-License-Identifier: Apache-2.0 */ -pragma solidity ^0.6.0; +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; import "./FlexiblePrivacyGroupManagementInterface.sol"; contract FlexiblePrivacyGroupManagementProxy is FlexiblePrivacyGroupManagementInterface { address public implementation; - constructor(address _implementation) public { + constructor(address _implementation) { implementation = _implementation; } @@ -27,23 +28,23 @@ contract FlexiblePrivacyGroupManagementProxy is FlexiblePrivacyGroupManagementIn implementation = _newImp; } - function addParticipants(bytes32[] memory _publicEnclaveKeys) public override returns (bool) { + function addParticipants(bytes[] memory _publicEnclaveKeys) public override returns (bool) { FlexiblePrivacyGroupManagementInterface privacyInterface = FlexiblePrivacyGroupManagementInterface(implementation); return privacyInterface.addParticipants(_publicEnclaveKeys); } - function getParticipants() view public override returns (bytes32[] memory) { + function getParticipants() view public override returns (bytes[] memory) { FlexiblePrivacyGroupManagementInterface privacyInterface = FlexiblePrivacyGroupManagementInterface(implementation); return privacyInterface.getParticipants(); } - function removeParticipant(bytes32 _participant) public override returns (bool) { + function removeParticipant(bytes memory _participant) public override returns (bool) { FlexiblePrivacyGroupManagementInterface privacyInterface = FlexiblePrivacyGroupManagementInterface(implementation); bool result = privacyInterface.removeParticipant(_participant); if (result) { emit ParticipantRemoved(_participant); } - return result; + return result; } function lock() public override { @@ -75,15 +76,14 @@ contract FlexiblePrivacyGroupManagementProxy is FlexiblePrivacyGroupManagementIn require(this.canExecute(), "The contract is locked."); require(implementation != _newImplementation, "The contract to upgrade to has to be different from the current management contract."); require(this.canUpgrade(), "Not allowed to upgrade the management contract."); - bytes32[] memory participants = this.getParticipants(); + bytes[] memory participants = this.getParticipants(); _setImplementation(_newImplementation); FlexiblePrivacyGroupManagementInterface privacyInterface = FlexiblePrivacyGroupManagementInterface(implementation); privacyInterface.addParticipants(participants); } event ParticipantRemoved( - bytes32 publicEnclaveKey + bytes publicEnclaveKey ); - } diff --git a/privacy-contracts/src/main/solidity/generateWrappers.sh b/privacy-contracts/src/main/solidity/generateWrappers.sh index a78f3781c24..068d7a1e3ac 100755 --- a/privacy-contracts/src/main/solidity/generateWrappers.sh +++ b/privacy-contracts/src/main/solidity/generateWrappers.sh @@ -16,7 +16,7 @@ done for target in ${targets}; do - web3j solidity generate \ + web3j generate solidity \ -b build/${target}.bin \ -a build/${target}.abi \ -o ../java \ diff --git a/testutil/src/main/java/org/hyperledger/enclave/testutil/EnclaveKeyConfiguration.java b/testutil/src/main/java/org/hyperledger/enclave/testutil/EnclaveKeyConfiguration.java index 929f2ac489e..846378995a6 100644 --- a/testutil/src/main/java/org/hyperledger/enclave/testutil/EnclaveKeyConfiguration.java +++ b/testutil/src/main/java/org/hyperledger/enclave/testutil/EnclaveKeyConfiguration.java @@ -33,10 +33,6 @@ public EnclaveKeyConfiguration( this.enclaveEncryptorType = enclaveEncryptorType; } - public EnclaveKeyConfiguration(final String[] pubKeyPaths, final String[] privKeyPaths) { - this(pubKeyPaths, privKeyPaths, EnclaveEncryptorType.NACL); - } - public String[] getPubKeyPaths() { return pubKeyPaths; }