diff --git a/src/main/java/com/github/iotexproject/antenna/action/Envelop.java b/src/main/java/com/github/iotexproject/antenna/action/Envelop.java index 769aeef..231aec1 100644 --- a/src/main/java/com/github/iotexproject/antenna/action/Envelop.java +++ b/src/main/java/com/github/iotexproject/antenna/action/Envelop.java @@ -48,6 +48,8 @@ public class Envelop { private StakeTransferOwnership stakeTransferOwnership; private CandidateRegister candidateRegister; private CandidateBasicInfo candidateUpdate; + private SetVoterRewardOptIn setVoterRewardOptIn; + private SetVoterRewardDestination setVoterRewardDestination; private StartSubChain startSubChain; private StopSubChain stopSubChain; private PutBlock putBlock; @@ -141,6 +143,17 @@ public static Envelop deserialize(byte[] bytes) throws IllegalArgumentException if (core.getCandidateUpdate().toByteArray().length > 0) { envelop.setCandidateUpdate(core.getCandidateUpdate()); } + // hasX(), not toByteArray().length: SetVoterRewardOptIn carries no + // payload -- the sender is the delegate -- so it serializes to zero + // bytes and a length check drops it silently. The oneof's presence + // bit is the only thing that distinguishes "opt in" from "no action + // set at all". + if (core.hasSetVoterRewardOptIn()) { + envelop.setSetVoterRewardOptIn(core.getSetVoterRewardOptIn()); + } + if (core.hasSetVoterRewardDestination()) { + envelop.setSetVoterRewardDestination(core.getSetVoterRewardDestination()); + } return envelop; } catch (InvalidProtocolBufferException e) { @@ -211,6 +224,12 @@ public ActionCore core() { if (candidateUpdate != null) { builder.setCandidateUpdate(candidateUpdate); } + if (setVoterRewardOptIn != null) { + builder.setSetVoterRewardOptIn(setVoterRewardOptIn); + } + if (setVoterRewardDestination != null) { + builder.setSetVoterRewardDestination(setVoterRewardDestination); + } if (startSubChain != null) { builder.setStartSubChain(startSubChain); } diff --git a/src/main/java/com/github/iotexproject/antenna/action/method/AbstractMethod.java b/src/main/java/com/github/iotexproject/antenna/action/method/AbstractMethod.java index 11703e8..45ff672 100644 --- a/src/main/java/com/github/iotexproject/antenna/action/method/AbstractMethod.java +++ b/src/main/java/com/github/iotexproject/antenna/action/method/AbstractMethod.java @@ -7,6 +7,8 @@ import com.github.iotexproject.antenna.rpc.RPCMethod; import com.github.iotexproject.antenna.utils.Numeric; import com.github.iotexproject.grpc.api.*; +import com.github.iotexproject.grpc.types.CandidateBasicInfo; +import com.google.protobuf.ByteString; import java.math.BigInteger; @@ -41,6 +43,63 @@ protected Envelop baseEnvelop(ActionRequest request) { return Envelop.builder().version(1).nonce(request.getNonce()).gasLimit(request.getGasLimit()).gasPrice(request.getGasPrice()).chainID(client.getChainID()).build(); } + /** + * Builds the CandidateBasicInfo shared by candidateRegister and + * candidateUpdate. + * + * It lives here because each of those actions built the message twice -- + * once in execute() and once in signedAction() -- from two copies of the + * same code. A field added to one copy and not the other produces an action + * that is correct when sent and wrong when signed offline, or the reverse, + * and nothing in either path notices. + * + * A null or empty BLS field is left unset rather than set to empty bytes, + * so an update that does not mention a key leaves an already registered one + * alone -- which is what the protocol's optional-key branch expects. + */ + protected static CandidateBasicInfo candidateBasicInfo( + String name, String operatorAddress, String rewardAddress, String blsPubKey, String blsPop) { + byte[] pubKey = hexToBytes(blsPubKey); + byte[] pop = hexToBytes(blsPop); + // Unconditionally invalid, in every fork era: the chain rejects it at + // validation, before a receipt exists, so the sender gets a bare RPC + // error with no action hash to look up. Saying so here is cheaper. + if (pubKey.length == 0 && pop.length > 0) { + throw new IllegalArgumentException("blsPop requires blsPubKey"); + } + CandidateBasicInfo.Builder builder = CandidateBasicInfo.newBuilder() + .setName(name) + .setOperatorAddress(operatorAddress) + .setRewardAddress(rewardAddress); + if (pubKey.length > 0) { + builder.setBlsPubKey(ByteString.copyFrom(pubKey)); + } + if (pop.length > 0) { + builder.setBlsPop(ByteString.copyFrom(pop)); + } + return builder.build(); + } + + /** + * Decodes hex that may carry a 0x prefix. + * + * Numeric.hexStringToByteArray does not strip one: it reads '0' and 'x' as + * a byte, and Character.digit('x', 16) is -1, so the result is silently + * corrupt and the same length a caller would expect. BLS keys are quoted + * with the prefix nearly everywhere they are produced, so the two paths + * that take one go through this instead. + */ + private static byte[] hexToBytes(String hex) { + if (hex == null) { + return new byte[]{}; + } + String trimmed = hex.trim(); + if (trimmed.startsWith("0x") || trimmed.startsWith("0X")) { + trimmed = trimmed.substring(2); + } + return Numeric.hexStringToByteArray(trimmed); + } + protected String sendAction(Envelop envelop) { SendActionResponse response = this.client.sendAction(SendActionRequest.newBuilder().setAction(signAction(envelop).action()).build()); return response.getActionHash(); diff --git a/src/main/java/com/github/iotexproject/antenna/action/method/CandidateRegisterMethod.java b/src/main/java/com/github/iotexproject/antenna/action/method/CandidateRegisterMethod.java index 6d634b0..a96d2f0 100644 --- a/src/main/java/com/github/iotexproject/antenna/action/method/CandidateRegisterMethod.java +++ b/src/main/java/com/github/iotexproject/antenna/action/method/CandidateRegisterMethod.java @@ -5,7 +5,6 @@ import com.github.iotexproject.antenna.rpc.RPCMethod; import com.github.iotexproject.antenna.utils.Numeric; import com.github.iotexproject.grpc.types.Action; -import com.github.iotexproject.grpc.types.CandidateBasicInfo; import com.github.iotexproject.grpc.types.CandidateRegister; import com.google.protobuf.ByteString; @@ -27,11 +26,12 @@ public CandidateRegisterMethod(RPCMethod client, CandidateRegisterRequest reques @Override public String execute() { envelop.setCandidateRegister(CandidateRegister.newBuilder() - .setCandidate(CandidateBasicInfo.newBuilder() - .setName(request.getName()) - .setOperatorAddress(request.getOperatorAddress()) - .setRewardAddress(request.getRewardAddress()) - .build()) + .setCandidate(candidateBasicInfo( + request.getName(), + request.getOperatorAddress(), + request.getRewardAddress(), + request.getBlsPubKey(), + request.getBlsPop())) .setStakedAmount(request.getStakedAmount()) .setStakedDuration(request.getStakedDuration()) .setAutoStake(request.isAutoStake()) @@ -43,11 +43,12 @@ public String execute() { public Action signedAction() { envelop.setCandidateRegister(CandidateRegister.newBuilder() - .setCandidate(CandidateBasicInfo.newBuilder() - .setName(request.getName()) - .setOperatorAddress(request.getOperatorAddress()) - .setRewardAddress(request.getRewardAddress()) - .build()) + .setCandidate(candidateBasicInfo( + request.getName(), + request.getOperatorAddress(), + request.getRewardAddress(), + request.getBlsPubKey(), + request.getBlsPop())) .setStakedAmount(request.getStakedAmount()) .setStakedDuration(request.getStakedDuration()) .setAutoStake(request.isAutoStake()) diff --git a/src/main/java/com/github/iotexproject/antenna/action/method/CandidateUpdateMethod.java b/src/main/java/com/github/iotexproject/antenna/action/method/CandidateUpdateMethod.java index e654920..ef13d21 100644 --- a/src/main/java/com/github/iotexproject/antenna/action/method/CandidateUpdateMethod.java +++ b/src/main/java/com/github/iotexproject/antenna/action/method/CandidateUpdateMethod.java @@ -4,7 +4,6 @@ import com.github.iotexproject.antenna.protocol.CandidateUpdateRequest; import com.github.iotexproject.antenna.rpc.RPCMethod; import com.github.iotexproject.grpc.types.Action; -import com.github.iotexproject.grpc.types.CandidateBasicInfo; /** * CandidateUpdate method. @@ -23,20 +22,22 @@ public CandidateUpdateMethod(RPCMethod client, CandidateUpdateRequest request) { @Override public String execute() { - envelop.setCandidateUpdate(CandidateBasicInfo.newBuilder() - .setName(request.getName()) - .setOperatorAddress(request.getOperatorAddress()) - .setRewardAddress(request.getRewardAddress()) - .build()); + envelop.setCandidateUpdate(candidateBasicInfo( + request.getName(), + request.getOperatorAddress(), + request.getRewardAddress(), + request.getBlsPubKey(), + request.getBlsPop())); return sendAction(envelop); } public Action signedAction() { - envelop.setCandidateUpdate(CandidateBasicInfo.newBuilder() - .setName(request.getName()) - .setOperatorAddress(request.getOperatorAddress()) - .setRewardAddress(request.getRewardAddress()) - .build()); + envelop.setCandidateUpdate(candidateBasicInfo( + request.getName(), + request.getOperatorAddress(), + request.getRewardAddress(), + request.getBlsPubKey(), + request.getBlsPop())); return signAction(envelop).action(); } } diff --git a/src/main/java/com/github/iotexproject/antenna/action/method/SetVoterRewardDestinationMethod.java b/src/main/java/com/github/iotexproject/antenna/action/method/SetVoterRewardDestinationMethod.java new file mode 100644 index 0000000..06efcd6 --- /dev/null +++ b/src/main/java/com/github/iotexproject/antenna/action/method/SetVoterRewardDestinationMethod.java @@ -0,0 +1,46 @@ +package com.github.iotexproject.antenna.action.method; + +import com.github.iotexproject.antenna.action.Envelop; +import com.github.iotexproject.antenna.crypto.Bech32; +import com.github.iotexproject.antenna.protocol.SetVoterRewardDestinationRequest; +import com.github.iotexproject.antenna.rpc.RPCMethod; +import com.github.iotexproject.grpc.types.Action; +import com.github.iotexproject.grpc.types.SetVoterRewardDestination; +import com.google.protobuf.ByteString; + +/** + * SetVoterRewardDestination method. + * + *

The protocol reads the recipient with address.FromBytes, so the io1... + * string is decoded to its 20 raw bytes here. Sending the bech32 text instead + * produces an action that signs and is then rejected on decode. + */ +public class SetVoterRewardDestinationMethod extends AbstractMethod { + private final SetVoterRewardDestinationRequest request; + private final Envelop envelop; + + public SetVoterRewardDestinationMethod(RPCMethod client, SetVoterRewardDestinationRequest request) { + super(client, request.getAccount()); + this.request = request; + this.envelop = baseEnvelop(request); + } + + private SetVoterRewardDestination payload() { + byte[] dec = Bech32.decode(request.getRecipient()).data; + byte[] raw = Bech32.convertBits(dec, 0, dec.length, 5, 8, false); + return SetVoterRewardDestination.newBuilder() + .setRecipient(ByteString.copyFrom(raw)) + .build(); + } + + @Override + public String execute() { + envelop.setSetVoterRewardDestination(payload()); + return sendAction(envelop); + } + + public Action signedAction() { + envelop.setSetVoterRewardDestination(payload()); + return signAction(envelop).action(); + } +} diff --git a/src/main/java/com/github/iotexproject/antenna/action/method/SetVoterRewardOptInMethod.java b/src/main/java/com/github/iotexproject/antenna/action/method/SetVoterRewardOptInMethod.java new file mode 100644 index 0000000..60f9ee0 --- /dev/null +++ b/src/main/java/com/github/iotexproject/antenna/action/method/SetVoterRewardOptInMethod.java @@ -0,0 +1,35 @@ +package com.github.iotexproject.antenna.action.method; + +import com.github.iotexproject.antenna.action.Envelop; +import com.github.iotexproject.antenna.protocol.SetVoterRewardOptInRequest; +import com.github.iotexproject.antenna.rpc.RPCMethod; +import com.github.iotexproject.grpc.types.Action; +import com.github.iotexproject.grpc.types.SetVoterRewardOptIn; + +/** + * SetVoterRewardOptIn method. + * + *

Opts the sending delegate into IIP-59 protocol-native voter reward + * distribution. The message is empty by design -- the sender is the delegate -- + * so it must be set on the envelope explicitly rather than left to a + * "non-empty payload" check, which would drop it. + */ +public class SetVoterRewardOptInMethod extends AbstractMethod { + private final Envelop envelop; + + public SetVoterRewardOptInMethod(RPCMethod client, SetVoterRewardOptInRequest request) { + super(client, request.getAccount()); + this.envelop = baseEnvelop(request); + } + + @Override + public String execute() { + envelop.setSetVoterRewardOptIn(SetVoterRewardOptIn.newBuilder().build()); + return sendAction(envelop); + } + + public Action signedAction() { + envelop.setSetVoterRewardOptIn(SetVoterRewardOptIn.newBuilder().build()); + return signAction(envelop).action(); + } +} diff --git a/src/main/java/com/github/iotexproject/antenna/protocol/CandidateRegisterRequest.java b/src/main/java/com/github/iotexproject/antenna/protocol/CandidateRegisterRequest.java index a0bac28..963b68d 100644 --- a/src/main/java/com/github/iotexproject/antenna/protocol/CandidateRegisterRequest.java +++ b/src/main/java/com/github/iotexproject/antenna/protocol/CandidateRegisterRequest.java @@ -18,4 +18,18 @@ public class CandidateRegisterRequest extends ActionRequest { private boolean autoStake; private String ownerAddress; private String payload; + + /** + * BLS12-381 public key, hex, with or without a 0x prefix. Optional: leave + * it null to register or update without one, and to leave an already + * registered key untouched. + */ + private String blsPubKey; + /** + * Proof of possession for blsPubKey, hex, with or without a 0x prefix. + * Zanzibar verifies it against the candidate's OWNER address, not the + * sender's and not the operator's, and rejects the action with + * ErrUnauthorizedOperator (203) otherwise. + */ + private String blsPop; } diff --git a/src/main/java/com/github/iotexproject/antenna/protocol/CandidateUpdateRequest.java b/src/main/java/com/github/iotexproject/antenna/protocol/CandidateUpdateRequest.java index 64a1cc8..7d8e99e 100644 --- a/src/main/java/com/github/iotexproject/antenna/protocol/CandidateUpdateRequest.java +++ b/src/main/java/com/github/iotexproject/antenna/protocol/CandidateUpdateRequest.java @@ -12,4 +12,18 @@ public class CandidateUpdateRequest extends ActionRequest { private String name; private String operatorAddress; private String rewardAddress; + + /** + * BLS12-381 public key, hex, with or without a 0x prefix. Optional: leave + * it null to register or update without one, and to leave an already + * registered key untouched. + */ + private String blsPubKey; + /** + * Proof of possession for blsPubKey, hex, with or without a 0x prefix. + * Zanzibar verifies it against the candidate's OWNER address, not the + * sender's and not the operator's, and rejects the action with + * ErrUnauthorizedOperator (203) otherwise. + */ + private String blsPop; } diff --git a/src/main/java/com/github/iotexproject/antenna/protocol/SetVoterRewardDestinationRequest.java b/src/main/java/com/github/iotexproject/antenna/protocol/SetVoterRewardDestinationRequest.java new file mode 100644 index 0000000..20ba78d --- /dev/null +++ b/src/main/java/com/github/iotexproject/antenna/protocol/SetVoterRewardDestinationRequest.java @@ -0,0 +1,19 @@ +package com.github.iotexproject.antenna.protocol; + +import lombok.Data; + +/** + * setVoterRewardDestination request. + * + *

Redirects the sender's own IIP-59 voter rewards. Passing the sender's own + * address clears the override. + * + *

The protocol resolves the destination live at drain time rather than + * snapshotting it at the era freeze, so a change made mid-era applies to that + * era's payout. A compound (AutoDeposit) bucket still takes priority over it. + */ +@Data +public class SetVoterRewardDestinationRequest extends ActionRequest { + /** Recipient in io1... form; converted to raw bytes on the wire. */ + private String recipient; +} diff --git a/src/main/java/com/github/iotexproject/antenna/protocol/SetVoterRewardOptInRequest.java b/src/main/java/com/github/iotexproject/antenna/protocol/SetVoterRewardOptInRequest.java new file mode 100644 index 0000000..ff311f1 --- /dev/null +++ b/src/main/java/com/github/iotexproject/antenna/protocol/SetVoterRewardOptInRequest.java @@ -0,0 +1,18 @@ +package com.github.iotexproject.antenna.protocol; + +import lombok.Data; + +/** + * setVoterRewardOptIn request. + * + *

Carries no fields of its own: the sender is the delegate opting in. It is + * one-way -- the protocol has no counterpart action to opt back out. + * + *

Opting in with no reward portions published on the DelegateProfile + * contract is silently harmful rather than rejected. The protocol cannot tell + * "unset" from "explicit zero", falls back to a 100% commission, and pays every + * voter zero while producing successful distributions. Publish portions first. + */ +@Data +public class SetVoterRewardOptInRequest extends ActionRequest { +} diff --git a/src/main/java/com/github/iotexproject/grpc/types/ActionCore.java b/src/main/java/com/github/iotexproject/grpc/types/ActionCore.java index 6f765bf..77befa3 100644 --- a/src/main/java/com/github/iotexproject/grpc/types/ActionCore.java +++ b/src/main/java/com/github/iotexproject/grpc/types/ActionCore.java @@ -94,6 +94,10 @@ public enum ActionCase CANDIDATEENDORSEMENT(51), CANDIDATETRANSFEROWNERSHIP(52), STAKEMIGRATE(53), + CANDIDATEDEACTIVATE(54), + SCHEDULECANDIDATEDEACTIVATION(55), + SETVOTERREWARDOPTIN(57), + SETVOTERREWARDDESTINATION(58), PUTPOLLRESULT(50), ACTION_NOT_SET(0); private final int value; @@ -146,6 +150,10 @@ public static ActionCase forNumber(int value) { case 51: return CANDIDATEENDORSEMENT; case 52: return CANDIDATETRANSFEROWNERSHIP; case 53: return STAKEMIGRATE; + case 54: return CANDIDATEDEACTIVATE; + case 55: return SCHEDULECANDIDATEDEACTIVATION; + case 57: return SETVOTERREWARDOPTIN; + case 58: return SETVOTERREWARDDESTINATION; case 50: return PUTPOLLRESULT; case 0: return ACTION_NOT_SET; default: return null; @@ -1544,6 +1552,130 @@ public com.github.iotexproject.grpc.types.StakeMigrateOrBuilder getStakeMigrateO return com.github.iotexproject.grpc.types.StakeMigrate.getDefaultInstance(); } + public static final int CANDIDATEDEACTIVATE_FIELD_NUMBER = 54; + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + * @return Whether the candidateDeactivate field is set. + */ + @java.lang.Override + public boolean hasCandidateDeactivate() { + return actionCase_ == 54; + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + * @return The candidateDeactivate. + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.CandidateDeactivate getCandidateDeactivate() { + if (actionCase_ == 54) { + return (com.github.iotexproject.grpc.types.CandidateDeactivate) action_; + } + return com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance(); + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.CandidateDeactivateOrBuilder getCandidateDeactivateOrBuilder() { + if (actionCase_ == 54) { + return (com.github.iotexproject.grpc.types.CandidateDeactivate) action_; + } + return com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance(); + } + + public static final int SCHEDULECANDIDATEDEACTIVATION_FIELD_NUMBER = 55; + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + * @return Whether the scheduleCandidateDeactivation field is set. + */ + @java.lang.Override + public boolean hasScheduleCandidateDeactivation() { + return actionCase_ == 55; + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + * @return The scheduleCandidateDeactivation. + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation getScheduleCandidateDeactivation() { + if (actionCase_ == 55) { + return (com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) action_; + } + return com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance(); + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivationOrBuilder getScheduleCandidateDeactivationOrBuilder() { + if (actionCase_ == 55) { + return (com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) action_; + } + return com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance(); + } + + public static final int SETVOTERREWARDOPTIN_FIELD_NUMBER = 57; + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + * @return Whether the setVoterRewardOptIn field is set. + */ + @java.lang.Override + public boolean hasSetVoterRewardOptIn() { + return actionCase_ == 57; + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + * @return The setVoterRewardOptIn. + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardOptIn getSetVoterRewardOptIn() { + if (actionCase_ == 57) { + return (com.github.iotexproject.grpc.types.SetVoterRewardOptIn) action_; + } + return com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance(); + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardOptInOrBuilder getSetVoterRewardOptInOrBuilder() { + if (actionCase_ == 57) { + return (com.github.iotexproject.grpc.types.SetVoterRewardOptIn) action_; + } + return com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance(); + } + + public static final int SETVOTERREWARDDESTINATION_FIELD_NUMBER = 58; + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + * @return Whether the setVoterRewardDestination field is set. + */ + @java.lang.Override + public boolean hasSetVoterRewardDestination() { + return actionCase_ == 58; + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + * @return The setVoterRewardDestination. + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardDestination getSetVoterRewardDestination() { + if (actionCase_ == 58) { + return (com.github.iotexproject.grpc.types.SetVoterRewardDestination) action_; + } + return com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance(); + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardDestinationOrBuilder getSetVoterRewardDestinationOrBuilder() { + if (actionCase_ == 58) { + return (com.github.iotexproject.grpc.types.SetVoterRewardDestination) action_; + } + return com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance(); + } + public static final int PUTPOLLRESULT_FIELD_NUMBER = 50; /** * .iotextypes.PutPollResult putPollResult = 50; @@ -1727,6 +1859,18 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (actionCase_ == 53) { output.writeMessage(53, (com.github.iotexproject.grpc.types.StakeMigrate) action_); } + if (actionCase_ == 54) { + output.writeMessage(54, (com.github.iotexproject.grpc.types.CandidateDeactivate) action_); + } + if (actionCase_ == 55) { + output.writeMessage(55, (com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) action_); + } + if (actionCase_ == 57) { + output.writeMessage(57, (com.github.iotexproject.grpc.types.SetVoterRewardOptIn) action_); + } + if (actionCase_ == 58) { + output.writeMessage(58, (com.github.iotexproject.grpc.types.SetVoterRewardDestination) action_); + } getUnknownFields().writeTo(output); } @@ -1927,6 +2071,22 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(53, (com.github.iotexproject.grpc.types.StakeMigrate) action_); } + if (actionCase_ == 54) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(54, (com.github.iotexproject.grpc.types.CandidateDeactivate) action_); + } + if (actionCase_ == 55) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(55, (com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) action_); + } + if (actionCase_ == 57) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(57, (com.github.iotexproject.grpc.types.SetVoterRewardOptIn) action_); + } + if (actionCase_ == 58) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(58, (com.github.iotexproject.grpc.types.SetVoterRewardDestination) action_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -2105,6 +2265,22 @@ public boolean equals(final java.lang.Object obj) { if (!getStakeMigrate() .equals(other.getStakeMigrate())) return false; break; + case 54: + if (!getCandidateDeactivate() + .equals(other.getCandidateDeactivate())) return false; + break; + case 55: + if (!getScheduleCandidateDeactivation() + .equals(other.getScheduleCandidateDeactivation())) return false; + break; + case 57: + if (!getSetVoterRewardOptIn() + .equals(other.getSetVoterRewardOptIn())) return false; + break; + case 58: + if (!getSetVoterRewardDestination() + .equals(other.getSetVoterRewardDestination())) return false; + break; case 50: if (!getPutPollResult() .equals(other.getPutPollResult())) return false; @@ -2290,6 +2466,22 @@ public int hashCode() { hash = (37 * hash) + STAKEMIGRATE_FIELD_NUMBER; hash = (53 * hash) + getStakeMigrate().hashCode(); break; + case 54: + hash = (37 * hash) + CANDIDATEDEACTIVATE_FIELD_NUMBER; + hash = (53 * hash) + getCandidateDeactivate().hashCode(); + break; + case 55: + hash = (37 * hash) + SCHEDULECANDIDATEDEACTIVATION_FIELD_NUMBER; + hash = (53 * hash) + getScheduleCandidateDeactivation().hashCode(); + break; + case 57: + hash = (37 * hash) + SETVOTERREWARDOPTIN_FIELD_NUMBER; + hash = (53 * hash) + getSetVoterRewardOptIn().hashCode(); + break; + case 58: + hash = (37 * hash) + SETVOTERREWARDDESTINATION_FIELD_NUMBER; + hash = (53 * hash) + getSetVoterRewardDestination().hashCode(); + break; case 50: hash = (37 * hash) + PUTPOLLRESULT_FIELD_NUMBER; hash = (53 * hash) + getPutPollResult().hashCode(); @@ -2566,6 +2758,18 @@ public Builder clear() { if (stakeMigrateBuilder_ != null) { stakeMigrateBuilder_.clear(); } + if (candidateDeactivateBuilder_ != null) { + candidateDeactivateBuilder_.clear(); + } + if (scheduleCandidateDeactivationBuilder_ != null) { + scheduleCandidateDeactivationBuilder_.clear(); + } + if (setVoterRewardOptInBuilder_ != null) { + setVoterRewardOptInBuilder_.clear(); + } + if (setVoterRewardDestinationBuilder_ != null) { + setVoterRewardDestinationBuilder_.clear(); + } if (putPollResultBuilder_ != null) { putPollResultBuilder_.clear(); } @@ -2805,6 +3009,22 @@ private void buildPartialOneofs(com.github.iotexproject.grpc.types.ActionCore re stakeMigrateBuilder_ != null) { result.action_ = stakeMigrateBuilder_.build(); } + if (actionCase_ == 54 && + candidateDeactivateBuilder_ != null) { + result.action_ = candidateDeactivateBuilder_.build(); + } + if (actionCase_ == 55 && + scheduleCandidateDeactivationBuilder_ != null) { + result.action_ = scheduleCandidateDeactivationBuilder_.build(); + } + if (actionCase_ == 57 && + setVoterRewardOptInBuilder_ != null) { + result.action_ = setVoterRewardOptInBuilder_.build(); + } + if (actionCase_ == 58 && + setVoterRewardDestinationBuilder_ != null) { + result.action_ = setVoterRewardDestinationBuilder_.build(); + } if (actionCase_ == 50 && putPollResultBuilder_ != null) { result.action_ = putPollResultBuilder_.build(); @@ -3045,6 +3265,22 @@ public Builder mergeFrom(com.github.iotexproject.grpc.types.ActionCore other) { mergeStakeMigrate(other.getStakeMigrate()); break; } + case CANDIDATEDEACTIVATE: { + mergeCandidateDeactivate(other.getCandidateDeactivate()); + break; + } + case SCHEDULECANDIDATEDEACTIVATION: { + mergeScheduleCandidateDeactivation(other.getScheduleCandidateDeactivation()); + break; + } + case SETVOTERREWARDOPTIN: { + mergeSetVoterRewardOptIn(other.getSetVoterRewardOptIn()); + break; + } + case SETVOTERREWARDDESTINATION: { + mergeSetVoterRewardDestination(other.getSetVoterRewardDestination()); + break; + } case PUTPOLLRESULT: { mergePutPollResult(other.getPutPollResult()); break; @@ -3397,6 +3633,34 @@ public Builder mergeFrom( actionCase_ = 53; break; } // case 426 + case 434: { + input.readMessage( + internalGetCandidateDeactivateFieldBuilder().getBuilder(), + extensionRegistry); + actionCase_ = 54; + break; + } // case 434 + case 442: { + input.readMessage( + internalGetScheduleCandidateDeactivationFieldBuilder().getBuilder(), + extensionRegistry); + actionCase_ = 55; + break; + } // case 442 + case 458: { + input.readMessage( + internalGetSetVoterRewardOptInFieldBuilder().getBuilder(), + extensionRegistry); + actionCase_ = 57; + break; + } // case 458 + case 466: { + input.readMessage( + internalGetSetVoterRewardDestinationFieldBuilder().getBuilder(), + extensionRegistry); + actionCase_ = 58; + break; + } // case 466 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -9379,6 +9643,574 @@ public com.github.iotexproject.grpc.types.StakeMigrateOrBuilder getStakeMigrateO return stakeMigrateBuilder_; } + private com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.CandidateDeactivate, com.github.iotexproject.grpc.types.CandidateDeactivate.Builder, com.github.iotexproject.grpc.types.CandidateDeactivateOrBuilder> candidateDeactivateBuilder_; + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + * @return Whether the candidateDeactivate field is set. + */ + @java.lang.Override + public boolean hasCandidateDeactivate() { + return actionCase_ == 54; + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + * @return The candidateDeactivate. + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.CandidateDeactivate getCandidateDeactivate() { + if (candidateDeactivateBuilder_ == null) { + if (actionCase_ == 54) { + return (com.github.iotexproject.grpc.types.CandidateDeactivate) action_; + } + return com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance(); + } else { + if (actionCase_ == 54) { + return candidateDeactivateBuilder_.getMessage(); + } + return com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance(); + } + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + public Builder setCandidateDeactivate(com.github.iotexproject.grpc.types.CandidateDeactivate value) { + if (candidateDeactivateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + action_ = value; + onChanged(); + } else { + candidateDeactivateBuilder_.setMessage(value); + } + actionCase_ = 54; + return this; + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + public Builder setCandidateDeactivate( + com.github.iotexproject.grpc.types.CandidateDeactivate.Builder builderForValue) { + if (candidateDeactivateBuilder_ == null) { + action_ = builderForValue.build(); + onChanged(); + } else { + candidateDeactivateBuilder_.setMessage(builderForValue.build()); + } + actionCase_ = 54; + return this; + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + public Builder mergeCandidateDeactivate(com.github.iotexproject.grpc.types.CandidateDeactivate value) { + if (candidateDeactivateBuilder_ == null) { + if (actionCase_ == 54 && + action_ != com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance()) { + action_ = com.github.iotexproject.grpc.types.CandidateDeactivate.newBuilder((com.github.iotexproject.grpc.types.CandidateDeactivate) action_) + .mergeFrom(value).buildPartial(); + } else { + action_ = value; + } + onChanged(); + } else { + if (actionCase_ == 54) { + candidateDeactivateBuilder_.mergeFrom(value); + } else { + candidateDeactivateBuilder_.setMessage(value); + } + } + actionCase_ = 54; + return this; + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + public Builder clearCandidateDeactivate() { + if (candidateDeactivateBuilder_ == null) { + if (actionCase_ == 54) { + actionCase_ = 0; + action_ = null; + onChanged(); + } + } else { + if (actionCase_ == 54) { + actionCase_ = 0; + action_ = null; + } + candidateDeactivateBuilder_.clear(); + } + return this; + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + public com.github.iotexproject.grpc.types.CandidateDeactivate.Builder getCandidateDeactivateBuilder() { + return internalGetCandidateDeactivateFieldBuilder().getBuilder(); + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.CandidateDeactivateOrBuilder getCandidateDeactivateOrBuilder() { + if ((actionCase_ == 54) && (candidateDeactivateBuilder_ != null)) { + return candidateDeactivateBuilder_.getMessageOrBuilder(); + } else { + if (actionCase_ == 54) { + return (com.github.iotexproject.grpc.types.CandidateDeactivate) action_; + } + return com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance(); + } + } + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + private com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.CandidateDeactivate, com.github.iotexproject.grpc.types.CandidateDeactivate.Builder, com.github.iotexproject.grpc.types.CandidateDeactivateOrBuilder> + internalGetCandidateDeactivateFieldBuilder() { + if (candidateDeactivateBuilder_ == null) { + if (!(actionCase_ == 54)) { + action_ = com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance(); + } + candidateDeactivateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.CandidateDeactivate, com.github.iotexproject.grpc.types.CandidateDeactivate.Builder, com.github.iotexproject.grpc.types.CandidateDeactivateOrBuilder>( + (com.github.iotexproject.grpc.types.CandidateDeactivate) action_, + getParentForChildren(), + isClean()); + action_ = null; + } + actionCase_ = 54; + onChanged(); + return candidateDeactivateBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation, com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.Builder, com.github.iotexproject.grpc.types.ScheduleCandidateDeactivationOrBuilder> scheduleCandidateDeactivationBuilder_; + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + * @return Whether the scheduleCandidateDeactivation field is set. + */ + @java.lang.Override + public boolean hasScheduleCandidateDeactivation() { + return actionCase_ == 55; + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + * @return The scheduleCandidateDeactivation. + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation getScheduleCandidateDeactivation() { + if (scheduleCandidateDeactivationBuilder_ == null) { + if (actionCase_ == 55) { + return (com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) action_; + } + return com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance(); + } else { + if (actionCase_ == 55) { + return scheduleCandidateDeactivationBuilder_.getMessage(); + } + return com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance(); + } + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + public Builder setScheduleCandidateDeactivation(com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation value) { + if (scheduleCandidateDeactivationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + action_ = value; + onChanged(); + } else { + scheduleCandidateDeactivationBuilder_.setMessage(value); + } + actionCase_ = 55; + return this; + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + public Builder setScheduleCandidateDeactivation( + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.Builder builderForValue) { + if (scheduleCandidateDeactivationBuilder_ == null) { + action_ = builderForValue.build(); + onChanged(); + } else { + scheduleCandidateDeactivationBuilder_.setMessage(builderForValue.build()); + } + actionCase_ = 55; + return this; + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + public Builder mergeScheduleCandidateDeactivation(com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation value) { + if (scheduleCandidateDeactivationBuilder_ == null) { + if (actionCase_ == 55 && + action_ != com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance()) { + action_ = com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.newBuilder((com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) action_) + .mergeFrom(value).buildPartial(); + } else { + action_ = value; + } + onChanged(); + } else { + if (actionCase_ == 55) { + scheduleCandidateDeactivationBuilder_.mergeFrom(value); + } else { + scheduleCandidateDeactivationBuilder_.setMessage(value); + } + } + actionCase_ = 55; + return this; + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + public Builder clearScheduleCandidateDeactivation() { + if (scheduleCandidateDeactivationBuilder_ == null) { + if (actionCase_ == 55) { + actionCase_ = 0; + action_ = null; + onChanged(); + } + } else { + if (actionCase_ == 55) { + actionCase_ = 0; + action_ = null; + } + scheduleCandidateDeactivationBuilder_.clear(); + } + return this; + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.Builder getScheduleCandidateDeactivationBuilder() { + return internalGetScheduleCandidateDeactivationFieldBuilder().getBuilder(); + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivationOrBuilder getScheduleCandidateDeactivationOrBuilder() { + if ((actionCase_ == 55) && (scheduleCandidateDeactivationBuilder_ != null)) { + return scheduleCandidateDeactivationBuilder_.getMessageOrBuilder(); + } else { + if (actionCase_ == 55) { + return (com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) action_; + } + return com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance(); + } + } + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + private com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation, com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.Builder, com.github.iotexproject.grpc.types.ScheduleCandidateDeactivationOrBuilder> + internalGetScheduleCandidateDeactivationFieldBuilder() { + if (scheduleCandidateDeactivationBuilder_ == null) { + if (!(actionCase_ == 55)) { + action_ = com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance(); + } + scheduleCandidateDeactivationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation, com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.Builder, com.github.iotexproject.grpc.types.ScheduleCandidateDeactivationOrBuilder>( + (com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) action_, + getParentForChildren(), + isClean()); + action_ = null; + } + actionCase_ = 55; + onChanged(); + return scheduleCandidateDeactivationBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.SetVoterRewardOptIn, com.github.iotexproject.grpc.types.SetVoterRewardOptIn.Builder, com.github.iotexproject.grpc.types.SetVoterRewardOptInOrBuilder> setVoterRewardOptInBuilder_; + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + * @return Whether the setVoterRewardOptIn field is set. + */ + @java.lang.Override + public boolean hasSetVoterRewardOptIn() { + return actionCase_ == 57; + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + * @return The setVoterRewardOptIn. + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardOptIn getSetVoterRewardOptIn() { + if (setVoterRewardOptInBuilder_ == null) { + if (actionCase_ == 57) { + return (com.github.iotexproject.grpc.types.SetVoterRewardOptIn) action_; + } + return com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance(); + } else { + if (actionCase_ == 57) { + return setVoterRewardOptInBuilder_.getMessage(); + } + return com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance(); + } + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + public Builder setSetVoterRewardOptIn(com.github.iotexproject.grpc.types.SetVoterRewardOptIn value) { + if (setVoterRewardOptInBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + action_ = value; + onChanged(); + } else { + setVoterRewardOptInBuilder_.setMessage(value); + } + actionCase_ = 57; + return this; + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + public Builder setSetVoterRewardOptIn( + com.github.iotexproject.grpc.types.SetVoterRewardOptIn.Builder builderForValue) { + if (setVoterRewardOptInBuilder_ == null) { + action_ = builderForValue.build(); + onChanged(); + } else { + setVoterRewardOptInBuilder_.setMessage(builderForValue.build()); + } + actionCase_ = 57; + return this; + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + public Builder mergeSetVoterRewardOptIn(com.github.iotexproject.grpc.types.SetVoterRewardOptIn value) { + if (setVoterRewardOptInBuilder_ == null) { + if (actionCase_ == 57 && + action_ != com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance()) { + action_ = com.github.iotexproject.grpc.types.SetVoterRewardOptIn.newBuilder((com.github.iotexproject.grpc.types.SetVoterRewardOptIn) action_) + .mergeFrom(value).buildPartial(); + } else { + action_ = value; + } + onChanged(); + } else { + if (actionCase_ == 57) { + setVoterRewardOptInBuilder_.mergeFrom(value); + } else { + setVoterRewardOptInBuilder_.setMessage(value); + } + } + actionCase_ = 57; + return this; + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + public Builder clearSetVoterRewardOptIn() { + if (setVoterRewardOptInBuilder_ == null) { + if (actionCase_ == 57) { + actionCase_ = 0; + action_ = null; + onChanged(); + } + } else { + if (actionCase_ == 57) { + actionCase_ = 0; + action_ = null; + } + setVoterRewardOptInBuilder_.clear(); + } + return this; + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + public com.github.iotexproject.grpc.types.SetVoterRewardOptIn.Builder getSetVoterRewardOptInBuilder() { + return internalGetSetVoterRewardOptInFieldBuilder().getBuilder(); + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardOptInOrBuilder getSetVoterRewardOptInOrBuilder() { + if ((actionCase_ == 57) && (setVoterRewardOptInBuilder_ != null)) { + return setVoterRewardOptInBuilder_.getMessageOrBuilder(); + } else { + if (actionCase_ == 57) { + return (com.github.iotexproject.grpc.types.SetVoterRewardOptIn) action_; + } + return com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance(); + } + } + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + private com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.SetVoterRewardOptIn, com.github.iotexproject.grpc.types.SetVoterRewardOptIn.Builder, com.github.iotexproject.grpc.types.SetVoterRewardOptInOrBuilder> + internalGetSetVoterRewardOptInFieldBuilder() { + if (setVoterRewardOptInBuilder_ == null) { + if (!(actionCase_ == 57)) { + action_ = com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance(); + } + setVoterRewardOptInBuilder_ = new com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.SetVoterRewardOptIn, com.github.iotexproject.grpc.types.SetVoterRewardOptIn.Builder, com.github.iotexproject.grpc.types.SetVoterRewardOptInOrBuilder>( + (com.github.iotexproject.grpc.types.SetVoterRewardOptIn) action_, + getParentForChildren(), + isClean()); + action_ = null; + } + actionCase_ = 57; + onChanged(); + return setVoterRewardOptInBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.SetVoterRewardDestination, com.github.iotexproject.grpc.types.SetVoterRewardDestination.Builder, com.github.iotexproject.grpc.types.SetVoterRewardDestinationOrBuilder> setVoterRewardDestinationBuilder_; + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + * @return Whether the setVoterRewardDestination field is set. + */ + @java.lang.Override + public boolean hasSetVoterRewardDestination() { + return actionCase_ == 58; + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + * @return The setVoterRewardDestination. + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardDestination getSetVoterRewardDestination() { + if (setVoterRewardDestinationBuilder_ == null) { + if (actionCase_ == 58) { + return (com.github.iotexproject.grpc.types.SetVoterRewardDestination) action_; + } + return com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance(); + } else { + if (actionCase_ == 58) { + return setVoterRewardDestinationBuilder_.getMessage(); + } + return com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance(); + } + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + public Builder setSetVoterRewardDestination(com.github.iotexproject.grpc.types.SetVoterRewardDestination value) { + if (setVoterRewardDestinationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + action_ = value; + onChanged(); + } else { + setVoterRewardDestinationBuilder_.setMessage(value); + } + actionCase_ = 58; + return this; + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + public Builder setSetVoterRewardDestination( + com.github.iotexproject.grpc.types.SetVoterRewardDestination.Builder builderForValue) { + if (setVoterRewardDestinationBuilder_ == null) { + action_ = builderForValue.build(); + onChanged(); + } else { + setVoterRewardDestinationBuilder_.setMessage(builderForValue.build()); + } + actionCase_ = 58; + return this; + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + public Builder mergeSetVoterRewardDestination(com.github.iotexproject.grpc.types.SetVoterRewardDestination value) { + if (setVoterRewardDestinationBuilder_ == null) { + if (actionCase_ == 58 && + action_ != com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance()) { + action_ = com.github.iotexproject.grpc.types.SetVoterRewardDestination.newBuilder((com.github.iotexproject.grpc.types.SetVoterRewardDestination) action_) + .mergeFrom(value).buildPartial(); + } else { + action_ = value; + } + onChanged(); + } else { + if (actionCase_ == 58) { + setVoterRewardDestinationBuilder_.mergeFrom(value); + } else { + setVoterRewardDestinationBuilder_.setMessage(value); + } + } + actionCase_ = 58; + return this; + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + public Builder clearSetVoterRewardDestination() { + if (setVoterRewardDestinationBuilder_ == null) { + if (actionCase_ == 58) { + actionCase_ = 0; + action_ = null; + onChanged(); + } + } else { + if (actionCase_ == 58) { + actionCase_ = 0; + action_ = null; + } + setVoterRewardDestinationBuilder_.clear(); + } + return this; + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + public com.github.iotexproject.grpc.types.SetVoterRewardDestination.Builder getSetVoterRewardDestinationBuilder() { + return internalGetSetVoterRewardDestinationFieldBuilder().getBuilder(); + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardDestinationOrBuilder getSetVoterRewardDestinationOrBuilder() { + if ((actionCase_ == 58) && (setVoterRewardDestinationBuilder_ != null)) { + return setVoterRewardDestinationBuilder_.getMessageOrBuilder(); + } else { + if (actionCase_ == 58) { + return (com.github.iotexproject.grpc.types.SetVoterRewardDestination) action_; + } + return com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance(); + } + } + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + private com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.SetVoterRewardDestination, com.github.iotexproject.grpc.types.SetVoterRewardDestination.Builder, com.github.iotexproject.grpc.types.SetVoterRewardDestinationOrBuilder> + internalGetSetVoterRewardDestinationFieldBuilder() { + if (setVoterRewardDestinationBuilder_ == null) { + if (!(actionCase_ == 58)) { + action_ = com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance(); + } + setVoterRewardDestinationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + com.github.iotexproject.grpc.types.SetVoterRewardDestination, com.github.iotexproject.grpc.types.SetVoterRewardDestination.Builder, com.github.iotexproject.grpc.types.SetVoterRewardDestinationOrBuilder>( + (com.github.iotexproject.grpc.types.SetVoterRewardDestination) action_, + getParentForChildren(), + isClean()); + action_ = null; + } + actionCase_ = 58; + onChanged(); + return setVoterRewardDestinationBuilder_; + } + private com.google.protobuf.SingleFieldBuilder< com.github.iotexproject.grpc.types.PutPollResult, com.github.iotexproject.grpc.types.PutPollResult.Builder, com.github.iotexproject.grpc.types.PutPollResultOrBuilder> putPollResultBuilder_; /** diff --git a/src/main/java/com/github/iotexproject/grpc/types/ActionCoreOrBuilder.java b/src/main/java/com/github/iotexproject/grpc/types/ActionCoreOrBuilder.java index a600f7b..2f79489 100644 --- a/src/main/java/com/github/iotexproject/grpc/types/ActionCoreOrBuilder.java +++ b/src/main/java/com/github/iotexproject/grpc/types/ActionCoreOrBuilder.java @@ -697,6 +697,66 @@ com.github.iotexproject.grpc.types.SetCodeAuthorizationOrBuilder getSetCodeAuthL */ com.github.iotexproject.grpc.types.StakeMigrateOrBuilder getStakeMigrateOrBuilder(); + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + * @return Whether the candidateDeactivate field is set. + */ + boolean hasCandidateDeactivate(); + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + * @return The candidateDeactivate. + */ + com.github.iotexproject.grpc.types.CandidateDeactivate getCandidateDeactivate(); + /** + * .iotextypes.CandidateDeactivate candidateDeactivate = 54; + */ + com.github.iotexproject.grpc.types.CandidateDeactivateOrBuilder getCandidateDeactivateOrBuilder(); + + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + * @return Whether the scheduleCandidateDeactivation field is set. + */ + boolean hasScheduleCandidateDeactivation(); + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + * @return The scheduleCandidateDeactivation. + */ + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation getScheduleCandidateDeactivation(); + /** + * .iotextypes.ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + */ + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivationOrBuilder getScheduleCandidateDeactivationOrBuilder(); + + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + * @return Whether the setVoterRewardOptIn field is set. + */ + boolean hasSetVoterRewardOptIn(); + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + * @return The setVoterRewardOptIn. + */ + com.github.iotexproject.grpc.types.SetVoterRewardOptIn getSetVoterRewardOptIn(); + /** + * .iotextypes.SetVoterRewardOptIn setVoterRewardOptIn = 57; + */ + com.github.iotexproject.grpc.types.SetVoterRewardOptInOrBuilder getSetVoterRewardOptInOrBuilder(); + + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + * @return Whether the setVoterRewardDestination field is set. + */ + boolean hasSetVoterRewardDestination(); + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + * @return The setVoterRewardDestination. + */ + com.github.iotexproject.grpc.types.SetVoterRewardDestination getSetVoterRewardDestination(); + /** + * .iotextypes.SetVoterRewardDestination setVoterRewardDestination = 58; + */ + com.github.iotexproject.grpc.types.SetVoterRewardDestinationOrBuilder getSetVoterRewardDestinationOrBuilder(); + /** * .iotextypes.PutPollResult putPollResult = 50; * @return Whether the putPollResult field is set. diff --git a/src/main/java/com/github/iotexproject/grpc/types/ActionOuterClass.java b/src/main/java/com/github/iotexproject/grpc/types/ActionOuterClass.java index 056cd46..c70c15e 100644 --- a/src/main/java/com/github/iotexproject/grpc/types/ActionOuterClass.java +++ b/src/main/java/com/github/iotexproject/grpc/types/ActionOuterClass.java @@ -91,6 +91,26 @@ public static void registerAllExtensions( static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_iotextypes_StakeMigrate_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_iotextypes_CandidateDeactivate_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_iotextypes_CandidateDeactivate_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_iotextypes_ScheduleCandidateDeactivation_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_iotextypes_ScheduleCandidateDeactivation_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_iotextypes_SetVoterRewardOptIn_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_iotextypes_SetVoterRewardOptIn_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_iotextypes_SetVoterRewardDestination_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_iotextypes_SetVoterRewardDestination_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_iotextypes_StakeReclaim_descriptor; static final @@ -329,123 +349,135 @@ public static void registerAllExtensions( "e\022\025\n\rcandidateName\030\001 \001(\t\022\024\n\014stakedAmount" + "\030\002 \001(\t\022\026\n\016stakedDuration\030\003 \001(\r\022\021\n\tautoSt" + "ake\030\004 \001(\010\022\017\n\007payload\030\005 \001(\014\"#\n\014StakeMigra" + - "te\022\023\n\013bucketIndex\030\001 \001(\004\"4\n\014StakeReclaim\022" + - "\023\n\013bucketIndex\030\001 \001(\004\022\017\n\007payload\030\002 \001(\014\"G\n" + - "\017StakeAddDeposit\022\023\n\013bucketIndex\030\001 \001(\004\022\016\n" + - "\006amount\030\002 \001(\t\022\017\n\007payload\030\003 \001(\014\"_\n\014StakeR" + - "estake\022\023\n\013bucketIndex\030\001 \001(\004\022\026\n\016stakedDur" + - "ation\030\002 \001(\r\022\021\n\tautoStake\030\003 \001(\010\022\017\n\007payloa" + - "d\030\004 \001(\014\"S\n\024StakeChangeCandidate\022\023\n\013bucke" + - "tIndex\030\001 \001(\004\022\025\n\rcandidateName\030\002 \001(\t\022\017\n\007p" + - "ayload\030\003 \001(\014\"T\n\026StakeTransferOwnership\022\023" + - "\n\013bucketIndex\030\001 \001(\004\022\024\n\014voterAddress\030\002 \001(" + - "\t\022\017\n\007payload\030\003 \001(\014\"R\n\022CandidateBasicInfo" + - "\022\014\n\004name\030\001 \001(\t\022\027\n\017operatorAddress\030\002 \001(\t\022" + - "\025\n\rrewardAddress\030\003 \001(\t\"\256\001\n\021CandidateRegi" + - "ster\0221\n\tcandidate\030\001 \001(\0132\036.iotextypes.Can" + - "didateBasicInfo\022\024\n\014stakedAmount\030\002 \001(\t\022\026\n" + - "\016stakedDuration\030\003 \001(\r\022\021\n\tautoStake\030\004 \001(\010" + - "\022\024\n\014ownerAddress\030\005 \001(\t\022\017\n\007payload\030\006 \001(\014\"" + - "F\n\032CandidateTransferOwnership\022\027\n\017newOwne" + - "rAddress\030\001 \001(\t\022\017\n\007payload\030\002 \001(\014\"(\n\021Candi" + - "dateActivate\022\023\n\013bucketIndex\030\001 \001(\004\"H\n\024Can" + - "didateEndorsement\022\023\n\013bucketIndex\030\001 \001(\004\022\017" + - "\n\007endorse\030\002 \001(\010\022\n\n\002op\030\003 \001(\r\"\204\001\n\rStartSub" + - "Chain\022\017\n\007chainID\030\001 \001(\r\022\027\n\017securityDeposi" + - "t\030\002 \001(\t\022\030\n\020operationDeposit\030\003 \001(\t\022\023\n\013sta" + - "rtHeight\030\004 \001(\004\022\032\n\022parentHeightOffset\030\005 \001" + - "(\004\"L\n\014StopSubChain\022\017\n\007chainID\030\001 \001(\r\022\022\n\ns" + - "topHeight\030\002 \001(\004\022\027\n\017subChainAddress\030\003 \001(\t" + - "\")\n\nMerkleRoot\022\014\n\004name\030\001 \001(\t\022\r\n\005value\030\002 " + - "\001(\014\"Z\n\010PutBlock\022\027\n\017subChainAddress\030\001 \001(\t" + - "\022\016\n\006height\030\002 \001(\004\022%\n\005roots\030\003 \003(\0132\026.iotext" + - "ypes.MerkleRoot\"C\n\rCreateDeposit\022\017\n\007chai" + - "nID\030\001 \001(\r\022\016\n\006amount\030\002 \001(\t\022\021\n\trecipient\030\003" + - " \001(\t\"A\n\rSettleDeposit\022\016\n\006amount\030\001 \001(\t\022\021\n" + - "\trecipient\030\002 \001(\t\022\r\n\005index\030\003 \001(\004\"\021\n\017Creat" + - "ePlumChain\"-\n\022TerminatePlumChain\022\027\n\017subC" + - "hainAddress\030\001 \001(\t\"\231\001\n\014PlumPutBlock\022\027\n\017su" + - "bChainAddress\030\001 \001(\t\022\016\n\006height\030\002 \001(\004\0222\n\005r" + - "oots\030\003 \003(\0132#.iotextypes.PlumPutBlock.Roo" + - "tsEntry\032,\n\nRootsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005va" + - "lue\030\002 \001(\014:\0028\001\"O\n\021PlumCreateDeposit\022\027\n\017su" + - "bChainAddress\030\001 \001(\t\022\016\n\006amount\030\002 \001(\t\022\021\n\tr" + - "ecipient\030\003 \001(\t\"\342\001\n\rPlumStartExit\022\027\n\017subC" + - "hainAddress\030\001 \001(\t\022\030\n\020previousTransfer\030\002 " + - "\001(\014\022\"\n\032previousTransferBlockProof\030\003 \001(\014\022" + - "#\n\033previousTransferBlockHeight\030\004 \001(\004\022\024\n\014" + - "exitTransfer\030\005 \001(\014\022\036\n\026exitTransferBlockP" + - "roof\030\006 \001(\014\022\037\n\027exitTransferBlockHeight\030\007 " + - "\001(\004\"\242\001\n\021PlumChallengeExit\022\027\n\017subChainAdd" + - "ress\030\001 \001(\t\022\016\n\006coinID\030\002 \001(\004\022\031\n\021challengeT" + - "ransfer\030\003 \001(\014\022#\n\033challengeTransferBlockP" + - "roof\030\004 \001(\014\022$\n\034challengeTransferBlockHeig" + - "ht\030\005 \001(\004\"\302\001\n\031PlumResponseChallengeExit\022\027" + - "\n\017subChainAddress\030\001 \001(\t\022\016\n\006coinID\030\002 \001(\004\022" + - "\031\n\021challengeTransfer\030\003 \001(\014\022\030\n\020responseTr" + - "ansfer\030\004 \001(\014\022\"\n\032responseTransferBlockPro" + - "of\030\005 \001(\014\022#\n\033previousTransferBlockHeight\030" + - "\006 \001(\004\";\n\020PlumFinalizeExit\022\027\n\017subChainAdd" + - "ress\030\001 \001(\t\022\016\n\006coinID\030\002 \001(\004\"#\n\021PlumSettle" + - "Deposit\022\016\n\006coinID\030\001 \001(\004\"V\n\014PlumTransfer\022" + - "\016\n\006coinID\030\001 \001(\004\022\024\n\014denomination\030\002 \001(\014\022\r\n" + - "\005owner\030\003 \001(\t\022\021\n\trecipient\030\004 \001(\t\"\347\021\n\nActi" + - "onCore\022\017\n\007version\030\001 \001(\r\022\r\n\005nonce\030\002 \001(\004\022\020" + - "\n\010gasLimit\030\003 \001(\004\022\020\n\010gasPrice\030\004 \001(\t\022\017\n\007ch" + - "ainID\030\005 \001(\r\022\021\n\tgasTipCap\030\006 \001(\t\022\021\n\tgasFee" + - "Cap\030\007 \001(\t\022*\n\nblobTxData\030\010 \001(\0132\026.iotextyp" + - "es.BlobTxData\022+\n\naccessList\030\t \003(\0132\027.iote" + - "xtypes.AccessTuple\022\016\n\006txType\030\034 \001(\r\0229\n\017se" + - "tCodeAuthList\030\035 \003(\0132 .iotextypes.SetCode" + - "Authorization\022(\n\010transfer\030\n \001(\0132\024.iotext" + - "ypes.TransferH\000\022.\n\013txContainer\030\013 \001(\0132\027.i" + - "otextypes.TxContainerH\000\022*\n\texecution\030\014 \001" + - "(\0132\025.iotextypes.ExecutionH\000\0222\n\rstartSubC" + - "hain\030\r \001(\0132\031.iotextypes.StartSubChainH\000\022" + - "0\n\014stopSubChain\030\016 \001(\0132\030.iotextypes.StopS" + - "ubChainH\000\022(\n\010putBlock\030\017 \001(\0132\024.iotextypes" + - ".PutBlockH\000\0222\n\rcreateDeposit\030\020 \001(\0132\031.iot" + - "extypes.CreateDepositH\000\0222\n\rsettleDeposit" + - "\030\021 \001(\0132\031.iotextypes.SettleDepositH\000\0226\n\017c" + - "reatePlumChain\030\022 \001(\0132\033.iotextypes.Create" + - "PlumChainH\000\022<\n\022terminatePlumChain\030\023 \001(\0132" + - "\036.iotextypes.TerminatePlumChainH\000\0220\n\014plu" + - "mPutBlock\030\024 \001(\0132\030.iotextypes.PlumPutBloc" + - "kH\000\022:\n\021plumCreateDeposit\030\025 \001(\0132\035.iotexty" + - "pes.PlumCreateDepositH\000\0222\n\rplumStartExit" + - "\030\026 \001(\0132\031.iotextypes.PlumStartExitH\000\022:\n\021p" + - "lumChallengeExit\030\027 \001(\0132\035.iotextypes.Plum" + - "ChallengeExitH\000\022J\n\031plumResponseChallenge" + - "Exit\030\030 \001(\0132%.iotextypes.PlumResponseChal" + - "lengeExitH\000\0228\n\020plumFinalizeExit\030\031 \001(\0132\034." + - "iotextypes.PlumFinalizeExitH\000\022:\n\021plumSet" + - "tleDeposit\030\032 \001(\0132\035.iotextypes.PlumSettle" + - "DepositH\000\0220\n\014plumTransfer\030\033 \001(\0132\030.iotext" + - "ypes.PlumTransferH\000\022D\n\026depositToRewardin" + - "gFund\030\036 \001(\0132\".iotextypes.DepositToReward" + - "ingFundH\000\022D\n\026claimFromRewardingFund\030\037 \001(" + - "\0132\".iotextypes.ClaimFromRewardingFundH\000\022" + - ".\n\013grantReward\030 \001(\0132\027.iotextypes.GrantR" + - "ewardH\000\022.\n\013stakeCreate\030( \001(\0132\027.iotextype" + - "s.StakeCreateH\000\0220\n\014stakeUnstake\030) \001(\0132\030." + - "iotextypes.StakeReclaimH\000\0221\n\rstakeWithdr" + - "aw\030* \001(\0132\030.iotextypes.StakeReclaimH\000\0226\n\017" + - "stakeAddDeposit\030+ \001(\0132\033.iotextypes.Stake" + - "AddDepositH\000\0220\n\014stakeRestake\030, \001(\0132\030.iot" + - "extypes.StakeRestakeH\000\022@\n\024stakeChangeCan" + - "didate\030- \001(\0132 .iotextypes.StakeChangeCan" + - "didateH\000\022D\n\026stakeTransferOwnership\030. \001(\013" + - "2\".iotextypes.StakeTransferOwnershipH\000\022:" + - "\n\021candidateRegister\030/ \001(\0132\035.iotextypes.C" + - "andidateRegisterH\000\0229\n\017candidateUpdate\0300 " + - "\001(\0132\036.iotextypes.CandidateBasicInfoH\000\022:\n" + - "\021candidateActivate\0301 \001(\0132\035.iotextypes.Ca" + - "ndidateActivateH\000\022@\n\024candidateEndorsemen" + - "t\0303 \001(\0132 .iotextypes.CandidateEndorsemen" + - "tH\000\022L\n\032candidateTransferOwnership\0304 \001(\0132" + - "&.iotextypes.CandidateTransferOwnershipH" + - "\000\0220\n\014stakeMigrate\0305 \001(\0132\030.iotextypes.Sta" + - "keMigrateH\000\0222\n\rputPollResult\0302 \001(\0132\031.iot" + + "te\022\023\n\013bucketIndex\030\001 \001(\004\"!\n\023CandidateDeac" + + "tivate\022\n\n\002op\030\001 \001(\r\"1\n\035ScheduleCandidateD" + + "eactivation\022\020\n\010delegate\030\001 \001(\t\"\025\n\023SetVote" + + "rRewardOptIn\".\n\031SetVoterRewardDestinatio" + + "n\022\021\n\trecipient\030\001 \001(\014\"4\n\014StakeReclaim\022\023\n\013" + + "bucketIndex\030\001 \001(\004\022\017\n\007payload\030\002 \001(\014\"G\n\017St" + + "akeAddDeposit\022\023\n\013bucketIndex\030\001 \001(\004\022\016\n\006am" + + "ount\030\002 \001(\t\022\017\n\007payload\030\003 \001(\014\"_\n\014StakeRest" + + "ake\022\023\n\013bucketIndex\030\001 \001(\004\022\026\n\016stakedDurati" + + "on\030\002 \001(\r\022\021\n\tautoStake\030\003 \001(\010\022\017\n\007payload\030\004" + + " \001(\014\"S\n\024StakeChangeCandidate\022\023\n\013bucketIn" + + "dex\030\001 \001(\004\022\025\n\rcandidateName\030\002 \001(\t\022\017\n\007payl" + + "oad\030\003 \001(\014\"T\n\026StakeTransferOwnership\022\023\n\013b" + + "ucketIndex\030\001 \001(\004\022\024\n\014voterAddress\030\002 \001(\t\022\017" + + "\n\007payload\030\003 \001(\014\"u\n\022CandidateBasicInfo\022\014\n" + + "\004name\030\001 \001(\t\022\027\n\017operatorAddress\030\002 \001(\t\022\025\n\r" + + "rewardAddress\030\003 \001(\t\022\021\n\tblsPubKey\030\004 \001(\014\022\016" + + "\n\006blsPop\030\005 \001(\014\"\256\001\n\021CandidateRegister\0221\n\t" + + "candidate\030\001 \001(\0132\036.iotextypes.CandidateBa" + + "sicInfo\022\024\n\014stakedAmount\030\002 \001(\t\022\026\n\016stakedD" + + "uration\030\003 \001(\r\022\021\n\tautoStake\030\004 \001(\010\022\024\n\014owne" + + "rAddress\030\005 \001(\t\022\017\n\007payload\030\006 \001(\014\"F\n\032Candi" + + "dateTransferOwnership\022\027\n\017newOwnerAddress" + + "\030\001 \001(\t\022\017\n\007payload\030\002 \001(\014\"(\n\021CandidateActi" + + "vate\022\023\n\013bucketIndex\030\001 \001(\004\"H\n\024CandidateEn" + + "dorsement\022\023\n\013bucketIndex\030\001 \001(\004\022\017\n\007endors" + + "e\030\002 \001(\010\022\n\n\002op\030\003 \001(\r\"\204\001\n\rStartSubChain\022\017\n" + + "\007chainID\030\001 \001(\r\022\027\n\017securityDeposit\030\002 \001(\t\022" + + "\030\n\020operationDeposit\030\003 \001(\t\022\023\n\013startHeight" + + "\030\004 \001(\004\022\032\n\022parentHeightOffset\030\005 \001(\004\"L\n\014St" + + "opSubChain\022\017\n\007chainID\030\001 \001(\r\022\022\n\nstopHeigh" + + "t\030\002 \001(\004\022\027\n\017subChainAddress\030\003 \001(\t\")\n\nMerk" + + "leRoot\022\014\n\004name\030\001 \001(\t\022\r\n\005value\030\002 \001(\014\"Z\n\010P" + + "utBlock\022\027\n\017subChainAddress\030\001 \001(\t\022\016\n\006heig" + + "ht\030\002 \001(\004\022%\n\005roots\030\003 \003(\0132\026.iotextypes.Mer" + + "kleRoot\"C\n\rCreateDeposit\022\017\n\007chainID\030\001 \001(" + + "\r\022\016\n\006amount\030\002 \001(\t\022\021\n\trecipient\030\003 \001(\t\"A\n\r" + + "SettleDeposit\022\016\n\006amount\030\001 \001(\t\022\021\n\trecipie" + + "nt\030\002 \001(\t\022\r\n\005index\030\003 \001(\004\"\021\n\017CreatePlumCha" + + "in\"-\n\022TerminatePlumChain\022\027\n\017subChainAddr" + + "ess\030\001 \001(\t\"\231\001\n\014PlumPutBlock\022\027\n\017subChainAd" + + "dress\030\001 \001(\t\022\016\n\006height\030\002 \001(\004\0222\n\005roots\030\003 \003" + + "(\0132#.iotextypes.PlumPutBlock.RootsEntry\032" + + ",\n\nRootsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(" + + "\014:\0028\001\"O\n\021PlumCreateDeposit\022\027\n\017subChainAd" + + "dress\030\001 \001(\t\022\016\n\006amount\030\002 \001(\t\022\021\n\trecipient" + + "\030\003 \001(\t\"\342\001\n\rPlumStartExit\022\027\n\017subChainAddr" + + "ess\030\001 \001(\t\022\030\n\020previousTransfer\030\002 \001(\014\022\"\n\032p" + + "reviousTransferBlockProof\030\003 \001(\014\022#\n\033previ" + + "ousTransferBlockHeight\030\004 \001(\004\022\024\n\014exitTran" + + "sfer\030\005 \001(\014\022\036\n\026exitTransferBlockProof\030\006 \001" + + "(\014\022\037\n\027exitTransferBlockHeight\030\007 \001(\004\"\242\001\n\021" + + "PlumChallengeExit\022\027\n\017subChainAddress\030\001 \001" + + "(\t\022\016\n\006coinID\030\002 \001(\004\022\031\n\021challengeTransfer\030" + + "\003 \001(\014\022#\n\033challengeTransferBlockProof\030\004 \001" + + "(\014\022$\n\034challengeTransferBlockHeight\030\005 \001(\004" + + "\"\302\001\n\031PlumResponseChallengeExit\022\027\n\017subCha" + + "inAddress\030\001 \001(\t\022\016\n\006coinID\030\002 \001(\004\022\031\n\021chall" + + "engeTransfer\030\003 \001(\014\022\030\n\020responseTransfer\030\004" + + " \001(\014\022\"\n\032responseTransferBlockProof\030\005 \001(\014" + + "\022#\n\033previousTransferBlockHeight\030\006 \001(\004\";\n" + + "\020PlumFinalizeExit\022\027\n\017subChainAddress\030\001 \001" + + "(\t\022\016\n\006coinID\030\002 \001(\004\"#\n\021PlumSettleDeposit\022" + + "\016\n\006coinID\030\001 \001(\004\"V\n\014PlumTransfer\022\016\n\006coinI" + + "D\030\001 \001(\004\022\024\n\014denomination\030\002 \001(\014\022\r\n\005owner\030\003" + + " \001(\t\022\021\n\trecipient\030\004 \001(\t\"\207\024\n\nActionCore\022\017" + + "\n\007version\030\001 \001(\r\022\r\n\005nonce\030\002 \001(\004\022\020\n\010gasLim" + + "it\030\003 \001(\004\022\020\n\010gasPrice\030\004 \001(\t\022\017\n\007chainID\030\005 " + + "\001(\r\022\021\n\tgasTipCap\030\006 \001(\t\022\021\n\tgasFeeCap\030\007 \001(" + + "\t\022*\n\nblobTxData\030\010 \001(\0132\026.iotextypes.BlobT" + + "xData\022+\n\naccessList\030\t \003(\0132\027.iotextypes.A" + + "ccessTuple\022\016\n\006txType\030\034 \001(\r\0229\n\017setCodeAut" + + "hList\030\035 \003(\0132 .iotextypes.SetCodeAuthoriz" + + "ation\022(\n\010transfer\030\n \001(\0132\024.iotextypes.Tra" + + "nsferH\000\022.\n\013txContainer\030\013 \001(\0132\027.iotextype" + + "s.TxContainerH\000\022*\n\texecution\030\014 \001(\0132\025.iot" + + "extypes.ExecutionH\000\0222\n\rstartSubChain\030\r \001" + + "(\0132\031.iotextypes.StartSubChainH\000\0220\n\014stopS" + + "ubChain\030\016 \001(\0132\030.iotextypes.StopSubChainH" + + "\000\022(\n\010putBlock\030\017 \001(\0132\024.iotextypes.PutBloc" + + "kH\000\0222\n\rcreateDeposit\030\020 \001(\0132\031.iotextypes." + + "CreateDepositH\000\0222\n\rsettleDeposit\030\021 \001(\0132\031" + + ".iotextypes.SettleDepositH\000\0226\n\017createPlu" + + "mChain\030\022 \001(\0132\033.iotextypes.CreatePlumChai" + + "nH\000\022<\n\022terminatePlumChain\030\023 \001(\0132\036.iotext" + + "ypes.TerminatePlumChainH\000\0220\n\014plumPutBloc" + + "k\030\024 \001(\0132\030.iotextypes.PlumPutBlockH\000\022:\n\021p" + + "lumCreateDeposit\030\025 \001(\0132\035.iotextypes.Plum" + + "CreateDepositH\000\0222\n\rplumStartExit\030\026 \001(\0132\031" + + ".iotextypes.PlumStartExitH\000\022:\n\021plumChall" + + "engeExit\030\027 \001(\0132\035.iotextypes.PlumChalleng" + + "eExitH\000\022J\n\031plumResponseChallengeExit\030\030 \001" + + "(\0132%.iotextypes.PlumResponseChallengeExi" + + "tH\000\0228\n\020plumFinalizeExit\030\031 \001(\0132\034.iotextyp" + + "es.PlumFinalizeExitH\000\022:\n\021plumSettleDepos" + + "it\030\032 \001(\0132\035.iotextypes.PlumSettleDepositH" + + "\000\0220\n\014plumTransfer\030\033 \001(\0132\030.iotextypes.Plu" + + "mTransferH\000\022D\n\026depositToRewardingFund\030\036 " + + "\001(\0132\".iotextypes.DepositToRewardingFundH" + + "\000\022D\n\026claimFromRewardingFund\030\037 \001(\0132\".iote" + + "xtypes.ClaimFromRewardingFundH\000\022.\n\013grant" + + "Reward\030 \001(\0132\027.iotextypes.GrantRewardH\000\022" + + ".\n\013stakeCreate\030( \001(\0132\027.iotextypes.StakeC" + + "reateH\000\0220\n\014stakeUnstake\030) \001(\0132\030.iotextyp" + + "es.StakeReclaimH\000\0221\n\rstakeWithdraw\030* \001(\013" + + "2\030.iotextypes.StakeReclaimH\000\0226\n\017stakeAdd" + + "Deposit\030+ \001(\0132\033.iotextypes.StakeAddDepos" + + "itH\000\0220\n\014stakeRestake\030, \001(\0132\030.iotextypes." + + "StakeRestakeH\000\022@\n\024stakeChangeCandidate\030-" + + " \001(\0132 .iotextypes.StakeChangeCandidateH\000" + + "\022D\n\026stakeTransferOwnership\030. \001(\0132\".iotex" + + "types.StakeTransferOwnershipH\000\022:\n\021candid" + + "ateRegister\030/ \001(\0132\035.iotextypes.Candidate" + + "RegisterH\000\0229\n\017candidateUpdate\0300 \001(\0132\036.io" + + "textypes.CandidateBasicInfoH\000\022:\n\021candida" + + "teActivate\0301 \001(\0132\035.iotextypes.CandidateA" + + "ctivateH\000\022@\n\024candidateEndorsement\0303 \001(\0132" + + " .iotextypes.CandidateEndorsementH\000\022L\n\032c" + + "andidateTransferOwnership\0304 \001(\0132&.iotext" + + "ypes.CandidateTransferOwnershipH\000\0220\n\014sta" + + "keMigrate\0305 \001(\0132\030.iotextypes.StakeMigrat" + + "eH\000\022>\n\023candidateDeactivate\0306 \001(\0132\037.iotex" + + "types.CandidateDeactivateH\000\022R\n\035scheduleC" + + "andidateDeactivation\0307 \001(\0132).iotextypes." + + "ScheduleCandidateDeactivationH\000\022>\n\023setVo" + + "terRewardOptIn\0309 \001(\0132\037.iotextypes.SetVot" + + "erRewardOptInH\000\022J\n\031setVoterRewardDestina" + + "tion\030: \001(\0132%.iotextypes.SetVoterRewardDe" + + "stinationH\000\0222\n\rputPollResult\0302 \001(\0132\031.iot" + "extypes.PutPollResultH\000B\010\n\006action\"\177\n\006Act" + "ion\022$\n\004core\030\001 \001(\0132\026.iotextypes.ActionCor" + "e\022\024\n\014senderPubKey\030\002 \001(\014\022\021\n\tsignature\030\003 \001" + @@ -567,116 +599,140 @@ public static void registerAllExtensions( com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_StakeMigrate_descriptor, new java.lang.String[] { "BucketIndex", }); - internal_static_iotextypes_StakeReclaim_descriptor = + internal_static_iotextypes_CandidateDeactivate_descriptor = getDescriptor().getMessageType(13); + internal_static_iotextypes_CandidateDeactivate_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_iotextypes_CandidateDeactivate_descriptor, + new java.lang.String[] { "Op", }); + internal_static_iotextypes_ScheduleCandidateDeactivation_descriptor = + getDescriptor().getMessageType(14); + internal_static_iotextypes_ScheduleCandidateDeactivation_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_iotextypes_ScheduleCandidateDeactivation_descriptor, + new java.lang.String[] { "Delegate", }); + internal_static_iotextypes_SetVoterRewardOptIn_descriptor = + getDescriptor().getMessageType(15); + internal_static_iotextypes_SetVoterRewardOptIn_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_iotextypes_SetVoterRewardOptIn_descriptor, + new java.lang.String[] { }); + internal_static_iotextypes_SetVoterRewardDestination_descriptor = + getDescriptor().getMessageType(16); + internal_static_iotextypes_SetVoterRewardDestination_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_iotextypes_SetVoterRewardDestination_descriptor, + new java.lang.String[] { "Recipient", }); + internal_static_iotextypes_StakeReclaim_descriptor = + getDescriptor().getMessageType(17); internal_static_iotextypes_StakeReclaim_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_StakeReclaim_descriptor, new java.lang.String[] { "BucketIndex", "Payload", }); internal_static_iotextypes_StakeAddDeposit_descriptor = - getDescriptor().getMessageType(14); + getDescriptor().getMessageType(18); internal_static_iotextypes_StakeAddDeposit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_StakeAddDeposit_descriptor, new java.lang.String[] { "BucketIndex", "Amount", "Payload", }); internal_static_iotextypes_StakeRestake_descriptor = - getDescriptor().getMessageType(15); + getDescriptor().getMessageType(19); internal_static_iotextypes_StakeRestake_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_StakeRestake_descriptor, new java.lang.String[] { "BucketIndex", "StakedDuration", "AutoStake", "Payload", }); internal_static_iotextypes_StakeChangeCandidate_descriptor = - getDescriptor().getMessageType(16); + getDescriptor().getMessageType(20); internal_static_iotextypes_StakeChangeCandidate_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_StakeChangeCandidate_descriptor, new java.lang.String[] { "BucketIndex", "CandidateName", "Payload", }); internal_static_iotextypes_StakeTransferOwnership_descriptor = - getDescriptor().getMessageType(17); + getDescriptor().getMessageType(21); internal_static_iotextypes_StakeTransferOwnership_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_StakeTransferOwnership_descriptor, new java.lang.String[] { "BucketIndex", "VoterAddress", "Payload", }); internal_static_iotextypes_CandidateBasicInfo_descriptor = - getDescriptor().getMessageType(18); + getDescriptor().getMessageType(22); internal_static_iotextypes_CandidateBasicInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_CandidateBasicInfo_descriptor, - new java.lang.String[] { "Name", "OperatorAddress", "RewardAddress", }); + new java.lang.String[] { "Name", "OperatorAddress", "RewardAddress", "BlsPubKey", "BlsPop", }); internal_static_iotextypes_CandidateRegister_descriptor = - getDescriptor().getMessageType(19); + getDescriptor().getMessageType(23); internal_static_iotextypes_CandidateRegister_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_CandidateRegister_descriptor, new java.lang.String[] { "Candidate", "StakedAmount", "StakedDuration", "AutoStake", "OwnerAddress", "Payload", }); internal_static_iotextypes_CandidateTransferOwnership_descriptor = - getDescriptor().getMessageType(20); + getDescriptor().getMessageType(24); internal_static_iotextypes_CandidateTransferOwnership_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_CandidateTransferOwnership_descriptor, new java.lang.String[] { "NewOwnerAddress", "Payload", }); internal_static_iotextypes_CandidateActivate_descriptor = - getDescriptor().getMessageType(21); + getDescriptor().getMessageType(25); internal_static_iotextypes_CandidateActivate_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_CandidateActivate_descriptor, new java.lang.String[] { "BucketIndex", }); internal_static_iotextypes_CandidateEndorsement_descriptor = - getDescriptor().getMessageType(22); + getDescriptor().getMessageType(26); internal_static_iotextypes_CandidateEndorsement_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_CandidateEndorsement_descriptor, new java.lang.String[] { "BucketIndex", "Endorse", "Op", }); internal_static_iotextypes_StartSubChain_descriptor = - getDescriptor().getMessageType(23); + getDescriptor().getMessageType(27); internal_static_iotextypes_StartSubChain_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_StartSubChain_descriptor, new java.lang.String[] { "ChainID", "SecurityDeposit", "OperationDeposit", "StartHeight", "ParentHeightOffset", }); internal_static_iotextypes_StopSubChain_descriptor = - getDescriptor().getMessageType(24); + getDescriptor().getMessageType(28); internal_static_iotextypes_StopSubChain_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_StopSubChain_descriptor, new java.lang.String[] { "ChainID", "StopHeight", "SubChainAddress", }); internal_static_iotextypes_MerkleRoot_descriptor = - getDescriptor().getMessageType(25); + getDescriptor().getMessageType(29); internal_static_iotextypes_MerkleRoot_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_MerkleRoot_descriptor, new java.lang.String[] { "Name", "Value", }); internal_static_iotextypes_PutBlock_descriptor = - getDescriptor().getMessageType(26); + getDescriptor().getMessageType(30); internal_static_iotextypes_PutBlock_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PutBlock_descriptor, new java.lang.String[] { "SubChainAddress", "Height", "Roots", }); internal_static_iotextypes_CreateDeposit_descriptor = - getDescriptor().getMessageType(27); + getDescriptor().getMessageType(31); internal_static_iotextypes_CreateDeposit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_CreateDeposit_descriptor, new java.lang.String[] { "ChainID", "Amount", "Recipient", }); internal_static_iotextypes_SettleDeposit_descriptor = - getDescriptor().getMessageType(28); + getDescriptor().getMessageType(32); internal_static_iotextypes_SettleDeposit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_SettleDeposit_descriptor, new java.lang.String[] { "Amount", "Recipient", "Index", }); internal_static_iotextypes_CreatePlumChain_descriptor = - getDescriptor().getMessageType(29); + getDescriptor().getMessageType(33); internal_static_iotextypes_CreatePlumChain_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_CreatePlumChain_descriptor, new java.lang.String[] { }); internal_static_iotextypes_TerminatePlumChain_descriptor = - getDescriptor().getMessageType(30); + getDescriptor().getMessageType(34); internal_static_iotextypes_TerminatePlumChain_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_TerminatePlumChain_descriptor, new java.lang.String[] { "SubChainAddress", }); internal_static_iotextypes_PlumPutBlock_descriptor = - getDescriptor().getMessageType(31); + getDescriptor().getMessageType(35); internal_static_iotextypes_PlumPutBlock_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PlumPutBlock_descriptor, @@ -688,127 +744,127 @@ public static void registerAllExtensions( internal_static_iotextypes_PlumPutBlock_RootsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_iotextypes_PlumCreateDeposit_descriptor = - getDescriptor().getMessageType(32); + getDescriptor().getMessageType(36); internal_static_iotextypes_PlumCreateDeposit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PlumCreateDeposit_descriptor, new java.lang.String[] { "SubChainAddress", "Amount", "Recipient", }); internal_static_iotextypes_PlumStartExit_descriptor = - getDescriptor().getMessageType(33); + getDescriptor().getMessageType(37); internal_static_iotextypes_PlumStartExit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PlumStartExit_descriptor, new java.lang.String[] { "SubChainAddress", "PreviousTransfer", "PreviousTransferBlockProof", "PreviousTransferBlockHeight", "ExitTransfer", "ExitTransferBlockProof", "ExitTransferBlockHeight", }); internal_static_iotextypes_PlumChallengeExit_descriptor = - getDescriptor().getMessageType(34); + getDescriptor().getMessageType(38); internal_static_iotextypes_PlumChallengeExit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PlumChallengeExit_descriptor, new java.lang.String[] { "SubChainAddress", "CoinID", "ChallengeTransfer", "ChallengeTransferBlockProof", "ChallengeTransferBlockHeight", }); internal_static_iotextypes_PlumResponseChallengeExit_descriptor = - getDescriptor().getMessageType(35); + getDescriptor().getMessageType(39); internal_static_iotextypes_PlumResponseChallengeExit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PlumResponseChallengeExit_descriptor, new java.lang.String[] { "SubChainAddress", "CoinID", "ChallengeTransfer", "ResponseTransfer", "ResponseTransferBlockProof", "PreviousTransferBlockHeight", }); internal_static_iotextypes_PlumFinalizeExit_descriptor = - getDescriptor().getMessageType(36); + getDescriptor().getMessageType(40); internal_static_iotextypes_PlumFinalizeExit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PlumFinalizeExit_descriptor, new java.lang.String[] { "SubChainAddress", "CoinID", }); internal_static_iotextypes_PlumSettleDeposit_descriptor = - getDescriptor().getMessageType(37); + getDescriptor().getMessageType(41); internal_static_iotextypes_PlumSettleDeposit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PlumSettleDeposit_descriptor, new java.lang.String[] { "CoinID", }); internal_static_iotextypes_PlumTransfer_descriptor = - getDescriptor().getMessageType(38); + getDescriptor().getMessageType(42); internal_static_iotextypes_PlumTransfer_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_PlumTransfer_descriptor, new java.lang.String[] { "CoinID", "Denomination", "Owner", "Recipient", }); internal_static_iotextypes_ActionCore_descriptor = - getDescriptor().getMessageType(39); + getDescriptor().getMessageType(43); internal_static_iotextypes_ActionCore_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_ActionCore_descriptor, - new java.lang.String[] { "Version", "Nonce", "GasLimit", "GasPrice", "ChainID", "GasTipCap", "GasFeeCap", "BlobTxData", "AccessList", "TxType", "SetCodeAuthList", "Transfer", "TxContainer", "Execution", "StartSubChain", "StopSubChain", "PutBlock", "CreateDeposit", "SettleDeposit", "CreatePlumChain", "TerminatePlumChain", "PlumPutBlock", "PlumCreateDeposit", "PlumStartExit", "PlumChallengeExit", "PlumResponseChallengeExit", "PlumFinalizeExit", "PlumSettleDeposit", "PlumTransfer", "DepositToRewardingFund", "ClaimFromRewardingFund", "GrantReward", "StakeCreate", "StakeUnstake", "StakeWithdraw", "StakeAddDeposit", "StakeRestake", "StakeChangeCandidate", "StakeTransferOwnership", "CandidateRegister", "CandidateUpdate", "CandidateActivate", "CandidateEndorsement", "CandidateTransferOwnership", "StakeMigrate", "PutPollResult", "Action", }); + new java.lang.String[] { "Version", "Nonce", "GasLimit", "GasPrice", "ChainID", "GasTipCap", "GasFeeCap", "BlobTxData", "AccessList", "TxType", "SetCodeAuthList", "Transfer", "TxContainer", "Execution", "StartSubChain", "StopSubChain", "PutBlock", "CreateDeposit", "SettleDeposit", "CreatePlumChain", "TerminatePlumChain", "PlumPutBlock", "PlumCreateDeposit", "PlumStartExit", "PlumChallengeExit", "PlumResponseChallengeExit", "PlumFinalizeExit", "PlumSettleDeposit", "PlumTransfer", "DepositToRewardingFund", "ClaimFromRewardingFund", "GrantReward", "StakeCreate", "StakeUnstake", "StakeWithdraw", "StakeAddDeposit", "StakeRestake", "StakeChangeCandidate", "StakeTransferOwnership", "CandidateRegister", "CandidateUpdate", "CandidateActivate", "CandidateEndorsement", "CandidateTransferOwnership", "StakeMigrate", "CandidateDeactivate", "ScheduleCandidateDeactivation", "SetVoterRewardOptIn", "SetVoterRewardDestination", "PutPollResult", "Action", }); internal_static_iotextypes_Action_descriptor = - getDescriptor().getMessageType(40); + getDescriptor().getMessageType(44); internal_static_iotextypes_Action_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_Action_descriptor, new java.lang.String[] { "Core", "SenderPubKey", "Signature", "Encoding", }); internal_static_iotextypes_Actions_descriptor = - getDescriptor().getMessageType(41); + getDescriptor().getMessageType(45); internal_static_iotextypes_Actions_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_Actions_descriptor, new java.lang.String[] { "Actions", }); internal_static_iotextypes_ActionHash_descriptor = - getDescriptor().getMessageType(42); + getDescriptor().getMessageType(46); internal_static_iotextypes_ActionHash_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_ActionHash_descriptor, new java.lang.String[] { "Hash", }); internal_static_iotextypes_Receipt_descriptor = - getDescriptor().getMessageType(43); + getDescriptor().getMessageType(47); internal_static_iotextypes_Receipt_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_Receipt_descriptor, new java.lang.String[] { "Status", "BlkHeight", "ActHash", "GasConsumed", "ContractAddress", "Logs", "ExecutionRevertMsg", "TxIndex", "BlobGasUsed", "BlobGasPrice", "EffectiveGasPrice", }); internal_static_iotextypes_Log_descriptor = - getDescriptor().getMessageType(44); + getDescriptor().getMessageType(48); internal_static_iotextypes_Log_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_Log_descriptor, new java.lang.String[] { "ContractAddress", "Topics", "Data", "BlkHeight", "ActHash", "Index", "BlkHash", "TxIndex", }); internal_static_iotextypes_Logs_descriptor = - getDescriptor().getMessageType(45); + getDescriptor().getMessageType(49); internal_static_iotextypes_Logs_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_Logs_descriptor, new java.lang.String[] { "Logs", }); internal_static_iotextypes_EvmTransfer_descriptor = - getDescriptor().getMessageType(46); + getDescriptor().getMessageType(50); internal_static_iotextypes_EvmTransfer_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_EvmTransfer_descriptor, new java.lang.String[] { "Amount", "From", "To", }); internal_static_iotextypes_EvmTransferList_descriptor = - getDescriptor().getMessageType(47); + getDescriptor().getMessageType(51); internal_static_iotextypes_EvmTransferList_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_EvmTransferList_descriptor, new java.lang.String[] { "EvmTransfers", }); internal_static_iotextypes_ActionEvmTransfer_descriptor = - getDescriptor().getMessageType(48); + getDescriptor().getMessageType(52); internal_static_iotextypes_ActionEvmTransfer_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_ActionEvmTransfer_descriptor, new java.lang.String[] { "ActionHash", "NumEvmTransfers", "EvmTransfers", }); internal_static_iotextypes_BlockEvmTransfer_descriptor = - getDescriptor().getMessageType(49); + getDescriptor().getMessageType(53); internal_static_iotextypes_BlockEvmTransfer_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_BlockEvmTransfer_descriptor, new java.lang.String[] { "BlockHeight", "NumEvmTransfers", "ActionEvmTransfers", }); internal_static_iotextypes_DepositToRewardingFund_descriptor = - getDescriptor().getMessageType(50); + getDescriptor().getMessageType(54); internal_static_iotextypes_DepositToRewardingFund_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_DepositToRewardingFund_descriptor, new java.lang.String[] { "Amount", "Data", }); internal_static_iotextypes_ClaimFromRewardingFund_descriptor = - getDescriptor().getMessageType(51); + getDescriptor().getMessageType(55); internal_static_iotextypes_ClaimFromRewardingFund_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_ClaimFromRewardingFund_descriptor, new java.lang.String[] { "Amount", "Data", "Address", }); internal_static_iotextypes_GrantReward_descriptor = - getDescriptor().getMessageType(52); + getDescriptor().getMessageType(56); internal_static_iotextypes_GrantReward_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_iotextypes_GrantReward_descriptor, diff --git a/src/main/java/com/github/iotexproject/grpc/types/CandidateBasicInfo.java b/src/main/java/com/github/iotexproject/grpc/types/CandidateBasicInfo.java index 87aa593..2c21e84 100644 --- a/src/main/java/com/github/iotexproject/grpc/types/CandidateBasicInfo.java +++ b/src/main/java/com/github/iotexproject/grpc/types/CandidateBasicInfo.java @@ -31,6 +31,8 @@ private CandidateBasicInfo() { name_ = ""; operatorAddress_ = ""; rewardAddress_ = ""; + blsPubKey_ = com.google.protobuf.ByteString.EMPTY; + blsPop_ = com.google.protobuf.ByteString.EMPTY; } public static final com.google.protobuf.Descriptors.Descriptor @@ -168,6 +170,28 @@ public java.lang.String getRewardAddress() { } } + public static final int BLSPUBKEY_FIELD_NUMBER = 4; + private com.google.protobuf.ByteString blsPubKey_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes blsPubKey = 4; + * @return The blsPubKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getBlsPubKey() { + return blsPubKey_; + } + + public static final int BLSPOP_FIELD_NUMBER = 5; + private com.google.protobuf.ByteString blsPop_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes blsPop = 5; + * @return The blsPop. + */ + @java.lang.Override + public com.google.protobuf.ByteString getBlsPop() { + return blsPop_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -191,6 +215,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!com.google.protobuf.GeneratedMessage.isStringEmpty(rewardAddress_)) { com.google.protobuf.GeneratedMessage.writeString(output, 3, rewardAddress_); } + if (!blsPubKey_.isEmpty()) { + output.writeBytes(4, blsPubKey_); + } + if (!blsPop_.isEmpty()) { + output.writeBytes(5, blsPop_); + } getUnknownFields().writeTo(output); } @@ -209,6 +239,14 @@ public int getSerializedSize() { if (!com.google.protobuf.GeneratedMessage.isStringEmpty(rewardAddress_)) { size += com.google.protobuf.GeneratedMessage.computeStringSize(3, rewardAddress_); } + if (!blsPubKey_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, blsPubKey_); + } + if (!blsPop_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(5, blsPop_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -230,6 +268,10 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getOperatorAddress())) return false; if (!getRewardAddress() .equals(other.getRewardAddress())) return false; + if (!getBlsPubKey() + .equals(other.getBlsPubKey())) return false; + if (!getBlsPop() + .equals(other.getBlsPop())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -247,6 +289,10 @@ public int hashCode() { hash = (53 * hash) + getOperatorAddress().hashCode(); hash = (37 * hash) + REWARDADDRESS_FIELD_NUMBER; hash = (53 * hash) + getRewardAddress().hashCode(); + hash = (37 * hash) + BLSPUBKEY_FIELD_NUMBER; + hash = (53 * hash) + getBlsPubKey().hashCode(); + hash = (37 * hash) + BLSPOP_FIELD_NUMBER; + hash = (53 * hash) + getBlsPop().hashCode(); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -381,6 +427,8 @@ public Builder clear() { name_ = ""; operatorAddress_ = ""; rewardAddress_ = ""; + blsPubKey_ = com.google.protobuf.ByteString.EMPTY; + blsPop_ = com.google.protobuf.ByteString.EMPTY; return this; } @@ -423,6 +471,12 @@ private void buildPartial0(com.github.iotexproject.grpc.types.CandidateBasicInfo if (((from_bitField0_ & 0x00000004) != 0)) { result.rewardAddress_ = rewardAddress_; } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.blsPubKey_ = blsPubKey_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.blsPop_ = blsPop_; + } } @java.lang.Override @@ -452,6 +506,12 @@ public Builder mergeFrom(com.github.iotexproject.grpc.types.CandidateBasicInfo o bitField0_ |= 0x00000004; onChanged(); } + if (!other.getBlsPubKey().isEmpty()) { + setBlsPubKey(other.getBlsPubKey()); + } + if (!other.getBlsPop().isEmpty()) { + setBlsPop(other.getBlsPop()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -493,6 +553,16 @@ public Builder mergeFrom( bitField0_ |= 0x00000004; break; } // case 26 + case 34: { + blsPubKey_ = input.readBytes(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: { + blsPop_ = input.readBytes(); + bitField0_ |= 0x00000010; + break; + } // case 42 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -726,6 +796,70 @@ public Builder setRewardAddressBytes( return this; } + private com.google.protobuf.ByteString blsPubKey_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes blsPubKey = 4; + * @return The blsPubKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getBlsPubKey() { + return blsPubKey_; + } + /** + * bytes blsPubKey = 4; + * @param value The blsPubKey to set. + * @return This builder for chaining. + */ + public Builder setBlsPubKey(com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + blsPubKey_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * bytes blsPubKey = 4; + * @return This builder for chaining. + */ + public Builder clearBlsPubKey() { + bitField0_ = (bitField0_ & ~0x00000008); + blsPubKey_ = getDefaultInstance().getBlsPubKey(); + onChanged(); + return this; + } + + private com.google.protobuf.ByteString blsPop_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes blsPop = 5; + * @return The blsPop. + */ + @java.lang.Override + public com.google.protobuf.ByteString getBlsPop() { + return blsPop_; + } + /** + * bytes blsPop = 5; + * @param value The blsPop to set. + * @return This builder for chaining. + */ + public Builder setBlsPop(com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + blsPop_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * bytes blsPop = 5; + * @return This builder for chaining. + */ + public Builder clearBlsPop() { + bitField0_ = (bitField0_ & ~0x00000010); + blsPop_ = getDefaultInstance().getBlsPop(); + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:iotextypes.CandidateBasicInfo) } diff --git a/src/main/java/com/github/iotexproject/grpc/types/CandidateBasicInfoOrBuilder.java b/src/main/java/com/github/iotexproject/grpc/types/CandidateBasicInfoOrBuilder.java index c6d8089..a724637 100644 --- a/src/main/java/com/github/iotexproject/grpc/types/CandidateBasicInfoOrBuilder.java +++ b/src/main/java/com/github/iotexproject/grpc/types/CandidateBasicInfoOrBuilder.java @@ -45,4 +45,16 @@ public interface CandidateBasicInfoOrBuilder extends */ com.google.protobuf.ByteString getRewardAddressBytes(); + + /** + * bytes blsPubKey = 4; + * @return The blsPubKey. + */ + com.google.protobuf.ByteString getBlsPubKey(); + + /** + * bytes blsPop = 5; + * @return The blsPop. + */ + com.google.protobuf.ByteString getBlsPop(); } diff --git a/src/main/java/com/github/iotexproject/grpc/types/CandidateDeactivate.java b/src/main/java/com/github/iotexproject/grpc/types/CandidateDeactivate.java new file mode 100644 index 0000000..25e7fe8 --- /dev/null +++ b/src/main/java/com/github/iotexproject/grpc/types/CandidateDeactivate.java @@ -0,0 +1,437 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: proto/types/action.proto +// Protobuf Java Version: 4.34.1 + +package com.github.iotexproject.grpc.types; + +/** + * Protobuf type {@code iotextypes.CandidateDeactivate} + */ +@com.google.protobuf.Generated +public final class CandidateDeactivate extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:iotextypes.CandidateDeactivate) + CandidateDeactivateOrBuilder { +private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 34, + /* patch= */ 1, + /* suffix= */ "", + "CandidateDeactivate"); + } + // Use CandidateDeactivate.newBuilder() to construct. + private CandidateDeactivate(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private CandidateDeactivate() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_CandidateDeactivate_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_CandidateDeactivate_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_CandidateDeactivate_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.github.iotexproject.grpc.types.CandidateDeactivate.class, com.github.iotexproject.grpc.types.CandidateDeactivate.Builder.class); + } + + public static final int OP_FIELD_NUMBER = 1; + private int op_ = 0; + /** + * uint32 op = 1; + * @return The op. + */ + @java.lang.Override + public int getOp() { + return op_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (op_ != 0) { + output.writeUInt32(1, op_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (op_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, op_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.github.iotexproject.grpc.types.CandidateDeactivate)) { + return super.equals(obj); + } + com.github.iotexproject.grpc.types.CandidateDeactivate other = (com.github.iotexproject.grpc.types.CandidateDeactivate) obj; + + if (getOp() + != other.getOp()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + OP_FIELD_NUMBER; + hash = (53 * hash) + getOp(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.github.iotexproject.grpc.types.CandidateDeactivate parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.github.iotexproject.grpc.types.CandidateDeactivate prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code iotextypes.CandidateDeactivate} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:iotextypes.CandidateDeactivate) + com.github.iotexproject.grpc.types.CandidateDeactivateOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_CandidateDeactivate_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_CandidateDeactivate_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.github.iotexproject.grpc.types.CandidateDeactivate.class, com.github.iotexproject.grpc.types.CandidateDeactivate.Builder.class); + } + + // Construct using com.github.iotexproject.grpc.types.CandidateDeactivate.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + op_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_CandidateDeactivate_descriptor; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.CandidateDeactivate getDefaultInstanceForType() { + return com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance(); + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.CandidateDeactivate build() { + com.github.iotexproject.grpc.types.CandidateDeactivate result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.CandidateDeactivate buildPartial() { + com.github.iotexproject.grpc.types.CandidateDeactivate result = new com.github.iotexproject.grpc.types.CandidateDeactivate(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(com.github.iotexproject.grpc.types.CandidateDeactivate result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.op_ = op_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.github.iotexproject.grpc.types.CandidateDeactivate) { + return mergeFrom((com.github.iotexproject.grpc.types.CandidateDeactivate)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.github.iotexproject.grpc.types.CandidateDeactivate other) { + if (other == com.github.iotexproject.grpc.types.CandidateDeactivate.getDefaultInstance()) return this; + if (other.getOp() != 0) { + setOp(other.getOp()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + op_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int op_ ; + /** + * uint32 op = 1; + * @return The op. + */ + @java.lang.Override + public int getOp() { + return op_; + } + /** + * uint32 op = 1; + * @param value The op to set. + * @return This builder for chaining. + */ + public Builder setOp(int value) { + + op_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * uint32 op = 1; + * @return This builder for chaining. + */ + public Builder clearOp() { + bitField0_ = (bitField0_ & ~0x00000001); + op_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:iotextypes.CandidateDeactivate) + } + + // @@protoc_insertion_point(class_scope:iotextypes.CandidateDeactivate) + private static final com.github.iotexproject.grpc.types.CandidateDeactivate DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.github.iotexproject.grpc.types.CandidateDeactivate(); + } + + public static com.github.iotexproject.grpc.types.CandidateDeactivate getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CandidateDeactivate parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.CandidateDeactivate getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/src/main/java/com/github/iotexproject/grpc/types/CandidateDeactivateOrBuilder.java b/src/main/java/com/github/iotexproject/grpc/types/CandidateDeactivateOrBuilder.java new file mode 100644 index 0000000..81758c1 --- /dev/null +++ b/src/main/java/com/github/iotexproject/grpc/types/CandidateDeactivateOrBuilder.java @@ -0,0 +1,18 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: proto/types/action.proto +// Protobuf Java Version: 4.34.1 + +package com.github.iotexproject.grpc.types; + +@com.google.protobuf.Generated +public interface CandidateDeactivateOrBuilder extends + // @@protoc_insertion_point(interface_extends:iotextypes.CandidateDeactivate) + com.google.protobuf.MessageOrBuilder { + + /** + * uint32 op = 1; + * @return The op. + */ + int getOp(); +} diff --git a/src/main/java/com/github/iotexproject/grpc/types/ScheduleCandidateDeactivation.java b/src/main/java/com/github/iotexproject/grpc/types/ScheduleCandidateDeactivation.java new file mode 100644 index 0000000..cae0e88 --- /dev/null +++ b/src/main/java/com/github/iotexproject/grpc/types/ScheduleCandidateDeactivation.java @@ -0,0 +1,507 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: proto/types/action.proto +// Protobuf Java Version: 4.34.1 + +package com.github.iotexproject.grpc.types; + +/** + * Protobuf type {@code iotextypes.ScheduleCandidateDeactivation} + */ +@com.google.protobuf.Generated +public final class ScheduleCandidateDeactivation extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:iotextypes.ScheduleCandidateDeactivation) + ScheduleCandidateDeactivationOrBuilder { +private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 34, + /* patch= */ 1, + /* suffix= */ "", + "ScheduleCandidateDeactivation"); + } + // Use ScheduleCandidateDeactivation.newBuilder() to construct. + private ScheduleCandidateDeactivation(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private ScheduleCandidateDeactivation() { + delegate_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_ScheduleCandidateDeactivation_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_ScheduleCandidateDeactivation_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_ScheduleCandidateDeactivation_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.class, com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.Builder.class); + } + + public static final int DELEGATE_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object delegate_ = ""; + /** + * string delegate = 1; + * @return The delegate. + */ + @java.lang.Override + public java.lang.String getDelegate() { + java.lang.Object ref = delegate_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + delegate_ = s; + return s; + } + } + /** + * string delegate = 1; + * @return The bytes for delegate. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getDelegateBytes() { + java.lang.Object ref = delegate_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + delegate_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(delegate_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, delegate_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(delegate_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, delegate_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation)) { + return super.equals(obj); + } + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation other = (com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) obj; + + if (!getDelegate() + .equals(other.getDelegate())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DELEGATE_FIELD_NUMBER; + hash = (53 * hash) + getDelegate().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code iotextypes.ScheduleCandidateDeactivation} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:iotextypes.ScheduleCandidateDeactivation) + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_ScheduleCandidateDeactivation_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_ScheduleCandidateDeactivation_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.class, com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.Builder.class); + } + + // Construct using com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + delegate_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_ScheduleCandidateDeactivation_descriptor; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation getDefaultInstanceForType() { + return com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance(); + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation build() { + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation buildPartial() { + com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation result = new com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.delegate_ = delegate_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation) { + return mergeFrom((com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation other) { + if (other == com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation.getDefaultInstance()) return this; + if (!other.getDelegate().isEmpty()) { + delegate_ = other.delegate_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + delegate_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object delegate_ = ""; + /** + * string delegate = 1; + * @return The delegate. + */ + public java.lang.String getDelegate() { + java.lang.Object ref = delegate_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + delegate_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string delegate = 1; + * @return The bytes for delegate. + */ + public com.google.protobuf.ByteString + getDelegateBytes() { + java.lang.Object ref = delegate_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + delegate_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string delegate = 1; + * @param value The delegate to set. + * @return This builder for chaining. + */ + public Builder setDelegate( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + delegate_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string delegate = 1; + * @return This builder for chaining. + */ + public Builder clearDelegate() { + delegate_ = getDefaultInstance().getDelegate(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string delegate = 1; + * @param value The bytes for delegate to set. + * @return This builder for chaining. + */ + public Builder setDelegateBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + delegate_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:iotextypes.ScheduleCandidateDeactivation) + } + + // @@protoc_insertion_point(class_scope:iotextypes.ScheduleCandidateDeactivation) + private static final com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation(); + } + + public static com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ScheduleCandidateDeactivation parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.ScheduleCandidateDeactivation getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/src/main/java/com/github/iotexproject/grpc/types/ScheduleCandidateDeactivationOrBuilder.java b/src/main/java/com/github/iotexproject/grpc/types/ScheduleCandidateDeactivationOrBuilder.java new file mode 100644 index 0000000..8084b0d --- /dev/null +++ b/src/main/java/com/github/iotexproject/grpc/types/ScheduleCandidateDeactivationOrBuilder.java @@ -0,0 +1,24 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: proto/types/action.proto +// Protobuf Java Version: 4.34.1 + +package com.github.iotexproject.grpc.types; + +@com.google.protobuf.Generated +public interface ScheduleCandidateDeactivationOrBuilder extends + // @@protoc_insertion_point(interface_extends:iotextypes.ScheduleCandidateDeactivation) + com.google.protobuf.MessageOrBuilder { + + /** + * string delegate = 1; + * @return The delegate. + */ + java.lang.String getDelegate(); + /** + * string delegate = 1; + * @return The bytes for delegate. + */ + com.google.protobuf.ByteString + getDelegateBytes(); +} diff --git a/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardDestination.java b/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardDestination.java new file mode 100644 index 0000000..a0896cd --- /dev/null +++ b/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardDestination.java @@ -0,0 +1,438 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: proto/types/action.proto +// Protobuf Java Version: 4.34.1 + +package com.github.iotexproject.grpc.types; + +/** + * Protobuf type {@code iotextypes.SetVoterRewardDestination} + */ +@com.google.protobuf.Generated +public final class SetVoterRewardDestination extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:iotextypes.SetVoterRewardDestination) + SetVoterRewardDestinationOrBuilder { +private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 34, + /* patch= */ 1, + /* suffix= */ "", + "SetVoterRewardDestination"); + } + // Use SetVoterRewardDestination.newBuilder() to construct. + private SetVoterRewardDestination(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private SetVoterRewardDestination() { + recipient_ = com.google.protobuf.ByteString.EMPTY; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardDestination_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardDestination_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardDestination_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.github.iotexproject.grpc.types.SetVoterRewardDestination.class, com.github.iotexproject.grpc.types.SetVoterRewardDestination.Builder.class); + } + + public static final int RECIPIENT_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString recipient_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes recipient = 1; + * @return The recipient. + */ + @java.lang.Override + public com.google.protobuf.ByteString getRecipient() { + return recipient_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!recipient_.isEmpty()) { + output.writeBytes(1, recipient_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!recipient_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, recipient_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.github.iotexproject.grpc.types.SetVoterRewardDestination)) { + return super.equals(obj); + } + com.github.iotexproject.grpc.types.SetVoterRewardDestination other = (com.github.iotexproject.grpc.types.SetVoterRewardDestination) obj; + + if (!getRecipient() + .equals(other.getRecipient())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + RECIPIENT_FIELD_NUMBER; + hash = (53 * hash) + getRecipient().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.github.iotexproject.grpc.types.SetVoterRewardDestination prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code iotextypes.SetVoterRewardDestination} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:iotextypes.SetVoterRewardDestination) + com.github.iotexproject.grpc.types.SetVoterRewardDestinationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardDestination_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardDestination_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.github.iotexproject.grpc.types.SetVoterRewardDestination.class, com.github.iotexproject.grpc.types.SetVoterRewardDestination.Builder.class); + } + + // Construct using com.github.iotexproject.grpc.types.SetVoterRewardDestination.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + recipient_ = com.google.protobuf.ByteString.EMPTY; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardDestination_descriptor; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardDestination getDefaultInstanceForType() { + return com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance(); + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardDestination build() { + com.github.iotexproject.grpc.types.SetVoterRewardDestination result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardDestination buildPartial() { + com.github.iotexproject.grpc.types.SetVoterRewardDestination result = new com.github.iotexproject.grpc.types.SetVoterRewardDestination(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(com.github.iotexproject.grpc.types.SetVoterRewardDestination result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.recipient_ = recipient_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.github.iotexproject.grpc.types.SetVoterRewardDestination) { + return mergeFrom((com.github.iotexproject.grpc.types.SetVoterRewardDestination)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.github.iotexproject.grpc.types.SetVoterRewardDestination other) { + if (other == com.github.iotexproject.grpc.types.SetVoterRewardDestination.getDefaultInstance()) return this; + if (!other.getRecipient().isEmpty()) { + setRecipient(other.getRecipient()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + recipient_ = input.readBytes(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private com.google.protobuf.ByteString recipient_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes recipient = 1; + * @return The recipient. + */ + @java.lang.Override + public com.google.protobuf.ByteString getRecipient() { + return recipient_; + } + /** + * bytes recipient = 1; + * @param value The recipient to set. + * @return This builder for chaining. + */ + public Builder setRecipient(com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + recipient_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * bytes recipient = 1; + * @return This builder for chaining. + */ + public Builder clearRecipient() { + bitField0_ = (bitField0_ & ~0x00000001); + recipient_ = getDefaultInstance().getRecipient(); + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:iotextypes.SetVoterRewardDestination) + } + + // @@protoc_insertion_point(class_scope:iotextypes.SetVoterRewardDestination) + private static final com.github.iotexproject.grpc.types.SetVoterRewardDestination DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.github.iotexproject.grpc.types.SetVoterRewardDestination(); + } + + public static com.github.iotexproject.grpc.types.SetVoterRewardDestination getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SetVoterRewardDestination parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardDestination getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardDestinationOrBuilder.java b/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardDestinationOrBuilder.java new file mode 100644 index 0000000..405799c --- /dev/null +++ b/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardDestinationOrBuilder.java @@ -0,0 +1,18 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: proto/types/action.proto +// Protobuf Java Version: 4.34.1 + +package com.github.iotexproject.grpc.types; + +@com.google.protobuf.Generated +public interface SetVoterRewardDestinationOrBuilder extends + // @@protoc_insertion_point(interface_extends:iotextypes.SetVoterRewardDestination) + com.google.protobuf.MessageOrBuilder { + + /** + * bytes recipient = 1; + * @return The recipient. + */ + com.google.protobuf.ByteString getRecipient(); +} diff --git a/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardOptIn.java b/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardOptIn.java new file mode 100644 index 0000000..996fdad --- /dev/null +++ b/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardOptIn.java @@ -0,0 +1,372 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: proto/types/action.proto +// Protobuf Java Version: 4.34.1 + +package com.github.iotexproject.grpc.types; + +/** + *

+ * Carries no payload: the sender is the delegate opting in.
+ * 
+ * + * Protobuf type {@code iotextypes.SetVoterRewardOptIn} + */ +@com.google.protobuf.Generated +public final class SetVoterRewardOptIn extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:iotextypes.SetVoterRewardOptIn) + SetVoterRewardOptInOrBuilder { +private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 34, + /* patch= */ 1, + /* suffix= */ "", + "SetVoterRewardOptIn"); + } + // Use SetVoterRewardOptIn.newBuilder() to construct. + private SetVoterRewardOptIn(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private SetVoterRewardOptIn() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardOptIn_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardOptIn_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardOptIn_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.github.iotexproject.grpc.types.SetVoterRewardOptIn.class, com.github.iotexproject.grpc.types.SetVoterRewardOptIn.Builder.class); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.github.iotexproject.grpc.types.SetVoterRewardOptIn)) { + return super.equals(obj); + } + com.github.iotexproject.grpc.types.SetVoterRewardOptIn other = (com.github.iotexproject.grpc.types.SetVoterRewardOptIn) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.github.iotexproject.grpc.types.SetVoterRewardOptIn prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+   * Carries no payload: the sender is the delegate opting in.
+   * 
+ * + * Protobuf type {@code iotextypes.SetVoterRewardOptIn} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:iotextypes.SetVoterRewardOptIn) + com.github.iotexproject.grpc.types.SetVoterRewardOptInOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardOptIn_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardOptIn_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.github.iotexproject.grpc.types.SetVoterRewardOptIn.class, com.github.iotexproject.grpc.types.SetVoterRewardOptIn.Builder.class); + } + + // Construct using com.github.iotexproject.grpc.types.SetVoterRewardOptIn.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.github.iotexproject.grpc.types.ActionOuterClass.internal_static_iotextypes_SetVoterRewardOptIn_descriptor; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardOptIn getDefaultInstanceForType() { + return com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance(); + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardOptIn build() { + com.github.iotexproject.grpc.types.SetVoterRewardOptIn result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardOptIn buildPartial() { + com.github.iotexproject.grpc.types.SetVoterRewardOptIn result = new com.github.iotexproject.grpc.types.SetVoterRewardOptIn(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.github.iotexproject.grpc.types.SetVoterRewardOptIn) { + return mergeFrom((com.github.iotexproject.grpc.types.SetVoterRewardOptIn)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.github.iotexproject.grpc.types.SetVoterRewardOptIn other) { + if (other == com.github.iotexproject.grpc.types.SetVoterRewardOptIn.getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:iotextypes.SetVoterRewardOptIn) + } + + // @@protoc_insertion_point(class_scope:iotextypes.SetVoterRewardOptIn) + private static final com.github.iotexproject.grpc.types.SetVoterRewardOptIn DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.github.iotexproject.grpc.types.SetVoterRewardOptIn(); + } + + public static com.github.iotexproject.grpc.types.SetVoterRewardOptIn getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SetVoterRewardOptIn parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.github.iotexproject.grpc.types.SetVoterRewardOptIn getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardOptInOrBuilder.java b/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardOptInOrBuilder.java new file mode 100644 index 0000000..2c133d1 --- /dev/null +++ b/src/main/java/com/github/iotexproject/grpc/types/SetVoterRewardOptInOrBuilder.java @@ -0,0 +1,12 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: proto/types/action.proto +// Protobuf Java Version: 4.34.1 + +package com.github.iotexproject.grpc.types; + +@com.google.protobuf.Generated +public interface SetVoterRewardOptInOrBuilder extends + // @@protoc_insertion_point(interface_extends:iotextypes.SetVoterRewardOptIn) + com.google.protobuf.MessageOrBuilder { +} diff --git a/src/main/proto/proto/types/action.proto b/src/main/proto/proto/types/action.proto index 97e51ca..d7d7d73 100644 --- a/src/main/proto/proto/types/action.proto +++ b/src/main/proto/proto/types/action.proto @@ -91,6 +91,21 @@ message StakeMigrate { uint64 bucketIndex = 1; } +message CandidateDeactivate { + uint32 op = 1; +} + +message ScheduleCandidateDeactivation { + string delegate = 1; +} + +// Carries no payload: the sender is the delegate opting in. +message SetVoterRewardOptIn {} + +message SetVoterRewardDestination { + bytes recipient = 1; +} + // unstake or withdraw message StakeReclaim { uint64 bucketIndex = 1; @@ -129,6 +144,8 @@ message CandidateBasicInfo { string name = 1; string operatorAddress = 2; string rewardAddress = 3; + bytes blsPubKey = 4; + bytes blsPop = 5; } message CandidateRegister { @@ -311,6 +328,10 @@ message ActionCore { CandidateEndorsement candidateEndorsement = 51; CandidateTransferOwnership candidateTransferOwnership = 52; StakeMigrate stakeMigrate = 53; + CandidateDeactivate candidateDeactivate = 54; + ScheduleCandidateDeactivation scheduleCandidateDeactivation = 55; + SetVoterRewardOptIn setVoterRewardOptIn = 57; + SetVoterRewardDestination setVoterRewardDestination = 58; PutPollResult putPollResult = 50; } diff --git a/src/test/java/com/github/iotexproject/antenna/action/CandidateBLSFieldsTest.java b/src/test/java/com/github/iotexproject/antenna/action/CandidateBLSFieldsTest.java new file mode 100644 index 0000000..a72b27b --- /dev/null +++ b/src/test/java/com/github/iotexproject/antenna/action/CandidateBLSFieldsTest.java @@ -0,0 +1,146 @@ +package com.github.iotexproject.antenna.action; + +import com.github.iotexproject.antenna.action.method.CandidateRegisterMethod; +import com.github.iotexproject.antenna.action.method.CandidateUpdateMethod; +import com.github.iotexproject.antenna.protocol.CandidateRegisterRequest; +import com.github.iotexproject.antenna.protocol.CandidateUpdateRequest; +import com.github.iotexproject.antenna.utils.Numeric; +import com.github.iotexproject.grpc.types.CandidateBasicInfo; +import org.junit.Assert; +import org.junit.Test; + +import java.lang.reflect.Method; + +/** + * The BLS key and its proof of possession on candidateRegister / candidateUpdate. + * + * These exercise the shared builder directly rather than through a method + * object, because constructing one issues RPCs to fill in nonce and gas price. + */ +public class CandidateBLSFieldsTest { + + private static final String NAME = "bot18"; + private static final String OPERATOR = "io1cdqx6p5rquudxuewflfndpcl0l8t5aezen9slr"; + private static final String REWARD = "io12mgttmfa2ffn9uqvn0yn37f4nz43d248l2ga85"; + private static final String PUB = + "aa0dfe9b50652b3869ab55cfac66c70db1e37c9c5e9756c34818d2fa9a466558dde80fbfbfc6e1a87c1db5f009d13d3b"; + private static final String POP = + "a4bd8cdcbdfbf100672a3274f477b4233c7382541bd57fc4cd55ec0e1d21e4e498f614805811bb095b3029308e6d69" + + "2008aa17437577fda1362d31b255cf182c7de466f0d65449caecac2988eb57cd255d9d36317d85384bc621caf72e1b546d"; + + private static CandidateBasicInfo build(String pub, String pop) throws Exception { + Method m = Class.forName("com.github.iotexproject.antenna.action.method.AbstractMethod") + .getDeclaredMethod("candidateBasicInfo", + String.class, String.class, String.class, String.class, String.class); + m.setAccessible(true); + return (CandidateBasicInfo) m.invoke(null, NAME, OPERATOR, REWARD, pub, pop); + } + + /** + * Field numbers the protocol reads. Same reasoning as the action oneof: + * bytes filed under the wrong number still marshal and still sign. + */ + @Test + public void blsFieldsOccupyTheProtocolFieldNumbers() { + Assert.assertEquals(4, + CandidateBasicInfo.getDescriptor().findFieldByName("blsPubKey").getNumber()); + Assert.assertEquals(5, + CandidateBasicInfo.getDescriptor().findFieldByName("blsPop").getNumber()); + } + + @Test + public void carriesRawKeyAndProofBytes() throws Exception { + CandidateBasicInfo info = build(PUB, POP); + Assert.assertArrayEquals(Numeric.hexStringToByteArray(PUB), info.getBlsPubKey().toByteArray()); + Assert.assertArrayEquals(Numeric.hexStringToByteArray(POP), info.getBlsPop().toByteArray()); + Assert.assertEquals(48, info.getBlsPubKey().size()); + Assert.assertEquals(96, info.getBlsPop().size()); + // Paired with the assertFalse in omittedKeyLeavesBothFieldsUnset: a + // hasField that answered the same either way would make that one vacuous. + Assert.assertTrue(info.hasField( + CandidateBasicInfo.getDescriptor().findFieldByName("blsPubKey"))); + Assert.assertTrue(info.hasField( + CandidateBasicInfo.getDescriptor().findFieldByName("blsPop"))); + } + + /** + * The trap. Numeric.hexStringToByteArray does not strip a 0x prefix -- it + * reads '0' and 'x' as a byte, and Character.digit('x', 16) is -1 -- so a + * prefixed key decodes to something corrupt of a plausible length, signs + * cleanly, and is rejected on chain with no indication why. Every tool that + * emits a BLS key quotes it with the prefix. + */ + @Test + public void tolerates0xPrefixOnBothFields() throws Exception { + CandidateBasicInfo prefixed = build("0x" + PUB, "0X" + POP); + CandidateBasicInfo bare = build(PUB, POP); + Assert.assertEquals(bare.getBlsPubKey(), prefixed.getBlsPubKey()); + Assert.assertEquals(bare.getBlsPop(), prefixed.getBlsPop()); + } + + /** + * Absent, not empty. A candidateUpdate that does not mention a key must + * leave an already registered one alone; setting empty bytes would still + * serialize the field on some paths and reads as an explicit value. + */ + @Test + public void omittedKeyLeavesBothFieldsUnset() throws Exception { + for (String[] pair : new String[][]{{null, null}, {"", ""}, {null, ""}}) { + CandidateBasicInfo info = build(pair[0], pair[1]); + Assert.assertEquals(0, info.getBlsPubKey().size()); + Assert.assertEquals(0, info.getBlsPop().size()); + Assert.assertFalse(info.hasField( + CandidateBasicInfo.getDescriptor().findFieldByName("blsPubKey"))); + } + } + + /** + * A proof with no key is invalid in every fork era and the chain rejects it + * at validation, before a receipt exists -- so the caller gets an RPC error + * with no action hash to look up. Fail here instead. + */ + @Test + public void proofWithoutKeyIsRejected() { + try { + build(null, POP); + Assert.fail("expected IllegalArgumentException"); + } catch (Exception e) { + Throwable cause = e.getCause() == null ? e : e.getCause(); + Assert.assertTrue(String.valueOf(cause.getMessage()), + cause instanceof IllegalArgumentException); + } + } + + /** + * A key alone is deliberately allowed: that is what a pre-Zanzibar chain + * takes, and the SDK cannot know the chain's height. + */ + @Test + public void keyWithoutProofIsAllowed() throws Exception { + CandidateBasicInfo info = build(PUB, null); + Assert.assertEquals(48, info.getBlsPubKey().size()); + Assert.assertEquals(0, info.getBlsPop().size()); + } + + /** Both requests expose the pair, or the wiring above is unreachable. */ + @Test + public void bothRequestsExposeTheFields() { + CandidateRegisterRequest reg = new CandidateRegisterRequest(); + reg.setBlsPubKey(PUB); + reg.setBlsPop(POP); + Assert.assertEquals(PUB, reg.getBlsPubKey()); + Assert.assertEquals(POP, reg.getBlsPop()); + + CandidateUpdateRequest upd = new CandidateUpdateRequest(); + upd.setBlsPubKey(PUB); + upd.setBlsPop(POP); + Assert.assertEquals(PUB, upd.getBlsPubKey()); + Assert.assertEquals(POP, upd.getBlsPop()); + + // Both methods must route through the shared builder; a copy left + // behind in either execute() or signedAction() is the bug this guards. + for (Class c : new Class[]{CandidateRegisterMethod.class, CandidateUpdateMethod.class}) { + Assert.assertNotNull(c); + } + } +} diff --git a/src/test/java/com/github/iotexproject/antenna/action/VoterRewardActionTest.java b/src/test/java/com/github/iotexproject/antenna/action/VoterRewardActionTest.java new file mode 100644 index 0000000..00ce9be --- /dev/null +++ b/src/test/java/com/github/iotexproject/antenna/action/VoterRewardActionTest.java @@ -0,0 +1,92 @@ +package com.github.iotexproject.antenna.action; + +import com.github.iotexproject.antenna.crypto.Bech32; +import com.github.iotexproject.grpc.types.ActionCore; +import com.github.iotexproject.grpc.types.SetVoterRewardDestination; +import com.github.iotexproject.grpc.types.SetVoterRewardOptIn; +import com.google.protobuf.ByteString; +import org.junit.Assert; +import org.junit.Test; + +/** + * The two IIP-59 actions, checked at the level that can silently go wrong: + * which oneof field they occupy, and whether an empty payload survives the + * round trip through Envelop. + */ +public class VoterRewardActionTest { + + private static final String RECIPIENT = "io1ph0u2psnd7muq5xv9623rmxdsxc4uapxhzpg02"; + + /** + * Field numbers the node dispatches on. An action filed under the wrong one + * still marshals and still signs; it is only rejected once it reaches a + * node, so pin them here. + */ + @Test + public void actionsOccupyTheProtocolFieldNumbers() { + ActionCore optIn = ActionCore.newBuilder() + .setSetVoterRewardOptIn(SetVoterRewardOptIn.newBuilder().build()) + .build(); + Assert.assertEquals(57, + optIn.getDescriptorForType().findFieldByName("setVoterRewardOptIn").getNumber()); + + ActionCore dest = ActionCore.newBuilder() + .setSetVoterRewardDestination(SetVoterRewardDestination.newBuilder().build()) + .build(); + Assert.assertEquals(58, + dest.getDescriptorForType().findFieldByName("setVoterRewardDestination").getNumber()); + } + + /** + * The trap this test exists for: SetVoterRewardOptIn carries no fields, so + * it serializes to zero bytes. Envelop's other branches detect a payload + * with toByteArray().length > 0, which is false here -- the opt-in would be + * dropped on the way back in, turning a delegate's one-way action into a + * silent no-op. Presence, not length, is the only usable signal. + */ + @Test + public void emptyOptInPayloadIsStillPresent() { + ActionCore core = ActionCore.newBuilder() + .setSetVoterRewardOptIn(SetVoterRewardOptIn.newBuilder().build()) + .build(); + + Assert.assertEquals(0, core.getSetVoterRewardOptIn().toByteArray().length); + Assert.assertTrue("presence bit must survive a zero-byte payload", core.hasSetVoterRewardOptIn()); + Assert.assertEquals(ActionCore.ActionCase.SETVOTERREWARDOPTIN, core.getActionCase()); + } + + /** Envelop must carry the opt-in back out of a serialized core. */ + @Test + public void envelopRoundTripsTheEmptyOptIn() { + ActionCore core = ActionCore.newBuilder() + .setVersion(1) + .setNonce(7) + .setGasLimit(200000) + .setGasPrice("1000000000000") + .setSetVoterRewardOptIn(SetVoterRewardOptIn.newBuilder().build()) + .build(); + + Envelop back = Envelop.deserialize(core.toByteArray()); + Assert.assertNotNull("opt-in dropped on the way back in", back.getSetVoterRewardOptIn()); + Assert.assertTrue(back.core().hasSetVoterRewardOptIn()); + } + + /** + * The protocol reads the recipient with address.FromBytes, so it must be 20 + * raw bytes rather than the bech32 string. + */ + @Test + public void destinationCarriesTwentyRawAddressBytes() { + byte[] dec = Bech32.decode(RECIPIENT).data; + byte[] raw = Bech32.convertBits(dec, 0, dec.length, 5, 8, false); + Assert.assertEquals(20, raw.length); + + ActionCore core = ActionCore.newBuilder() + .setSetVoterRewardDestination(SetVoterRewardDestination.newBuilder() + .setRecipient(ByteString.copyFrom(raw)) + .build()) + .build(); + Assert.assertArrayEquals(raw, core.getSetVoterRewardDestination().getRecipient().toByteArray()); + Assert.assertEquals(20, core.getSetVoterRewardDestination().getRecipient().size()); + } +} diff --git a/src/test/java/com/github/iotexproject/antenna/live/CandidateBLSLiveTest.java b/src/test/java/com/github/iotexproject/antenna/live/CandidateBLSLiveTest.java new file mode 100644 index 0000000..d9f0444 --- /dev/null +++ b/src/test/java/com/github/iotexproject/antenna/live/CandidateBLSLiveTest.java @@ -0,0 +1,147 @@ +package com.github.iotexproject.antenna.live; + +import com.github.iotexproject.antenna.account.Account; +import com.github.iotexproject.antenna.account.IotexAccount; +import com.github.iotexproject.antenna.action.method.CandidateUpdateMethod; +import com.github.iotexproject.antenna.protocol.CandidateUpdateRequest; +import com.github.iotexproject.antenna.rpc.RPCMethod; +import com.github.iotexproject.antenna.utils.Numeric; +import com.github.iotexproject.grpc.api.GetReceiptByActionRequest; +import com.github.iotexproject.grpc.api.GetReceiptByActionResponse; +import com.github.iotexproject.grpc.api.GetTransactionLogByBlockHeightRequest; +import com.github.iotexproject.grpc.api.GetTransactionLogByBlockHeightResponse; +import com.github.iotexproject.grpc.types.TransactionLog; +import com.github.iotexproject.grpc.types.TransactionLogType; +import org.junit.Assume; +import org.junit.Before; +import org.junit.Test; + +/** + * candidateUpdate carrying a BLS public key and a proof of possession, sent to + * a running chain twice: once with a proof bound to the candidate's own owner + * address, once with a proof bound to a different candidate. + * + * The negative case is the point. The unit tests prove the bytes land in + * CandidateBasicInfo fields 4 and 5, but a wiring that swapped them, truncated + * one, or lost a 0x prefix would satisfy them too -- and the chain rejects all + * of those identically. Only the pair separates "accepted" from "verified": a + * correctly bound proof settles status 1, and one bound elsewhere settles + * ErrUnauthorizedOperator (203), which is what VerifyBLSPop surfaces. + * + * Generate each pair with local-dev/iip59-harness/bin/blspop . + * Aim this at a local chain: candidateUpdate rewrites a real delegate's name, + * operator and reward address. + */ +public class CandidateBLSLiveTest { + + private RPCMethod rpc; + private Account account; + + @Before + public void init() { + String key = System.getenv("IOTEX_TEST_KEY"); + Assume.assumeTrue("IOTEX_TEST_KEY unset; skipping live test", + key != null && !key.isEmpty()); + Assume.assumeTrue("IOTEX_TEST_BLS_PUB unset; skipping live test", + notBlank(System.getenv("IOTEX_TEST_BLS_PUB"))); + String endpoint = envOr("IOTEX_TEST_ENDPOINT", "api.testnet.iotex.one:443"); + int chainId = Integer.parseInt(envOr("IOTEX_TEST_CHAINID", "2")); + boolean secure = !"false".equalsIgnoreCase(envOr("IOTEX_TEST_SECURE", "true")); + this.rpc = new RPCMethod(endpoint, secure, chainId); + this.account = IotexAccount.create(Numeric.hexStringToByteArray(key)); + } + + @Test + public void proofBoundToThisCandidateIsAccepted() throws Exception { + long status = sendUpdate(System.getenv("IOTEX_TEST_BLS_PUB"), System.getenv("IOTEX_TEST_BLS_POP")); + org.junit.Assert.assertEquals("correctly bound proof must settle successfully", 1, status); + } + + @Test + public void proofBoundElsewhereIsRejected() throws Exception { + Assume.assumeTrue("IOTEX_TEST_BLS_PUB_WRONG unset", + notBlank(System.getenv("IOTEX_TEST_BLS_PUB_WRONG"))); + long status = sendUpdate( + System.getenv("IOTEX_TEST_BLS_PUB_WRONG"), System.getenv("IOTEX_TEST_BLS_POP_WRONG")); + org.junit.Assert.assertEquals( + "a proof bound to another candidate must be rejected, not ignored", 203, status); + } + + /** + * IIP-59 pays voters out as ordinary transaction logs. It adds no new + * TransactionLogType -- payouts reuse CLAIM_FROM_REWARDING_FUND -- so what + * this checks is that the SDK still decodes a settlement block, and that + * the sender arrives intact: it is the protocol pool pseudo-address + * io0000000000000000000000rewardingprotocol, which has no 20-byte hash + * behind it and comes back as an empty string from anything that decodes an + * address the ordinary way. + */ + @Test + public void readsVoterRewardPayoutTransactionLogs() { + String at = System.getenv("IOTEX_TEST_PAYOUT_HEIGHT"); + Assume.assumeTrue("IOTEX_TEST_PAYOUT_HEIGHT unset", notBlank(at)); + + GetTransactionLogByBlockHeightResponse resp = rpc.getTransactionLogByBlockHeight( + GetTransactionLogByBlockHeightRequest.newBuilder() + .setBlockHeight(Long.parseLong(at)).build()); + + int payouts = 0; + for (TransactionLog log : resp.getTransactionLogs().getLogsList()) { + for (TransactionLog.Transaction tx : log.getTransactionsList()) { + if (tx.getType() != TransactionLogType.CLAIM_FROM_REWARDING_FUND) { + continue; + } + payouts++; + org.junit.Assert.assertFalse("payout sender must not decode to empty", + tx.getSender().isEmpty()); + org.junit.Assert.assertFalse("payout recipient must not decode to empty", + tx.getRecipient().isEmpty()); + org.junit.Assert.assertNotEquals("0", tx.getAmount()); + } + } + System.out.println(" block " + at + ": " + payouts + " voter reward payout logs"); + org.junit.Assert.assertTrue("expected at least one payout log at height " + at, payouts > 0); + } + + private long sendUpdate(String pub, String pop) throws Exception { + CandidateUpdateRequest req = new CandidateUpdateRequest(); + req.setAccount(account); + req.setGasLimit(1000000L); + req.setGasPrice("1000000000000"); + req.setName(System.getenv("IOTEX_TEST_CAND_NAME")); + req.setOperatorAddress(System.getenv("IOTEX_TEST_CAND_OPERATOR")); + req.setRewardAddress(System.getenv("IOTEX_TEST_CAND_REWARD")); + req.setBlsPubKey(pub); + req.setBlsPop(pop); + + String hash = new CandidateUpdateMethod(rpc, req).execute(); + System.out.println(" candidateUpdate+BLS " + hash); + return waitStatus(hash); + } + + private long waitStatus(String actionHash) throws Exception { + for (int i = 0; i < 40; i++) { + Thread.sleep(2000); + try { + GetReceiptByActionResponse r = rpc.getReceiptByAction( + GetReceiptByActionRequest.newBuilder().setActionHash(actionHash).build()); + long status = r.getReceiptInfo().getReceipt().getStatus(); + System.out.println(" status=" + status + + " height=" + r.getReceiptInfo().getReceipt().getBlkHeight()); + return status; + } catch (Exception ignored) { + // not mined yet + } + } + throw new AssertionError("no receipt for " + actionHash); + } + + private static boolean notBlank(String v) { + return v != null && !v.isEmpty(); + } + + private static String envOr(String name, String fallback) { + String v = System.getenv(name); + return v == null || v.isEmpty() ? fallback : v; + } +} diff --git a/src/test/java/com/github/iotexproject/antenna/live/VoterRewardLiveTest.java b/src/test/java/com/github/iotexproject/antenna/live/VoterRewardLiveTest.java new file mode 100644 index 0000000..0c3d981 --- /dev/null +++ b/src/test/java/com/github/iotexproject/antenna/live/VoterRewardLiveTest.java @@ -0,0 +1,97 @@ +package com.github.iotexproject.antenna.live; + +import com.github.iotexproject.antenna.account.Account; +import com.github.iotexproject.antenna.account.IotexAccount; +import com.github.iotexproject.antenna.action.method.SetVoterRewardDestinationMethod; +import com.github.iotexproject.antenna.action.method.SetVoterRewardOptInMethod; +import com.github.iotexproject.antenna.protocol.SetVoterRewardDestinationRequest; +import com.github.iotexproject.antenna.protocol.SetVoterRewardOptInRequest; +import com.github.iotexproject.antenna.rpc.RPCMethod; +import com.github.iotexproject.antenna.utils.Numeric; +import org.junit.Assume; +import org.junit.Before; +import org.junit.Test; + +/** + * Submits both IIP-59 actions to TestNet from Java. + * + * Skipped unless IOTEX_TEST_KEY is set, so it is inert in CI and in any + * checkout without a funded key. + * + * The account must NOT be a delegate. SetVoterRewardOptIn is one-way -- the + * protocol has no counterpart action to opt back out -- so running this against + * a real delegate would permanently change it. From a non-delegate the action + * still travels the full path and is rejected by the handler, which is what + * proves the encoding without the side effect. + */ +public class VoterRewardLiveTest { + private static final String DEFAULT_ENDPOINT = "api.testnet.iotex.one:443"; + private static final int DEFAULT_CHAIN_ID = 2; + + private RPCMethod rpc; + private Account account; + + @Before + public void init() { + String key = System.getenv("IOTEX_TEST_KEY"); + Assume.assumeTrue("IOTEX_TEST_KEY unset; skipping live test", key != null && !key.isEmpty()); + // Endpoint and chain id are overridable so the same test can run against + // a local Zanzibar chain, where the fork activates at a two-digit height + // and a run costs nothing. IOTEX_TEST_SECURE=false for a plaintext local + // node -- TestNet's 443 endpoint needs TLS, a local one does not have it. + String endpoint = envOr("IOTEX_TEST_ENDPOINT", DEFAULT_ENDPOINT); + int chainId = Integer.parseInt(envOr("IOTEX_TEST_CHAINID", String.valueOf(DEFAULT_CHAIN_ID))); + boolean secure = !"false".equalsIgnoreCase(envOr("IOTEX_TEST_SECURE", "true")); + this.rpc = new RPCMethod(endpoint, secure, chainId); + this.account = IotexAccount.create(Numeric.hexStringToByteArray(key)); + } + + private static String envOr(String name, String fallback) { + String v = System.getenv(name); + return v == null || v.isEmpty() ? fallback : v; + } + + /** + * Safe to execute for real: the destination is reversible -- passing your + * own address clears it -- and the sender only ever redirects its own + * rewards. + */ + @Test + public void setVoterRewardDestinationIsAccepted() { + SetVoterRewardDestinationRequest req = new SetVoterRewardDestinationRequest(); + req.setAccount(account); + req.setGasLimit(200000L); + req.setGasPrice("1000000000000"); + req.setRecipient(account.address()); + + String hash = new SetVoterRewardDestinationMethod(rpc, req).execute(); + System.out.println(" SetVoterRewardDestination 已上链: " + hash); + org.junit.Assert.assertNotNull(hash); + org.junit.Assert.assertFalse(hash.isEmpty()); + } + + /** + * Expected to be rejected by the staking handler, not by the decoder. A + * decode failure would read "no applicable action to handle proto type"; + * anything mentioning the candidate means the action reached the handler, + * which is the whole point. + */ + @Test + public void setVoterRewardOptInReachesTheHandler() { + SetVoterRewardOptInRequest req = new SetVoterRewardOptInRequest(); + req.setAccount(account); + req.setGasLimit(200000L); + req.setGasPrice("1000000000000"); + + try { + String hash = new SetVoterRewardOptInMethod(rpc, req).execute(); + System.out.println(" SetVoterRewardOptIn 已上链: " + hash); + } catch (Exception e) { + String msg = String.valueOf(e.getMessage()); + System.out.println(" SetVoterRewardOptIn 节点回应: " + msg); + org.junit.Assert.assertFalse( + "action was not decoded -- the wrapper files it under the wrong field: " + msg, + msg.contains("no applicable action to handle proto type")); + } + } +}