mirror of
				https://github.com/XRPLF/xrpl-dev-portal.git
				synced 2025-11-04 11:55:50 +00:00 
			
		
		
		
	- Updates MPT Concept docs with metadata schema - Updates issue-mpt-with-metdata example code with new schema changes.
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import json
 | 
						|
from xrpl.utils import str_to_hex, hex_to_str
 | 
						|
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...")
 | 
						|
wallet = generate_faucet_wallet(client, debug=True)
 | 
						|
 | 
						|
# Define metadata as JSON
 | 
						|
mpt_metadata = {
 | 
						|
    "t": "TBILL",
 | 
						|
    "n": "T-Bill Yield Token",
 | 
						|
    "d": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.",
 | 
						|
    "i": "example.org/tbill-icon.png",
 | 
						|
    "ac": "rwa",
 | 
						|
    "as": "treasury",
 | 
						|
    "in": "Example Yield Co.",
 | 
						|
    "us": [
 | 
						|
        {
 | 
						|
            "u": "exampleyield.co/tbill",
 | 
						|
            "c": "website",
 | 
						|
            "t": "Product Page"
 | 
						|
        },
 | 
						|
        {
 | 
						|
            "u": "exampleyield.co/docs",
 | 
						|
            "c": "docs",
 | 
						|
            "t": "Yield Token Docs"
 | 
						|
        }
 | 
						|
    ],
 | 
						|
    "ai": {
 | 
						|
        "interest_rate": "5.00%",
 | 
						|
        "interest_type": "variable",
 | 
						|
        "yield_source": "U.S. Treasury Bills",
 | 
						|
        "maturity_date": "2045-06-30",
 | 
						|
        "cusip": "912796RX0"
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
# Convert JSON to a string (without excess whitespace), then string to hex
 | 
						|
mpt_metadata_string = json.dumps(mpt_metadata, separators=(',', ':'))
 | 
						|
mpt_metadata_hex = str_to_hex(mpt_metadata_string)
 | 
						|
 | 
						|
# Define the transaction, including other MPT parameters
 | 
						|
mpt_issuance_create = MPTokenIssuanceCreate(
 | 
						|
    account=wallet.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
 | 
						|
)
 | 
						|
 | 
						|
# Prepare, sign, and submit the transaction
 | 
						|
print("Sending MPTokenIssuanceCreate transaction...")
 | 
						|
response = submit_and_wait(mpt_issuance_create, client, wallet, autofill=True)
 | 
						|
print(json.dumps(response.result, indent=2))
 | 
						|
 | 
						|
# Check transaction results
 | 
						|
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"MPToken successfully created with issuance ID {issuance_id}")
 | 
						|
 | 
						|
# Look up MPT Issuance entry in the validated ledger
 | 
						|
print("Confirming MPT Issuance metadata in the validated ledger.")
 | 
						|
ledger_entry_response = client.request(LedgerEntry(
 | 
						|
    mpt_issuance=issuance_id,
 | 
						|
    ledger_index="validated"
 | 
						|
))
 | 
						|
 | 
						|
# Decode the metadata
 | 
						|
metadata_blob = ledger_entry_response.result["node"]["MPTokenMetadata"]
 | 
						|
decoded_metadata = json.loads(hex_to_str(metadata_blob))
 | 
						|
print("Decoded metadata:", decoded_metadata)
 |