Files
xrpl-dev-portal/_code-samples/issue-mpt-with-metadata/py

Issue MPT with Metadata (Python)

Creates a sample MPT issuance with metadata encoded as JSON according to the XLS-89 standard.

Quick setup and usage:

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python issue-mpt-with-metadata.py

The script should output a validated transaction and decoded metadata, similar to the following:

=== Funding new wallet from faucet... ===
Attempting to fund address rN1vQBHqgbfXjeAfYVUVpQXMyyZYjAnQkS
Faucet fund successful.

=== Encoding metadata...===
Encoded mpt_metadata_hex: 7B226163223A22727761222C226169223A7B226375736970223A22393132373936525830222C22696E7465726573745F72617465223A22352E303025222C22696E7465726573745F74797065223A227661726961626C65222C226D617475726974795F64617465223A22323034352D30362D3330222C227969656C645F736F75726365223A22552E532E2054726561737572792042696C6C73227D2C226173223A227472656173757279222C2264223A2241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C2269223A2268747470733A2F2F6578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C22696E223A224578616D706C65205969656C6420436F2E222C226E223A22542D42696C6C205969656C6420546F6B656E222C2274223A225442494C4C222C227573223A5B7B2263223A2277656273697465222C2274223A2250726F647563742050616765222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F7462696C6C227D2C7B2263223A22646F6373222C2274223A225969656C6420546F6B656E20446F6373222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F646F6373227D5D7D

=== Sending MPTokenIssuanceCreate transaction...===
{
  "Account": "rN1vQBHqgbfXjeAfYVUVpQXMyyZYjAnQkS",
  "TransactionType": "MPTokenIssuanceCreate",
  "Flags": 48,
  "SigningPubKey": "",
  "AssetScale": 4,
  "MaximumAmount": "50000000",
  "TransferFee": 0,
  "MPTokenMetadata": "7B226163223A22727761222C226169223A7B226375736970223A22393132373936525830222C22696E7465726573745F72617465223A22352E303025222C22696E7465726573745F74797065223A227661726961626C65222C226D617475726974795F64617465223A22323034352D30362D3330222C227969656C645F736F75726365223A22552E532E2054726561737572792042696C6C73227D2C226173223A227472656173757279222C2264223A2241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C2269223A2268747470733A2F2F6578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C22696E223A224578616D706C65205969656C6420436F2E222C226E223A22542D42696C6C205969656C6420546F6B656E222C2274223A225442494C4C222C227573223A5B7B2263223A2277656273697465222C2274223A2250726F647563742050616765222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F7462696C6C227D2C7B2263223A22646F6373222C2274223A225969656C6420546F6B656E20446F6373222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F646F6373227D5D7D"
}

