Evidence module¶
The evidence module provides functionality for submitting and querying evidence of validator misbehavior on the Akash Network.
Transaction parameters
All transaction functions support optional parameters like fee_amount, gas_limit, and gas_adjustment. See Transaction parameters for details.
EvidenceClient class¶
from akash import AkashClient
client = AkashClient("https://akash-rpc.polkachu.com:443")
evidence = client.evidence
Transactions¶
submit_evidence()¶
Submit evidence of validator misbehavior.
def submit_evidence(wallet, evidence_data: Dict[str, Any], memo: str = "",
fee_amount: str = "5000", gas_limit: int = 200000, gas_adjustment: float = 1.2,
use_simulation: bool = True) -> BroadcastResult
Required parameters:
wallet(AkashWallet): Wallet to sign the transactionevidence_data(Dict[str, Any]): Evidence data including type and details
Optional parameters:
memo(str): Transaction memo (default: "")fee_amount(str): Fee amount in uakt (default: "5000")gas_limit(int): Gas limit (default: 200000)gas_adjustment(float): Multiplier for gas estimation (default: 1.2)use_simulation(bool): Enable gas simulation (default: True)
Returns: BroadcastResult - Transaction result with the following fields:
tx_hash(str): Transaction hashcode(int): Response code (0 for success)raw_log(str): Raw transaction log/error messagesuccess(bool): Whether transaction succeededevents(List[Dict]): Transaction eventstype(str): Event typeattributes(List[Dict]): Event attributeskey(str): Attribute keyvalue(str): Attribute value
Example:
from akash import AkashClient, AkashWallet
wallet = AkashWallet.from_mnemonic("your mnemonic here")
client = AkashClient("https://akash-rpc.polkachu.com:443")
evidence_data = {
"type_url": "/cosmos.evidence.v1beta1.Equivocation",
"content": b"actual_evidence_bytes_here"
}
validation = client.evidence.validate_evidence_format(evidence_data)
if not validation["valid"]:
print(f"Invalid evidence: {validation['errors']}")
exit()
result = client.evidence.submit_evidence(
wallet=wallet,
evidence_data=evidence_data,
memo=""
)
if result.success:
print(f"Evidence submitted successfully: {result.tx_hash}")
else:
print(f"Evidence submission failed: {result.raw_log}")
Queries¶
get_evidence()¶
Query specific evidence by hash.
Required parameters:
evidence_hash(str): Hash of the evidence to query
Returns: Dict[str, Any] with the following fields:
evidence(Dict): Evidence information (if found)type_url(str): Evidence type URLheight(int): Block heighttime(str): Evidence timestampvalidator(str): Validator addresstotal_voting_power(int): Total voting powervalidator_power(int): Validator power
Example:
from akash import AkashClient
client = AkashClient("https://akash-rpc.polkachu.com:443")
evidence = client.evidence.get_evidence("ABC123DEF456...")
if evidence and "evidence" in evidence:
print(f"Evidence type: {evidence['evidence']['type_url']}")
else:
print("Evidence not found")
get_all_evidence()¶
Query all evidence records.
def get_all_evidence(limit: int = 100, offset: int = 0, count_total: bool = False) -> List[Dict[str, Any]]
Optional parameters:
limit(int): Maximum number of results to return (default: 100)offset(int): Number of results to skip (default: 0)count_total(bool): Include total count in response (default: False)
Returns: List[Dict[str, Any]] - List of evidence records with the following fields:
type_url(str): Evidence type URLevidence_data(str): Evidence data in hex format
Example:
from akash import AkashClient
client = AkashClient("https://akash-rpc.polkachu.com:443")
all_evidence = client.evidence.get_all_evidence(limit=50)
page_2_evidence = client.evidence.get_all_evidence(limit=20, offset=20)
print(f"Found {len(all_evidence)} evidence records:")
for i, evidence in enumerate(all_evidence):
print(f"{i+1}. Type: {evidence['type_url']}")
print(f"Data length: {len(evidence['evidence_data'])} hex chars")
Utils¶
validate_evidence_format()¶
Validate evidence data format.
Required parameters:
evidence_data(Dict[str, Any]): Evidence data to validate
Returns: Dict[str, Any] with the following fields:
valid(bool): Whether evidence format is validerrors(List[str]): List of validation errorswarnings(List[str]): List of validation warnings
Example:
from akash import AkashClient
client = AkashClient("https://akash-rpc.polkachu.com:443")
evidence_data = {
"type_url": "/cosmos.evidence.v1beta1.Equivocation",
"content": b"evidence_content_bytes"
}
validation = client.evidence.validate_evidence_format(evidence_data)
if validation["valid"]:
print("Evidence format is valid")
if validation["warnings"]:
print("Warnings:")
for warning in validation["warnings"]:
print(f"- {warning}")
else:
print("Evidence format is invalid:")
for error in validation["errors"]:
print(f"- {error}")
invalid_evidence = {"type_url": "/cosmos.evidence.v1beta1.Equivocation"}
validation = client.evidence.validate_evidence_format(invalid_evidence)
print(f"Valid: {validation['valid']}")
print(f"Errors: {validation['errors']}")