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.
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { stringToHex, hexToString } from '@xrplf/isomorphic/dist/utils/index.js'
 | 
						|
import { MPTokenIssuanceCreateFlags, Client } from 'xrpl'
 | 
						|
 | 
						|
// Connect to network and get a wallet
 | 
						|
const client = new Client('wss://s.devnet.rippletest.net:51233')
 | 
						|
await client.connect()
 | 
						|
 | 
						|
console.log('Funding new wallet from faucet...')
 | 
						|
const { wallet } = await client.fundWallet()
 | 
						|
 | 
						|
// Define metadata as JSON
 | 
						|
const 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: 'https://example.org/tbill-icon.png',
 | 
						|
  ac: 'rwa',
 | 
						|
  as: 'treasury',
 | 
						|
  in: 'Example Yield Co.',
 | 
						|
  us: [
 | 
						|
    {
 | 
						|
      u: 'https://exampleyield.co/tbill',
 | 
						|
      c: 'website',
 | 
						|
      t: 'Product Page'
 | 
						|
    },
 | 
						|
    {
 | 
						|
      u: 'https://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
 | 
						|
const mpt_metadata_hex = stringToHex(JSON.stringify(mpt_metadata))
 | 
						|
 | 
						|
// Define the transaction, including other MPT parameters
 | 
						|
const mpt_issuance_create = {
 | 
						|
  TransactionType: 'MPTokenIssuanceCreate',
 | 
						|
  Account: wallet.address,
 | 
						|
  AssetScale: 4,
 | 
						|
  MaximumAmount: '50000000',
 | 
						|
  TransferFee: 0,
 | 
						|
  Flags: MPTokenIssuanceCreateFlags.tfMPTCanTransfer |
 | 
						|
            MPTokenIssuanceCreateFlags.tfMPTCanTrade,
 | 
						|
  MPTokenMetadata: mpt_metadata_hex
 | 
						|
}
 | 
						|
 | 
						|
// Prepare, sign, and submit the transaction
 | 
						|
console.log('Sending MPTokenIssuanceCreate transaction...')
 | 
						|
const submit_response = await client.submitAndWait(mpt_issuance_create, { wallet, autofill: true })
 | 
						|
 | 
						|
// Check transaction results and disconnect
 | 
						|
console.log(JSON.stringify(submit_response, null, 2))
 | 
						|
if (submit_response.result.meta.TransactionResult !== 'tesSUCCESS') {
 | 
						|
  const result_code = response.result.meta.TransactionResult
 | 
						|
  console.warn(`Transaction failed with result code ${result_code}.`)
 | 
						|
  process.exit(1)
 | 
						|
}
 | 
						|
 | 
						|
const issuance_id = submit_response.result.meta.mpt_issuance_id
 | 
						|
console.log(`MPToken created successfully with issuance ID ${issuance_id}.`)
 | 
						|
 | 
						|
// Look up MPT Issuance entry in the validated ledger
 | 
						|
console.log('Confirming MPT Issuance metadata in the validated ledger.')
 | 
						|
const ledger_entry_response = await client.request({
 | 
						|
  "command": "ledger_entry",
 | 
						|
  "mpt_issuance": issuance_id,
 | 
						|
  "ledger_index": "validated"
 | 
						|
})
 | 
						|
 | 
						|
// Decode the metadata
 | 
						|
const metadata_blob = ledger_entry_response.result.node.MPTokenMetadata
 | 
						|
const decoded_metadata = JSON.parse(hexToString(metadata_blob))
 | 
						|
console.log('Decoded metadata:', decoded_metadata)
 | 
						|
 | 
						|
 | 
						|
client.disconnect()
 |