mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2026-04-29 15:37:48 +00:00
66 lines
2.4 KiB
Python
Executable File
66 lines
2.4 KiB
Python
Executable File
from binascii import hexlify
|
|
from re import match
|
|
|
|
from xrpl.clients import JsonRpcClient
|
|
from xrpl.models.requests import LedgerEntry, Ledger
|
|
from xrpl.utils import ripple_time_to_datetime
|
|
|
|
client = JsonRpcClient("https://xrplcluster.com")
|
|
SUBJECT_ADDRESS = "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn"
|
|
ISSUER_ADDRESS = "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX"
|
|
CREDENTIAL_TYPE = hexlify("my_credential".encode("utf-8")).decode("ascii").upper()
|
|
|
|
# Look up Credential ledger entry ----------------------------------------------
|
|
ledger_entry_request = LedgerEntry(
|
|
credential={
|
|
"subject": SUBJECT_ADDRESS,
|
|
"issuer": ISSUER_ADDRESS,
|
|
"credential_type": CREDENTIAL_TYPE,
|
|
},
|
|
ledger_index="validated",
|
|
)
|
|
print("Looking up credential...")
|
|
print(ledger_entry_request.to_dict())
|
|
try:
|
|
xrpl_response = client.request(ledger_entry_request)
|
|
except Exception as err:
|
|
print("Error: ledger_entry failed with error:", err)
|
|
exit(1)
|
|
|
|
if xrpl_response.status != "success":
|
|
if xrpl_response.result["error"] == "entryNotFound":
|
|
print("Credential was not found")
|
|
exit(1)
|
|
# Other errors, for example invalidly-specified addresses.
|
|
print("Unexpected error looking up credential:", xrpl_response.result)
|
|
|
|
credential = xrpl_response.result["node"]
|
|
print("Found credential:")
|
|
print(credential)
|
|
|
|
# Check if the credential has been accepted ------------------------------------
|
|
lsfAccepted = 0x00010000
|
|
if not credential["Flags"] & lsfAccepted:
|
|
print("Credential is not accepted.")
|
|
exit(2)
|
|
|
|
# Confirm that the credential is not expired -----------------------------------
|
|
if credential.get("Expiration"):
|
|
expiration_time = ripple_time_to_datetime(credential["Expiration"])
|
|
print("Credential has expiration:", expiration_time.isoformat())
|
|
print("Looking up validated ledger to check for expiration.")
|
|
|
|
ledger_response = client.request(Ledger(ledger_index="validated"))
|
|
if ledger_response.status != "success":
|
|
print("Error looking up most recent validated ledger:", ledger_response.result)
|
|
exit(3)
|
|
close_time = ripple_time_to_datetime(ledger_response.result["ledger"]["close_time"])
|
|
print("Most recent validated ledger was at:", close_time.isoformat())
|
|
|
|
if close_time > expiration_time:
|
|
print("Credential is expired.")
|
|
exit(4)
|
|
|
|
# Credential has passed all checks. --------------------------------------------
|
|
print("Credential is valid.")
|