mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 04:47:27 +00:00 
			
		
		
		
	feat: distribution precompile
This commit is contained in:
		
							parent
							
								
									351c2cb132
								
							
						
					
					
						commit
						f2bd26e111
					
				
							
								
								
									
										523
									
								
								precompiles/distribution/IDistribution.abi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										523
									
								
								precompiles/distribution/IDistribution.abi
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,523 @@
 | 
				
			|||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [],
 | 
				
			||||||
 | 
					    "name": "CommunityPool",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "string",
 | 
				
			||||||
 | 
					            "name": "denom",
 | 
				
			||||||
 | 
					            "type": "string"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "amount",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct DecCoin[]",
 | 
				
			||||||
 | 
					        "name": "pool",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "delegatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "validatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "delegationRewards",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "string",
 | 
				
			||||||
 | 
					            "name": "denom",
 | 
				
			||||||
 | 
					            "type": "string"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "amount",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct DecCoin[]",
 | 
				
			||||||
 | 
					        "name": "rewards",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "delegatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "delegationTotalRewards",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "address",
 | 
				
			||||||
 | 
					            "name": "validatorAddress",
 | 
				
			||||||
 | 
					            "type": "address"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "components": [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "internalType": "string",
 | 
				
			||||||
 | 
					                "name": "denom",
 | 
				
			||||||
 | 
					                "type": "string"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "internalType": "uint256",
 | 
				
			||||||
 | 
					                "name": "amount",
 | 
				
			||||||
 | 
					                "type": "uint256"
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "internalType": "struct DecCoin[]",
 | 
				
			||||||
 | 
					            "name": "reward",
 | 
				
			||||||
 | 
					            "type": "tuple[]"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct DelegationDelegatorReward[]",
 | 
				
			||||||
 | 
					        "name": "rewards",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "string",
 | 
				
			||||||
 | 
					            "name": "denom",
 | 
				
			||||||
 | 
					            "type": "string"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "amount",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct DecCoin[]",
 | 
				
			||||||
 | 
					        "name": "total",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "delegatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "delegatorValidators",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address[]",
 | 
				
			||||||
 | 
					        "name": "validators",
 | 
				
			||||||
 | 
					        "type": "address[]"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "delegatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "delegatorWithdrawAddress",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "withdrawAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "depositor",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "uint256",
 | 
				
			||||||
 | 
					        "name": "amount",
 | 
				
			||||||
 | 
					        "type": "uint256"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "fundCommunityPool",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "bool",
 | 
				
			||||||
 | 
					        "name": "success",
 | 
				
			||||||
 | 
					        "type": "bool"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "nonpayable",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [],
 | 
				
			||||||
 | 
					    "name": "params",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "communityTax",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "baseProposerReward",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "bonusProposerReward",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "bool",
 | 
				
			||||||
 | 
					            "name": "withdrawAddrEnabled",
 | 
				
			||||||
 | 
					            "type": "bool"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct Params",
 | 
				
			||||||
 | 
					        "name": "",
 | 
				
			||||||
 | 
					        "type": "tuple"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "delegatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "withdrawerAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "setWithdrawAddress",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "bool",
 | 
				
			||||||
 | 
					        "name": "success",
 | 
				
			||||||
 | 
					        "type": "bool"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "nonpayable",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "string",
 | 
				
			||||||
 | 
					        "name": "validatorAddress",
 | 
				
			||||||
 | 
					        "type": "string"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "validatorCommission",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "string",
 | 
				
			||||||
 | 
					            "name": "denom",
 | 
				
			||||||
 | 
					            "type": "string"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "amount",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct DecCoin[]",
 | 
				
			||||||
 | 
					        "name": "commission",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "validatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "validatorDistributionInfo",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "address",
 | 
				
			||||||
 | 
					            "name": "operatorAddress",
 | 
				
			||||||
 | 
					            "type": "address"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "components": [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "internalType": "string",
 | 
				
			||||||
 | 
					                "name": "denom",
 | 
				
			||||||
 | 
					                "type": "string"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "internalType": "uint256",
 | 
				
			||||||
 | 
					                "name": "amount",
 | 
				
			||||||
 | 
					                "type": "uint256"
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "internalType": "struct DecCoin[]",
 | 
				
			||||||
 | 
					            "name": "selfBondRewards",
 | 
				
			||||||
 | 
					            "type": "tuple[]"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "components": [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "internalType": "string",
 | 
				
			||||||
 | 
					                "name": "denom",
 | 
				
			||||||
 | 
					                "type": "string"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "internalType": "uint256",
 | 
				
			||||||
 | 
					                "name": "amount",
 | 
				
			||||||
 | 
					                "type": "uint256"
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "internalType": "struct DecCoin[]",
 | 
				
			||||||
 | 
					            "name": "commission",
 | 
				
			||||||
 | 
					            "type": "tuple[]"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct ValidatorDistributionInfoResponse",
 | 
				
			||||||
 | 
					        "name": "distributionInfo",
 | 
				
			||||||
 | 
					        "type": "tuple"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "validatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "validatorOutstandingRewards",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "string",
 | 
				
			||||||
 | 
					            "name": "denom",
 | 
				
			||||||
 | 
					            "type": "string"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "amount",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct DecCoin[]",
 | 
				
			||||||
 | 
					        "name": "rewards",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "validatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "uint64",
 | 
				
			||||||
 | 
					        "name": "startingHeight",
 | 
				
			||||||
 | 
					        "type": "uint64"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "uint64",
 | 
				
			||||||
 | 
					        "name": "endingHeight",
 | 
				
			||||||
 | 
					        "type": "uint64"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "bytes",
 | 
				
			||||||
 | 
					            "name": "key",
 | 
				
			||||||
 | 
					            "type": "bytes"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint64",
 | 
				
			||||||
 | 
					            "name": "offset",
 | 
				
			||||||
 | 
					            "type": "uint64"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint64",
 | 
				
			||||||
 | 
					            "name": "limit",
 | 
				
			||||||
 | 
					            "type": "uint64"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "bool",
 | 
				
			||||||
 | 
					            "name": "countTotal",
 | 
				
			||||||
 | 
					            "type": "bool"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "bool",
 | 
				
			||||||
 | 
					            "name": "reverse",
 | 
				
			||||||
 | 
					            "type": "bool"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct PageRequest",
 | 
				
			||||||
 | 
					        "name": "pageRequest",
 | 
				
			||||||
 | 
					        "type": "tuple"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "validatorSlashes",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint64",
 | 
				
			||||||
 | 
					            "name": "validatorPeriod",
 | 
				
			||||||
 | 
					            "type": "uint64"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "fraction",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct ValidatorSlashEvent[]",
 | 
				
			||||||
 | 
					        "name": "slashes",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "bytes",
 | 
				
			||||||
 | 
					            "name": "nextKey",
 | 
				
			||||||
 | 
					            "type": "bytes"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint64",
 | 
				
			||||||
 | 
					            "name": "total",
 | 
				
			||||||
 | 
					            "type": "uint64"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct PageResponse",
 | 
				
			||||||
 | 
					        "name": "pageResponse",
 | 
				
			||||||
 | 
					        "type": "tuple"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "view",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "delegatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "string",
 | 
				
			||||||
 | 
					        "name": "validatorAddress",
 | 
				
			||||||
 | 
					        "type": "string"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "withdrawDelegatorRewards",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "string",
 | 
				
			||||||
 | 
					            "name": "denom",
 | 
				
			||||||
 | 
					            "type": "string"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "amount",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct Coin[]",
 | 
				
			||||||
 | 
					        "name": "amount",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "nonpayable",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "inputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "internalType": "address",
 | 
				
			||||||
 | 
					        "name": "validatorAddress",
 | 
				
			||||||
 | 
					        "type": "address"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "name": "withdrawValidatorCommission",
 | 
				
			||||||
 | 
					    "outputs": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "components": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "string",
 | 
				
			||||||
 | 
					            "name": "denom",
 | 
				
			||||||
 | 
					            "type": "string"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "internalType": "uint256",
 | 
				
			||||||
 | 
					            "name": "amount",
 | 
				
			||||||
 | 
					            "type": "uint256"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "internalType": "struct Coin[]",
 | 
				
			||||||
 | 
					        "name": "amount",
 | 
				
			||||||
 | 
					        "type": "tuple[]"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "stateMutability": "nonpayable",
 | 
				
			||||||
 | 
					    "type": "function"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										602
									
								
								precompiles/distribution/contract.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										602
									
								
								precompiles/distribution/contract.go
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										135
									
								
								precompiles/distribution/distribution.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								precompiles/distribution/distribution.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,135 @@
 | 
				
			|||||||
 | 
					package distribution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						precompiles_common "github.com/0glabs/0g-chain/precompiles/common"
 | 
				
			||||||
 | 
						storetypes "github.com/cosmos/cosmos-sdk/store/types"
 | 
				
			||||||
 | 
						distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
 | 
				
			||||||
 | 
						"github.com/ethereum/go-ethereum/accounts/abi"
 | 
				
			||||||
 | 
						"github.com/ethereum/go-ethereum/common"
 | 
				
			||||||
 | 
						"github.com/ethereum/go-ethereum/core/vm"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						PrecompileAddress = "0x0000000000000000000000000000000000001003"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// tx
 | 
				
			||||||
 | 
						DistributionFunctionSetWithdrawAddress          = "setWithdrawAddress"
 | 
				
			||||||
 | 
						DistributionFunctionWithdrawDelegatorRewards    = "withdrawDelegatorRewards"
 | 
				
			||||||
 | 
						DistributionFunctionWithdrawValidatorCommission = "withdrawValidatorCommission"
 | 
				
			||||||
 | 
						DistributionFunctionFundCommunityPool           = "fundCommunityPool"
 | 
				
			||||||
 | 
						// query
 | 
				
			||||||
 | 
						DistributionFunctionParams                      = "params"
 | 
				
			||||||
 | 
						DistributionFunctionValidatorDistributionInfo   = "validatorDistributionInfo"
 | 
				
			||||||
 | 
						DistributionFunctionValidatorOutstandingRewards = "validatorOutstandingRewards"
 | 
				
			||||||
 | 
						DistributionFunctionValidatorCommission         = "validatorCommission"
 | 
				
			||||||
 | 
						DistributionFunctionValidatorSlashes            = "validatorSlashes"
 | 
				
			||||||
 | 
						DistributionFunctionDelegationRewards           = "delegationRewards"
 | 
				
			||||||
 | 
						DistributionFunctionDelegationTotalRewards      = "delegationTotalRewards"
 | 
				
			||||||
 | 
						DistributionFunctionDelegatorValidators         = "delegatorValidators"
 | 
				
			||||||
 | 
						DistributionFunctionDelegatorWithdrawAddress    = "delegatorWithdrawAddress"
 | 
				
			||||||
 | 
						DistributionFunctionCommunityPool               = "CommunityPool"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var _ vm.PrecompiledContract = &DistributionPrecompile{}
 | 
				
			||||||
 | 
					var _ precompiles_common.PrecompileCommon = &DistributionPrecompile{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DistributionPrecompile struct {
 | 
				
			||||||
 | 
						abi                abi.ABI
 | 
				
			||||||
 | 
						distributionKeeper distributionkeeper.Keeper
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewDistributionPrecompile(distributionKeeper distributionkeeper.Keeper) (*DistributionPrecompile, error) {
 | 
				
			||||||
 | 
						abi, err := abi.JSON(strings.NewReader(DistributionABI))
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &DistributionPrecompile{
 | 
				
			||||||
 | 
							abi:                abi,
 | 
				
			||||||
 | 
							distributionKeeper: distributionKeeper,
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Address implements vm.PrecompiledContract.
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) Address() common.Address {
 | 
				
			||||||
 | 
						return common.HexToAddress(PrecompileAddress)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RequiredGas implements vm.PrecompiledContract.
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) RequiredGas(input []byte) uint64 {
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) Abi() *abi.ABI {
 | 
				
			||||||
 | 
						return &d.abi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) IsTx(method string) bool {
 | 
				
			||||||
 | 
						switch method {
 | 
				
			||||||
 | 
						case DistributionFunctionSetWithdrawAddress,
 | 
				
			||||||
 | 
							DistributionFunctionWithdrawDelegatorRewards,
 | 
				
			||||||
 | 
							DistributionFunctionWithdrawValidatorCommission,
 | 
				
			||||||
 | 
							DistributionFunctionFundCommunityPool:
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) KVGasConfig() storetypes.GasConfig {
 | 
				
			||||||
 | 
						return storetypes.KVGasConfig()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Run implements vm.PrecompiledContract.
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) {
 | 
				
			||||||
 | 
						ctx, stateDB, method, initialGas, args, err := precompiles_common.InitializePrecompileCall(d, evm, contract, readonly)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var bz []byte
 | 
				
			||||||
 | 
						switch method.Name {
 | 
				
			||||||
 | 
						// queries
 | 
				
			||||||
 | 
						case DistributionFunctionParams:
 | 
				
			||||||
 | 
							bz, err = d.Params(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionValidatorDistributionInfo:
 | 
				
			||||||
 | 
							bz, err = d.ValidatorDistributionInfo(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionValidatorOutstandingRewards:
 | 
				
			||||||
 | 
							bz, err = d.ValidatorOutstankingRewards(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionValidatorCommission:
 | 
				
			||||||
 | 
							bz, err = d.ValidatorCommission(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionValidatorSlashes:
 | 
				
			||||||
 | 
							bz, err = d.ValidatorSlashes(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionDelegationRewards:
 | 
				
			||||||
 | 
							bz, err = d.DelegationRewards(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionDelegationTotalRewards:
 | 
				
			||||||
 | 
							bz, err = d.DelegationTotalRewards(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionDelegatorValidators:
 | 
				
			||||||
 | 
							bz, err = d.DelegatorValidators(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionDelegatorWithdrawAddress:
 | 
				
			||||||
 | 
							bz, err = d.DelegatorWithdrawAddress(ctx, evm, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionCommunityPool:
 | 
				
			||||||
 | 
							bz, err = d.CommunityPool(ctx, evm, method, args)
 | 
				
			||||||
 | 
						// txs
 | 
				
			||||||
 | 
						case DistributionFunctionSetWithdrawAddress:
 | 
				
			||||||
 | 
							bz, err = d.CreateValidator(ctx, evm, stateDB, contract, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionWithdrawDelegatorRewards:
 | 
				
			||||||
 | 
							bz, err = d.EditValidator(ctx, evm, stateDB, contract, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionWithdrawValidatorCommission:
 | 
				
			||||||
 | 
							bz, err = d.Delegate(ctx, evm, stateDB, contract, method, args)
 | 
				
			||||||
 | 
						case DistributionFunctionFundCommunityPool:
 | 
				
			||||||
 | 
							bz, err = d.BeginRedelegate(ctx, evm, stateDB, contract, method, args)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cost := ctx.GasMeter().GasConsumed() - initialGas
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !contract.UseGas(cost) {
 | 
				
			||||||
 | 
							return nil, vm.ErrOutOfGas
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return bz, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										172
									
								
								precompiles/distribution/query.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								precompiles/distribution/query.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,172 @@
 | 
				
			|||||||
 | 
					package distribution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
						distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
 | 
				
			||||||
 | 
						"github.com/ethereum/go-ethereum/accounts/abi"
 | 
				
			||||||
 | 
						"github.com/ethereum/go-ethereum/core/vm"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) Params(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryParamsRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.Params(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(convertParams(response.Params))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) ValidatorDistributionInfo(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryValidatorDistributionInfoRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.ValidatorDistributionInfo(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res, err := convertValidatorDistributionInfoResponse(response)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(res)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) ValidatorOutstankingRewards(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryValidatorOutstankingRewardsRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.ValidatorOutstandingRewards(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(convertValidatorOutstandingRewardsResponse(response))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) ValidatorCommission(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryValidatorCommissionRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.ValidatorCommission(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(convertValidatorCommissionResponse(response))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) ValidatorSlashes(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryValidatorSlashesRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.ValidatorSlashes(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						slashes := make([]ValidatorSlashEvent, len(response.Slashes))
 | 
				
			||||||
 | 
						for i, slash := range response.Slashes {
 | 
				
			||||||
 | 
							slashes[i] = convertValidatorSlashEvent(slash)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						paginationResult := convertPageResponse(response.Pagination)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(slashes, paginationResult)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) DelegationRewards(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryDelegationRewardsRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.DelegationRewards(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(convertDelegationRewardsResponse(response))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) DelegationTotalRewards(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryDelegationTotalRewardsRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.DelegationTotalRewards(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rewards, total, err := convertDelegationTotalRewardsResponse(response)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(rewards, total)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) DelegatorValidators(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryDelegatorValidatorsRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.DelegatorValidators(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						validators, err := convertDelegatorValidatorsResponse(response)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(validators)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) DelegatorWithdrawAddress(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryDelegatorWithdrawAddressRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.DelegatorWithdrawAddress(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						withdrawAddress, err := convertWithdrawAddress(response.WithdrawAddress)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(withdrawAddress)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DistributionPrecompile) CommunityPool(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						req, err := NewQueryCommunityPoolRequest(args)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := distributionkeeper.Querier{Keeper: d.distributionKeeper}.CommunityPool(ctx, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return method.Outputs.Pack(convertCommunityPoolResponse(response))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										305
									
								
								precompiles/distribution/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										305
									
								
								precompiles/distribution/types.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,305 @@
 | 
				
			|||||||
 | 
					package distribution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"math/big"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						precompiles_common "github.com/0glabs/0g-chain/precompiles/common"
 | 
				
			||||||
 | 
						github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
						"github.com/cosmos/cosmos-sdk/types/query"
 | 
				
			||||||
 | 
						distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
 | 
				
			||||||
 | 
						"github.com/ethereum/go-ethereum/common"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Coin is an auto generated low-level Go binding around an user-defined struct.
 | 
				
			||||||
 | 
					type Coin = struct {
 | 
				
			||||||
 | 
						Denom  string   `json:"denom"`
 | 
				
			||||||
 | 
						Amount *big.Int `json:"amount"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DecCoin is an auto generated low-level Go binding around an user-defined struct.
 | 
				
			||||||
 | 
					type DecCoin = struct {
 | 
				
			||||||
 | 
						Denom  string   `json:"denom"`
 | 
				
			||||||
 | 
						Amount *big.Int `json:"amount"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DelegationDelegatorReward is an auto generated low-level Go binding around an user-defined struct.
 | 
				
			||||||
 | 
					type DelegationDelegatorReward = struct {
 | 
				
			||||||
 | 
						ValidatorAddress common.Address `json:"validatorAddress"`
 | 
				
			||||||
 | 
						Reward           []DecCoin      `json:"reward"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PageRequest is an auto generated low-level Go binding around an user-defined struct.
 | 
				
			||||||
 | 
					type PageRequest = struct {
 | 
				
			||||||
 | 
						Key        []byte `json:"key"`
 | 
				
			||||||
 | 
						Offset     uint64 `json:"offset"`
 | 
				
			||||||
 | 
						Limit      uint64 `json:"limit"`
 | 
				
			||||||
 | 
						CountTotal bool   `json:"countTotal"`
 | 
				
			||||||
 | 
						Reverse    bool   `json:"reverse"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PageResponse is an auto generated low-level Go binding around an user-defined struct.
 | 
				
			||||||
 | 
					type PageResponse = struct {
 | 
				
			||||||
 | 
						NextKey []byte `json:"nextKey"`
 | 
				
			||||||
 | 
						Total   uint64 `json:"total"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Params is an auto generated low-level Go binding around an user-defined struct.
 | 
				
			||||||
 | 
					type Params = struct {
 | 
				
			||||||
 | 
						CommunityTax        *big.Int `json:"communityTax"`
 | 
				
			||||||
 | 
						BaseProposerReward  *big.Int `json:"baseProposerReward"`
 | 
				
			||||||
 | 
						BonusProposerReward *big.Int `json:"bonusProposerReward"`
 | 
				
			||||||
 | 
						WithdrawAddrEnabled bool     `json:"withdrawAddrEnabled"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidatorDistributionInfoResponse is an auto generated low-level Go binding around an user-defined struct.
 | 
				
			||||||
 | 
					type ValidatorDistributionInfoResponse = struct {
 | 
				
			||||||
 | 
						OperatorAddress common.Address `json:"operatorAddress"`
 | 
				
			||||||
 | 
						SelfBondRewards []DecCoin      `json:"selfBondRewards"`
 | 
				
			||||||
 | 
						Commission      []DecCoin      `json:"commission"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidatorSlashEvent is an auto generated low-level Go binding around an user-defined struct.
 | 
				
			||||||
 | 
					type ValidatorSlashEvent = struct {
 | 
				
			||||||
 | 
						ValidatorPeriod uint64   `json:"validatorPeriod"`
 | 
				
			||||||
 | 
						Fraction        *big.Int `json:"fraction"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryParamsRequest(args []interface{}) (*distributiontypes.QueryParamsRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 0 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 0, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryParamsRequest{}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertParams(params distributiontypes.Params) Params {
 | 
				
			||||||
 | 
						return Params{
 | 
				
			||||||
 | 
							CommunityTax:        params.CommunityTax.BigInt(),
 | 
				
			||||||
 | 
							BaseProposerReward:  params.BaseProposerReward.BigInt(),
 | 
				
			||||||
 | 
							BonusProposerReward: params.BonusProposerReward.BigInt(),
 | 
				
			||||||
 | 
							WithdrawAddrEnabled: params.WithdrawAddrEnabled,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryValidatorDistributionInfoRequest(args []interface{}) (*distributiontypes.QueryValidatorDistributionInfoRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 1 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 1, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						validator := args[0].(common.Address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryValidatorDistributionInfoRequest{
 | 
				
			||||||
 | 
							ValidatorAddress: sdk.ValAddress(validator.Bytes()).String(),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertDecCoins(coins github_com_cosmos_cosmos_sdk_types.DecCoins) []DecCoin {
 | 
				
			||||||
 | 
						ans := make([]DecCoin, len(coins))
 | 
				
			||||||
 | 
						for i, coin := range coins {
 | 
				
			||||||
 | 
							ans[i] = DecCoin{
 | 
				
			||||||
 | 
								Denom:  coin.Denom,
 | 
				
			||||||
 | 
								Amount: coin.Amount.TruncateInt().BigInt(),
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ans
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertValidatorDistributionInfoResponse(response *distributiontypes.QueryValidatorDistributionInfoResponse) (ValidatorDistributionInfoResponse, error) {
 | 
				
			||||||
 | 
						operatorAddress, err := sdk.ValAddressFromBech32(response.OperatorAddress)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return ValidatorDistributionInfoResponse{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ValidatorDistributionInfoResponse{
 | 
				
			||||||
 | 
							OperatorAddress: common.BytesToAddress(operatorAddress.Bytes()),
 | 
				
			||||||
 | 
							SelfBondRewards: convertDecCoins(response.SelfBondRewards),
 | 
				
			||||||
 | 
							Commission:      convertDecCoins(response.Commission),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryValidatorOutstankingRewardsRequest(args []interface{}) (*distributiontypes.QueryValidatorOutstandingRewardsRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 1 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 1, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						validator := args[0].(common.Address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryValidatorOutstandingRewardsRequest{
 | 
				
			||||||
 | 
							ValidatorAddress: sdk.ValAddress(validator.Bytes()).String(),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertValidatorOutstandingRewardsResponse(response *distributiontypes.QueryValidatorOutstandingRewardsResponse) []DecCoin {
 | 
				
			||||||
 | 
						return convertDecCoins(response.Rewards.Rewards)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryValidatorCommissionRequest(args []interface{}) (*distributiontypes.QueryValidatorCommissionRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 1 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 1, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						validator := args[0].(common.Address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryValidatorCommissionRequest{
 | 
				
			||||||
 | 
							ValidatorAddress: sdk.ValAddress(validator.Bytes()).String(),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertValidatorCommissionResponse(response *distributiontypes.QueryValidatorCommissionResponse) []DecCoin {
 | 
				
			||||||
 | 
						return convertDecCoins(response.Commission.Commission)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertQueryPageRequest(pagination PageRequest) *query.PageRequest {
 | 
				
			||||||
 | 
						return &query.PageRequest{
 | 
				
			||||||
 | 
							Key:        pagination.Key,
 | 
				
			||||||
 | 
							Offset:     pagination.Offset,
 | 
				
			||||||
 | 
							Limit:      pagination.Limit,
 | 
				
			||||||
 | 
							CountTotal: pagination.CountTotal,
 | 
				
			||||||
 | 
							Reverse:    pagination.Reverse,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryValidatorSlashesRequest(args []interface{}) (*distributiontypes.QueryValidatorSlashesRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 4 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 4, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						validator := args[0].(common.Address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryValidatorSlashesRequest{
 | 
				
			||||||
 | 
							ValidatorAddress: sdk.ValAddress(validator.Bytes()).String(),
 | 
				
			||||||
 | 
							StartingHeight:   args[1].(uint64),
 | 
				
			||||||
 | 
							EndingHeight:     args[2].(uint64),
 | 
				
			||||||
 | 
							Pagination:       convertQueryPageRequest(args[3].(PageRequest)),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertValidatorSlashEvent(slash distributiontypes.ValidatorSlashEvent) ValidatorSlashEvent {
 | 
				
			||||||
 | 
						return ValidatorSlashEvent{
 | 
				
			||||||
 | 
							ValidatorPeriod: slash.ValidatorPeriod,
 | 
				
			||||||
 | 
							Fraction:        slash.Fraction.BigInt(),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertPageResponse(pagination *query.PageResponse) PageResponse {
 | 
				
			||||||
 | 
						if pagination == nil {
 | 
				
			||||||
 | 
							return PageResponse{
 | 
				
			||||||
 | 
								NextKey: make([]byte, 0),
 | 
				
			||||||
 | 
								Total:   1,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return PageResponse{
 | 
				
			||||||
 | 
							NextKey: pagination.NextKey,
 | 
				
			||||||
 | 
							Total:   pagination.Total,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryDelegationRewardsRequest(args []interface{}) (*distributiontypes.QueryDelegationRewardsRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 2 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 2, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						delegator := args[0].(common.Address)
 | 
				
			||||||
 | 
						validator := args[1].(common.Address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryDelegationRewardsRequest{
 | 
				
			||||||
 | 
							DelegatorAddress: sdk.AccAddress(delegator.Bytes()).String(),
 | 
				
			||||||
 | 
							ValidatorAddress: sdk.ValAddress(validator.Bytes()).String(),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertDelegationRewardsResponse(response *distributiontypes.QueryDelegationRewardsResponse) []DecCoin {
 | 
				
			||||||
 | 
						return convertDecCoins(response.Rewards)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryDelegationTotalRewardsRequest(args []interface{}) (*distributiontypes.QueryDelegationTotalRewardsRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 1 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 1, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						delegator := args[0].(common.Address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryDelegationTotalRewardsRequest{
 | 
				
			||||||
 | 
							DelegatorAddress: sdk.AccAddress(delegator.Bytes()).String(),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertDelegationDelegatorReward(reward distributiontypes.DelegationDelegatorReward) (DelegationDelegatorReward, error) {
 | 
				
			||||||
 | 
						validatorAddress, err := sdk.ValAddressFromBech32(reward.ValidatorAddress)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return DelegationDelegatorReward{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return DelegationDelegatorReward{
 | 
				
			||||||
 | 
							ValidatorAddress: common.BytesToAddress(validatorAddress.Bytes()),
 | 
				
			||||||
 | 
							Reward:           convertDecCoins(reward.Reward),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertDelegationTotalRewardsResponse(response *distributiontypes.QueryDelegationTotalRewardsResponse) ([]DelegationDelegatorReward, []DecCoin, error) {
 | 
				
			||||||
 | 
						rewards := make([]DelegationDelegatorReward, len(response.Rewards))
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						for i, reward := range response.Rewards {
 | 
				
			||||||
 | 
							rewards[i], err = convertDelegationDelegatorReward(reward)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return rewards, convertDecCoins(response.Total), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryDelegatorValidatorsRequest(args []interface{}) (*distributiontypes.QueryDelegatorValidatorsRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 1 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 1, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						delegator := args[0].(common.Address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryDelegatorValidatorsRequest{
 | 
				
			||||||
 | 
							DelegatorAddress: sdk.AccAddress(delegator.Bytes()).String(),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertDelegatorValidatorsResponse(response *distributiontypes.QueryDelegatorValidatorsResponse) ([]common.Address, error) {
 | 
				
			||||||
 | 
						validators := make([]common.Address, len(response.Validators))
 | 
				
			||||||
 | 
						for i, addr := range response.Validators {
 | 
				
			||||||
 | 
							validatorAddress, err := sdk.ValAddressFromBech32(addr)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							validators[i] = common.BytesToAddress(validatorAddress.Bytes())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return validators, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryDelegatorWithdrawAddressRequest(args []interface{}) (*distributiontypes.QueryDelegatorWithdrawAddressRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 1 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 1, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						delegator := args[0].(common.Address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryDelegatorWithdrawAddressRequest{
 | 
				
			||||||
 | 
							DelegatorAddress: sdk.AccAddress(delegator.Bytes()).String(),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertWithdrawAddress(addr string) (common.Address, error) {
 | 
				
			||||||
 | 
						withdrawAddress, err := sdk.AccAddressFromBech32(addr)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return common.Address{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return common.Address(withdrawAddress.Bytes()), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewQueryCommunityPoolRequest(args []interface{}) (*distributiontypes.QueryCommunityPoolRequest, error) {
 | 
				
			||||||
 | 
						if len(args) != 0 {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf(precompiles_common.ErrInvalidNumberOfArgs, 0, len(args))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &distributiontypes.QueryCommunityPoolRequest{}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertCommunityPoolResponse(response *distributiontypes.QueryCommunityPoolResponse) []DecCoin {
 | 
				
			||||||
 | 
						return convertDecCoins(response.Pool)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										165
									
								
								precompiles/interfaces/contracts/IDistribution.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								precompiles/interfaces/contracts/IDistribution.sol
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,165 @@
 | 
				
			|||||||
 | 
					// SPDX-License-Identifier: LGPL-3.0-only
 | 
				
			||||||
 | 
					pragma solidity >=0.8.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "./types.sol";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Params {
 | 
				
			||||||
 | 
					    uint communityTax;
 | 
				
			||||||
 | 
					    uint baseProposerReward;
 | 
				
			||||||
 | 
					    uint bonusProposerReward;
 | 
				
			||||||
 | 
					    bool withdrawAddrEnabled;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct ValidatorDistributionInfoResponse {
 | 
				
			||||||
 | 
					    address operatorAddress;
 | 
				
			||||||
 | 
					    DecCoin[] selfBondRewards;
 | 
				
			||||||
 | 
					    DecCoin[] commission;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct ValidatorSlashEvent {
 | 
				
			||||||
 | 
					    uint64 validatorPeriod;
 | 
				
			||||||
 | 
					    uint fraction; // 18 decimals
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct DelegationDelegatorReward {
 | 
				
			||||||
 | 
					    address validatorAddress;
 | 
				
			||||||
 | 
					    DecCoin[] reward;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IDistribution {
 | 
				
			||||||
 | 
					    /*=== events ===*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*=== cosmos tx ===*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev SetWithdrawAddress defines a method to change the withdraw address for a delegator (or validator self-delegation).
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc SetWithdrawAddress(MsgSetWithdrawAddress) returns (MsgSetWithdrawAddressResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function setWithdrawAddress(
 | 
				
			||||||
 | 
					        address delegatorAddress,
 | 
				
			||||||
 | 
					        address withdrawerAddress
 | 
				
			||||||
 | 
					    ) external returns (bool success);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev WithdrawDelegatorReward defines a method to withdraw rewards of delegator from a single validator.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc WithdrawDelegatorReward(MsgWithdrawDelegatorReward) returns (MsgWithdrawDelegatorRewardResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function withdrawDelegatorRewards(
 | 
				
			||||||
 | 
					        address delegatorAddress,
 | 
				
			||||||
 | 
					        string memory validatorAddress
 | 
				
			||||||
 | 
					    ) external returns (Coin[] calldata amount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev WithdrawValidatorCommission defines a method to withdraw the full commission to the validator address.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc WithdrawValidatorCommission(MsgWithdrawValidatorCommission) returns (MsgWithdrawValidatorCommissionResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function withdrawValidatorCommission(
 | 
				
			||||||
 | 
					        address validatorAddress
 | 
				
			||||||
 | 
					    ) external returns (Coin[] calldata amount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev FundCommunityPool defines a method to allow an account to directly fund the community pool.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc FundCommunityPool(MsgFundCommunityPool) returns (MsgFundCommunityPoolResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function fundCommunityPool(
 | 
				
			||||||
 | 
					        address depositor,
 | 
				
			||||||
 | 
					        uint256 amount
 | 
				
			||||||
 | 
					    ) external returns (bool success);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*=== cosmos query ===*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev Params queries params of the distribution module.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc Params(QueryParamsRequest) returns (QueryParamsResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function params() external view returns (Params memory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc ValidatorDistributionInfo(QueryValidatorDistributionInfoRequest) returns (QueryValidatorDistributionInfoResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function validatorDistributionInfo(
 | 
				
			||||||
 | 
					        address validatorAddress
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					        external
 | 
				
			||||||
 | 
					        view
 | 
				
			||||||
 | 
					        returns (ValidatorDistributionInfoResponse memory distributionInfo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev ValidatorOutstandingRewards queries rewards of a validator address.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc ValidatorOutstandingRewards(QueryValidatorOutstandingRewardsRequest) returns (QueryValidatorOutstandingRewardsResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function validatorOutstandingRewards(
 | 
				
			||||||
 | 
					        address validatorAddress
 | 
				
			||||||
 | 
					    ) external view returns (DecCoin[] memory rewards);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev ValidatorCommission queries accumulated commission for a validator.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc ValidatorCommission(QueryValidatorCommissionRequest) returns (QueryValidatorCommissionResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function validatorCommission(
 | 
				
			||||||
 | 
					        string memory validatorAddress
 | 
				
			||||||
 | 
					    ) external view returns (DecCoin[] memory commission);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev ValidatorSlashes queries slash events of a validator.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc ValidatorSlashes(QueryValidatorSlashesRequest) returns (QueryValidatorSlashesResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function validatorSlashes(
 | 
				
			||||||
 | 
					        address validatorAddress,
 | 
				
			||||||
 | 
					        uint64 startingHeight,
 | 
				
			||||||
 | 
					        uint64 endingHeight,
 | 
				
			||||||
 | 
					        PageRequest calldata pageRequest
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					        external
 | 
				
			||||||
 | 
					        view
 | 
				
			||||||
 | 
					        returns (
 | 
				
			||||||
 | 
					            ValidatorSlashEvent[] memory slashes,
 | 
				
			||||||
 | 
					            PageResponse calldata pageResponse
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev DelegationRewards queries the total rewards accrued by a delegation.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc DelegationRewards(QueryDelegationRewardsRequest) returns (QueryDelegationRewardsResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function delegationRewards(
 | 
				
			||||||
 | 
					        address delegatorAddress,
 | 
				
			||||||
 | 
					        address validatorAddress
 | 
				
			||||||
 | 
					    ) external view returns (DecCoin[] memory rewards);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev DelegationTotalRewards queries the total rewards accrued by a each validator.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc DelegationTotalRewards(QueryDelegationTotalRewardsRequest) returns (QueryDelegationTotalRewardsResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function delegationTotalRewards(
 | 
				
			||||||
 | 
					        address delegatorAddress
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					        external
 | 
				
			||||||
 | 
					        view
 | 
				
			||||||
 | 
					        returns (
 | 
				
			||||||
 | 
					            DelegationDelegatorReward[] memory rewards,
 | 
				
			||||||
 | 
					            DecCoin[] memory total
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev DelegatorValidators queries the validators of a delegator.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc DelegatorValidators(QueryDelegatorValidatorsRequest) returns (QueryDelegatorValidatorsResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function delegatorValidators(
 | 
				
			||||||
 | 
					        address delegatorAddress
 | 
				
			||||||
 | 
					    ) external view returns (address[] memory validators);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev DelegatorWithdrawAddress queries withdraw address of a delegator.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc DelegatorWithdrawAddress(QueryDelegatorWithdrawAddressRequest) returns (QueryDelegatorWithdrawAddressResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function delegatorWithdrawAddress(
 | 
				
			||||||
 | 
					        address delegatorAddress
 | 
				
			||||||
 | 
					    ) external view returns (address withdrawAddress);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dev CommunityPool queries the community pool coins.
 | 
				
			||||||
 | 
					     * cosmos grpc: rpc CommunityPool(QueryCommunityPoolRequest) returns (QueryCommunityPoolResponse);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function CommunityPool() external view returns (DecCoin[] memory pool);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,8 @@
 | 
				
			|||||||
// SPDX-License-Identifier: LGPL-3.0-only
 | 
					// SPDX-License-Identifier: LGPL-3.0-only
 | 
				
			||||||
pragma solidity >=0.8.0;
 | 
					pragma solidity >=0.8.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "./types.sol";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @dev Description defines a validator description
 | 
					 * @dev Description defines a validator description
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -160,19 +162,6 @@ struct NullableUint {
 | 
				
			|||||||
    uint value;
 | 
					    uint value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct PageRequest {
 | 
					 | 
				
			||||||
    bytes key;
 | 
					 | 
				
			||||||
    uint64 offset;
 | 
					 | 
				
			||||||
    uint64 limit;
 | 
					 | 
				
			||||||
    bool countTotal;
 | 
					 | 
				
			||||||
    bool reverse;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct PageResponse {
 | 
					 | 
				
			||||||
    bytes nextKey;
 | 
					 | 
				
			||||||
    uint64 total;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface IStaking {
 | 
					interface IStaking {
 | 
				
			||||||
    /*=== cosmos tx ===*/
 | 
					    /*=== cosmos tx ===*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										38
									
								
								precompiles/interfaces/contracts/types.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								precompiles/interfaces/contracts/types.sol
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					// SPDX-License-Identifier: LGPL-3.0-only
 | 
				
			||||||
 | 
					pragma solidity >=0.8.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @dev cosmos.base.v1beta1.Coin
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct Coin {
 | 
				
			||||||
 | 
					    string denom;
 | 
				
			||||||
 | 
					    uint amount;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @dev cosmos.base.v1beta1.DecCoin
 | 
				
			||||||
 | 
					 * 18 decimals
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct DecCoin {
 | 
				
			||||||
 | 
					    string denom;
 | 
				
			||||||
 | 
					    uint amount;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @dev cosmos.base.query.v1beta1.PageRequest
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct PageRequest {
 | 
				
			||||||
 | 
					    bytes key;
 | 
				
			||||||
 | 
					    uint64 offset;
 | 
				
			||||||
 | 
					    uint64 limit;
 | 
				
			||||||
 | 
					    bool countTotal;
 | 
				
			||||||
 | 
					    bool reverse;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @dev cosmos.base.query.v1beta1.PageResponse
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct PageResponse {
 | 
				
			||||||
 | 
					    bytes nextKey;
 | 
				
			||||||
 | 
					    uint64 total;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user