mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-21 20:25:51 +00:00
92 lines
3.4 KiB
Python
92 lines
3.4 KiB
Python
import json
|
|
from xrpl.utils import encode_mptoken_metadata, decode_mptoken_metadata
|
|
from xrpl.clients import JsonRpcClient
|
|
from xrpl.wallet import generate_faucet_wallet
|
|
from xrpl.transaction import submit_and_wait
|
|
from xrpl.models import LedgerEntry, MPTokenIssuanceCreate, MPTokenIssuanceCreateFlag
|
|
|
|
# Set up client and get a wallet
|
|
client = JsonRpcClient("https://s.devnet.rippletest.net:51234")
|
|
print("=== Funding new wallet from faucet... ===")
|
|
issuer = generate_faucet_wallet(client, debug=True)
|
|
|
|
# Define metadata as JSON
|
|
mpt_metadata = {
|
|
"ticker": "TBILL",
|
|
"name": "T-Bill Yield Token",
|
|
"desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.",
|
|
"icon": "https://example.org/tbill-icon.png",
|
|
"asset_class": "rwa",
|
|
"asset_subclass": "treasury",
|
|
"issuer_name": "Example Yield Co.",
|
|
"uris": [
|
|
{
|
|
"uri": "https://exampleyield.co/tbill",
|
|
"category": "website",
|
|
"title": "Product Page"
|
|
},
|
|
{
|
|
"uri": "https://exampleyield.co/docs",
|
|
"category": "docs",
|
|
"title": "Yield Token Docs"
|
|
}
|
|
],
|
|
"additional_info": {
|
|
"interest_rate": "5.00%",
|
|
"interest_type": "variable",
|
|
"yield_source": "U.S. Treasury Bills",
|
|
"maturity_date": "2045-06-30",
|
|
"cusip": "912796RX0"
|
|
}
|
|
}
|
|
|
|
# Encode the metadata.
|
|
# The encode_mptoken_metadata function converts the JSON metadata object into
|
|
# a compact, hex-encoded string, following the XLS-89 standard.
|
|
# https://xls.xrpl.org/xls/XLS-0089-multi-purpose-token-metadata-schema.html
|
|
print("\n=== Encoding metadata...===")
|
|
mpt_metadata_hex = encode_mptoken_metadata(mpt_metadata)
|
|
print("Encoded mpt_metadata_hex:", mpt_metadata_hex)
|
|
|
|
# Define the transaction, including other MPT parameters
|
|
mpt_issuance_create = MPTokenIssuanceCreate(
|
|
account=issuer.address,
|
|
asset_scale=4,
|
|
maximum_amount="50000000",
|
|
transfer_fee=0,
|
|
flags=MPTokenIssuanceCreateFlag.TF_MPT_CAN_TRANSFER |
|
|
MPTokenIssuanceCreateFlag.TF_MPT_CAN_TRADE,
|
|
mptoken_metadata=mpt_metadata_hex
|
|
)
|
|
|
|
# Sign and submit the transaction
|
|
print("\n=== Sending MPTokenIssuanceCreate transaction...===")
|
|
print(json.dumps(mpt_issuance_create.to_xrpl(), indent=2))
|
|
response = submit_and_wait(mpt_issuance_create, client, issuer, autofill=True)
|
|
|
|
# Check transaction results
|
|
print("\n=== Checking MPTokenIssuanceCreate results... ===")
|
|
print(json.dumps(response.result, indent=2))
|
|
result_code = response.result["meta"]["TransactionResult"]
|
|
if result_code != "tesSUCCESS":
|
|
print(f"Transaction failed with result code {result_code}.")
|
|
exit(1)
|
|
|
|
issuance_id = response.result["meta"]["mpt_issuance_id"]
|
|
print(f"\n- MPToken created successfully with issuance ID: {issuance_id}")
|
|
print(f"- Explorer URL: https://devnet.xrpl.org/mpt/{issuance_id}")
|
|
|
|
# Look up MPT Issuance entry in the validated ledger
|
|
print("\n=== Confirming MPT Issuance metadata in the validated ledger... ===")
|
|
ledger_entry_response = client.request(LedgerEntry(
|
|
mpt_issuance=issuance_id,
|
|
ledger_index="validated"
|
|
))
|
|
|
|
# Decode the metadata.
|
|
# The decode_mptoken_metadata function takes a hex-encoded string representing MPT metadata,
|
|
# decodes it to a JSON object, and expands any compact field names to their full forms.
|
|
metadata_blob = ledger_entry_response.result["node"]["MPTokenMetadata"]
|
|
decoded_metadata = decode_mptoken_metadata(metadata_blob)
|
|
print("Decoded MPT metadata:\n", json.dumps(decoded_metadata, indent=2))
|