=== Checking MPTokenIssuanceCreate results... ===
{
  "close_time_iso": "2025-11-20T18:21:12Z",
  "ctid": "C0148F2200000002",
  "hash": "47D87C3C93C80F2158CE5A688C63386E939BC77CFF4F5B62F84775A97EF991AE",
  "ledger_hash": "663C9D10B10586009F5C17B4A9A98220ECB00AF64A248A71ECF970D3E7D206F4",
  "ledger_index": 1347362,
  "meta": {
    "AffectedNodes": [
      {
        "ModifiedNode": {
          "FinalFields": {
            "Account": "rN1vQBHqgbfXjeAfYVUVpQXMyyZYjAnQkS",
            "Balance": "99999999",
            "Flags": 0,
            "OwnerCount": 1,
            "Sequence": 1347360
          },
          "LedgerEntryType": "AccountRoot",
          "LedgerIndex": "0B10E7C08910B27DE817A935972FBD91B57E6177627FDA78C9C75CD83D32D973",
          "PreviousFields": {
            "Balance": "100000000",
            "OwnerCount": 0,
            "Sequence": 1347359
          },
          "PreviousTxnID": "2166929BBF80BEAA631AB4FBE6864E03CD669D4AFEE6559BA6AB850602A9151A",
          "PreviousTxnLgrSeq": 1347359
        }
      },
      {
        "CreatedNode": {
          "LedgerEntryType": "DirectoryNode",
          "LedgerIndex": "5D2D7A2717A4ECF4C865A6F80E0C2C228409B27CE948307F3ED01213C9906AC4",
          "NewFields": {
            "Owner": "rN1vQBHqgbfXjeAfYVUVpQXMyyZYjAnQkS",
            "RootIndex": "5D2D7A2717A4ECF4C865A6F80E0C2C228409B27CE948307F3ED01213C9906AC4"
          }
        }
      },
      {
        "CreatedNode": {
          "LedgerEntryType": "MPTokenIssuance",
          "LedgerIndex": "886355A55396B5511A96BCA43E73E3DEDC2875776EC307252157142B1D36B852",
          "NewFields": {
            "AssetScale": 4,
            "Flags": 48,
            "Issuer": "rN1vQBHqgbfXjeAfYVUVpQXMyyZYjAnQkS",
            "MPTokenMetadata": "7B226163223A22727761222C226169223A7B226375736970223A22393132373936525830222C22696E7465726573745F72617465223A22352E303025222C22696E7465726573745F74797065223A227661726961626C65222C226D617475726974795F64617465223A22323034352D30362D3330222C227969656C645F736F75726365223A22552E532E2054726561737572792042696C6C73227D2C226173223A227472656173757279222C2264223A2241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C2269223A2268747470733A2F2F6578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C22696E223A224578616D706C65205969656C6420436F2E222C226E223A22542D42696C6C205969656C6420546F6B656E222C2274223A225442494C4C222C227573223A5B7B2263223A2277656273697465222C2274223A2250726F647563742050616765222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F7462696C6C227D2C7B2263223A22646F6373222C2274223A225969656C6420546F6B656E20446F6373222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F646F6373227D5D7D",
            "MaximumAmount": "50000000",
            "Sequence": 1347359
          }
        }
      }
    ],
    "TransactionIndex": 0,
    "TransactionResult": "tesSUCCESS",
    "mpt_issuance_id": "00148F1F983B024FB54CE16CBC7F788C2F71AC9728355EFC"
  },
  "tx_json": {
    "Account": "rN1vQBHqgbfXjeAfYVUVpQXMyyZYjAnQkS",
    "AssetScale": 4,
    "Fee": "1",
    "Flags": 48,
    "LastLedgerSequence": 1347380,
    "MPTokenMetadata": "7B226163223A22727761222C226169223A7B226375736970223A22393132373936525830222C22696E7465726573745F72617465223A22352E303025222C22696E7465726573745F74797065223A227661726961626C65222C226D617475726974795F64617465223A22323034352D30362D3330222C227969656C645F736F75726365223A22552E532E2054726561737572792042696C6C73227D2C226173223A227472656173757279222C2264223A2241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C2269223A2268747470733A2F2F6578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C22696E223A224578616D706C65205969656C6420436F2E222C226E223A22542D42696C6C205969656C6420546F6B656E222C2274223A225442494C4C222C227573223A5B7B2263223A2277656273697465222C2274223A2250726F647563742050616765222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F7462696C6C227D2C7B2263223A22646F6373222C2274223A225969656C6420546F6B656E20446F6373222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F646F6373227D5D7D",
    "MaximumAmount": "50000000",
    "Sequence": 1347359,
    "SigningPubKey": "ED0BFB56FB91211F7DCB245C3863958B8FF5A5BAC4B7293E598C7B4D34265EF0A9",
    "TransactionType": "MPTokenIssuanceCreate",
    "TransferFee": 0,
    "TxnSignature": "4710CCD303902101E6A009E8D459774D1FA9C59E20816588B9248883FF6A37DD8670C1C6EEED1DE5B363A15C88FCA40C1E74319886F3DB8278A63CF0B88CDC0A",
    "ctid": "C0148F2200000002",
    "date": 816978072,
    "ledger_index": 1347362
  },
  "validated": true
}

- MPToken created successfully with issuance ID: 00148F1F983B024FB54CE16CBC7F788C2F71AC9728355EFC
- Explorer URL: https://devnet.xrpl.org/mpt/00148F1F983B024FB54CE16CBC7F788C2F71AC9728355EFC

=== Confirming MPT Issuance metadata in the validated ledger... ===
Decoded MPT metadata:
 {
  "asset_class": "rwa",
  "additional_info": {
    "cusip": "912796RX0",
    "interest_rate": "5.00%",
    "interest_type": "variable",
    "maturity_date": "2045-06-30",
    "yield_source": "U.S. Treasury Bills"
  },
  "asset_subclass": "treasury",
  "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.",
  "icon": "https://example.org/tbill-icon.png",
  "issuer_name": "Example Yield Co.",
  "name": "T-Bill Yield Token",
  "ticker": "TBILL",
  "uris": [
    {
      "category": "website",
      "title": "Product Page",
      "uri": "https://exampleyield.co/tbill"
    },
    {
      "category": "docs",
      "title": "Yield Token Docs",
      "uri": "https://exampleyield.co/docs"
    }
  ]
}