Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## UNRELEASED

### STATE BREAKING

- [\#277](https://github.com/cosmos/evm/pull/277) Add GetParams methods to staking and distribution precompile.

### DEPENDENCIES

### BUG FIXES
Expand Down
73 changes: 43 additions & 30 deletions contracts/solidity/precompiles/distribution/DistributionI.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,27 @@ DistributionI constant DISTRIBUTION_CONTRACT = DistributionI(
DISTRIBUTION_PRECOMPILE_ADDRESS
);

struct ValidatorSlashEvent {
uint64 validatorPeriod;
Dec fraction;
}

struct ValidatorDistributionInfo {
string operatorAddress;
DecCoin[] selfBondRewards;
DecCoin[] commission;
}

struct DelegationDelegatorReward {
string validatorAddress;
DecCoin[] reward;
}
struct ValidatorSlashEvent {
uint64 validatorPeriod;
Dec fraction;
}

struct ValidatorDistributionInfo {
string operatorAddress;
DecCoin[] selfBondRewards;
DecCoin[] commission;
}

struct DelegationDelegatorReward {
string validatorAddress;
DecCoin[] reward;
}

/// @dev Distribution module parameters
struct DistributionParams {
Dec communityTax;
bool withdrawAddrEnabled;
}

/// @author Evmos Team
/// @title Distribution Precompile Contract
Expand Down Expand Up @@ -154,9 +160,9 @@ interface DistributionI {
function validatorDistributionInfo(
string memory validatorAddress
)
external
view
returns (ValidatorDistributionInfo calldata distributionInfo);
external
view
returns (ValidatorDistributionInfo calldata distributionInfo);

/// @dev Queries the outstanding rewards of a validator address.
/// @param validatorAddress The address of the validator
Expand Down Expand Up @@ -186,12 +192,12 @@ interface DistributionI {
uint64 endingHeight,
PageRequest calldata pageRequest
)
external
view
returns (
ValidatorSlashEvent[] calldata slashes,
PageResponse calldata pageResponse
);
external
view
returns (
ValidatorSlashEvent[] calldata slashes,
PageResponse calldata pageResponse
);

/// @dev Queries the total rewards accrued by a delegation from a specific address to a given validator.
/// @param delegatorAddress The address of the delegator
Expand All @@ -210,12 +216,12 @@ interface DistributionI {
function delegationTotalRewards(
address delegatorAddress
)
external
view
returns (
DelegationDelegatorReward[] calldata rewards,
DecCoin[] calldata total
);
external
view
returns (
DelegationDelegatorReward[] calldata rewards,
DecCoin[] calldata total
);

/// @dev Queries all validators, that a given address has delegated to.
/// @param delegatorAddress The address of the delegator
Expand All @@ -234,4 +240,11 @@ interface DistributionI {
/// @dev Queries the coins in the community pool.
/// @return coins The coins in the community pool
function communityPool() external view returns (DecCoin[] calldata coins);

/// @dev Queries the distribution module parameters.
/// @return params The distribution module parameters
function getParams()
external
view
returns (DistributionParams memory params);
}
195 changes: 106 additions & 89 deletions contracts/solidity/precompiles/staking/StakingI.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,103 +25,113 @@ int256 constant DO_NOT_MODIFY_MIN_SELF_DELEGATION = -1;

/// @dev Defines the initial description to be used for creating
/// a validator.
struct Description {
string moniker;
string identity;
string website;
string securityContact;
string details;
}
struct Description {
string moniker;
string identity;
string website;
string securityContact;
string details;
}

/// @dev Defines the initial commission rates to be used for creating
/// a validator.
struct CommissionRates {
uint256 rate;
uint256 maxRate;
uint256 maxChangeRate;
}
struct CommissionRates {
uint256 rate;
uint256 maxRate;
uint256 maxChangeRate;
}

/// @dev Defines commission parameters for a given validator.
struct Commission {
CommissionRates commissionRates;
uint256 updateTime;
}
struct Commission {
CommissionRates commissionRates;
uint256 updateTime;
}

/// @dev Represents a validator in the staking module.
struct Validator {
string operatorAddress;
string consensusPubkey;
bool jailed;
BondStatus status;
uint256 tokens;
uint256 delegatorShares; // TODO: decimal
string description;
int64 unbondingHeight;
int64 unbondingTime;
uint256 commission;
uint256 minSelfDelegation;
}
struct Validator {
string operatorAddress;
string consensusPubkey;
bool jailed;
BondStatus status;
uint256 tokens;
uint256 delegatorShares; // TODO: decimal
string description;
int64 unbondingHeight;
int64 unbondingTime;
uint256 commission;
uint256 minSelfDelegation;
}

/// @dev Represents the output of a Redelegations query.
struct RedelegationResponse {
Redelegation redelegation;
RedelegationEntryResponse[] entries;
}
struct RedelegationResponse {
Redelegation redelegation;
RedelegationEntryResponse[] entries;
}

/// @dev Represents a redelegation between a delegator and a validator.
struct Redelegation {
string delegatorAddress;
string validatorSrcAddress;
string validatorDstAddress;
RedelegationEntry[] entries;
}
struct Redelegation {
string delegatorAddress;
string validatorSrcAddress;
string validatorDstAddress;
RedelegationEntry[] entries;
}

/// @dev Represents a RedelegationEntryResponse for the Redelegations query.
struct RedelegationEntryResponse {
RedelegationEntry redelegationEntry;
uint256 balance;
}
struct RedelegationEntryResponse {
RedelegationEntry redelegationEntry;
uint256 balance;
}

/// @dev Represents a single Redelegation entry.
struct RedelegationEntry {
int64 creationHeight;
int64 completionTime;
uint256 initialBalance;
uint256 sharesDst; // TODO: decimal
}
struct RedelegationEntry {
int64 creationHeight;
int64 completionTime;
uint256 initialBalance;
uint256 sharesDst; // TODO: decimal
}

/// @dev Represents the output of the Redelegation query.
struct RedelegationOutput {
string delegatorAddress;
string validatorSrcAddress;
string validatorDstAddress;
RedelegationEntry[] entries;
}
struct RedelegationOutput {
string delegatorAddress;
string validatorSrcAddress;
string validatorDstAddress;
RedelegationEntry[] entries;
}

/// @dev Represents a single entry of an unbonding delegation.
struct UnbondingDelegationEntry {
int64 creationHeight;
int64 completionTime;
uint256 initialBalance;
uint256 balance;
uint64 unbondingId;
int64 unbondingOnHoldRefCount;
}
struct UnbondingDelegationEntry {
int64 creationHeight;
int64 completionTime;
uint256 initialBalance;
uint256 balance;
uint64 unbondingId;
int64 unbondingOnHoldRefCount;
}

/// @dev Represents the output of the UnbondingDelegation query.
struct UnbondingDelegationOutput {
string delegatorAddress;
string validatorAddress;
UnbondingDelegationEntry[] entries;
}
struct UnbondingDelegationOutput {
string delegatorAddress;
string validatorAddress;
UnbondingDelegationEntry[] entries;
}

/// @dev The status of the validator.
enum BondStatus {
Unspecified,
Unbonded,
Unbonding,
Bonded
}
enum BondStatus {
Unspecified,
Unbonded,
Unbonding,
Bonded
}

/// @dev Staking module parameters
struct StakingParams {
uint64 unbondingTime;
uint32 maxValidators;
uint32 maxEntries;
uint32 historicalEntries;
string bondDenom;
Dec minCommissionRate;
}

/// @author Evmos Team
/// @title Staking Precompiled Contract
Expand Down Expand Up @@ -236,9 +246,9 @@ interface StakingI {
address delegatorAddress,
string memory validatorAddress
)
external
view
returns (UnbondingDelegationOutput calldata unbondingDelegation);
external
view
returns (UnbondingDelegationOutput calldata unbondingDelegation);

/// @dev Queries validator info for a given validator address.
/// @param validatorAddress The address of the validator.
Expand All @@ -254,12 +264,12 @@ interface StakingI {
string memory status,
PageRequest calldata pageRequest
)
external
view
returns (
Validator[] calldata validators,
PageResponse calldata pageResponse
);
external
view
returns (
Validator[] calldata validators,
PageResponse calldata pageResponse
);

/// @dev Queries all redelegations from a source to a destination validator for a given delegator.
/// @param delegatorAddress The address of the delegator.
Expand Down Expand Up @@ -288,12 +298,19 @@ interface StakingI {
string memory dstValidatorAddress,
PageRequest calldata pageRequest
)
external
view
returns (
RedelegationResponse[] calldata response,
PageResponse calldata pageResponse
);
external
view
returns (
RedelegationResponse[] calldata response,
PageResponse calldata pageResponse
);

/// @dev Queries the staking module parameters.
/// @return params The staking module parameters
function getParams()
external
view
returns (StakingParams memory params);

/// @dev CreateValidator defines an Event emitted when a create a new validator.
/// @param validatorAddress The address of the validator
Expand Down
Loading
Loading