# Single Asset Vault Examples (JavaScript) This directory contains JavaScript examples demonstrating how to create, deposit into, and withdraw from single asset vaults on the XRP Ledger. ## Setup Install dependencies before running any examples: ```sh npm i ``` --- ## Create a Vault ```sh node createVault.js ``` The script should output the VaultCreate transaction, vault ID, and complete vault information: ```sh Vault owner address: rLXZNDSS7gWvQZKunRUFiaViSiHo1yd4Ms MPT issuance ID: 0003E3B486D3DACD8BB468AB33793B9626BD894A92AB3AB4 Permissioned domain ID: 3BB81D0D164456A2D74720F63FD923F16DE08FB3223D3ED103D09F525A8D69D1 === VaultCreate transaction === { "TransactionType": "VaultCreate", "Account": "rLXZNDSS7gWvQZKunRUFiaViSiHo1yd4Ms", "Asset": { "mpt_issuance_id": "0003E3B486D3DACD8BB468AB33793B9626BD894A92AB3AB4" }, "Flags": 65536, "DomainID": "3BB81D0D164456A2D74720F63FD923F16DE08FB3223D3ED103D09F525A8D69D1", "Data": "50726976617465207661756C74", "MPTokenMetadata": "7B226163223A2264656669222C226169223A7B226578616D706C655F696E666F223A2274657374227D2C2264223A2250726F706F7274696F6E616C206F776E65727368697020736861726573206F6620746865207661756C742E222C2269223A226578616D706C652E636F6D2F61737365742D69636F6E2E706E67222C22696E223A22417373657420497373756572204E616D65222C226E223A225661756C7420736861726573222C2274223A22534841524531222C227573223A5B7B2263223A2277656273697465222C2274223A2241737365742057656273697465222C2275223A226578616D706C652E636F6D2F6173736574227D2C7B2263223A22646F6373222C2274223A22446F6373222C2275223A226578616D706C652E636F6D2F646F6373227D5D7D", "AssetsMaximum": "0", "WithdrawalPolicy": 1 } === Submitting VaultCreate transaction... === Vault created successfully! Vault ID: 9D25282C143F0F7F71F0E6FC7ABB3BD6FB30B7DCF04DF4A1E31C701B1B332D29 Vault pseudo-account address: rnBAKKEBBTqswakdeJJkZtBs9SRgpMkThj Share MPT issuance ID: 000000012DF200D67FF9DA7686FF8B6F32097337D7765211 === Getting vault_info... === { "api_version": 2, "id": 12, "result": { "ledger_hash": "73B53C0608A9C87C2B97314F0BAD109F236C4A95FB53FE4E8CEAEFE826A1E7AB", "ledger_index": 597229, "validated": true, "vault": { "Account": "rnBAKKEBBTqswakdeJJkZtBs9SRgpMkThj", "Asset": { "mpt_issuance_id": "0003E3B486D3DACD8BB468AB33793B9626BD894A92AB3AB4" }, "Data": "50726976617465207661756C74", "Flags": 65536, "LedgerEntryType": "Vault", "Owner": "rLXZNDSS7gWvQZKunRUFiaViSiHo1yd4Ms", "OwnerNode": "0", "PreviousTxnID": "8B64609225F802258250824B2C6C0A8B752AB8CBB6FAF64D433DC2F35C09E131", "PreviousTxnLgrSeq": 597229, "Sequence": 597228, "ShareMPTID": "000000012DF200D67FF9DA7686FF8B6F32097337D7765211", "WithdrawalPolicy": 1, "index": "9D25282C143F0F7F71F0E6FC7ABB3BD6FB30B7DCF04DF4A1E31C701B1B332D29", "shares": { "DomainID": "3BB81D0D164456A2D74720F63FD923F16DE08FB3223D3ED103D09F525A8D69D1", "Flags": 60, "Issuer": "rnBAKKEBBTqswakdeJJkZtBs9SRgpMkThj", "LedgerEntryType": "MPTokenIssuance", "MPTokenMetadata": "7B226163223A2264656669222C226169223A7B226578616D706C655F696E666F223A2274657374227D2C2264223A2250726F706F7274696F6E616C206F776E65727368697020736861726573206F6620746865207661756C742E222C2269223A226578616D706C652E636F6D2F61737365742D69636F6E2E706E67222C22696E223A22417373657420497373756572204E616D65222C226E223A225661756C7420736861726573222C2274223A22534841524531222C227573223A5B7B2263223A2277656273697465222C2274223A2241737365742057656273697465222C2275223A226578616D706C652E636F6D2F6173736574227D2C7B2263223A22646F6373222C2274223A22446F6373222C2275223A226578616D706C652E636F6D2F646F6373227D5D7D", "OutstandingAmount": "0", "OwnerNode": "0", "PreviousTxnID": "8B64609225F802258250824B2C6C0A8B752AB8CBB6FAF64D433DC2F35C09E131", "PreviousTxnLgrSeq": 597229, "Sequence": 1, "index": "4C3CC0AF1FE27EBE364F02AFF889D73D1F6F7CB5ED6126D1CD605E8952E18302", "mpt_issuance_id": "000000012DF200D67FF9DA7686FF8B6F32097337D7765211" } } }, "type": "response" } ``` --- ## Deposit into a Vault ```sh node deposit.js ``` The script should output the vault state before and after the deposit, along with the depositor's share balance: ```sh Depositor address: rnEmvWahVbNXzs8zGjhEfkBwo41Zn5wDDU Vault ID: 6AC4EC2D775C6275D314996D6ECDD16DCB9382A29FDB769951C42192FCED76EF Asset MPT issuance ID: 0003E3B486D3DACD8BB468AB33793B9626BD894A92AB3AB4 Vault share MPT issuance ID: 0000000152E7CD364F869E832EDB806C4A7AD8B3D0C151C5 === Getting initial vault state... === - Total vault value: 1 - Available assets: 1 === Checking depositor's balance... === Balance: 9937 === VaultDeposit transaction === { "TransactionType": "VaultDeposit", "Account": "rnEmvWahVbNXzs8zGjhEfkBwo41Zn5wDDU", "VaultID": "6AC4EC2D775C6275D314996D6ECDD16DCB9382A29FDB769951C42192FCED76EF", "Amount": { "mpt_issuance_id": "0003E3B486D3DACD8BB468AB33793B9626BD894A92AB3AB4", "value": "1" } } === Submitting VaultDeposit transaction... === Deposit successful! === Vault state after deposit === - Total vault value: 2 - Available assets: 2 === Depositor's share balance == Shares held: 2 ``` --- ## Withdraw from a Vault ```sh node withdraw.js ``` The script should output the vault state before and after the withdrawal, along with updated share and asset balances: ```sh Depositor address: rnEmvWahVbNXzs8zGjhEfkBwo41Zn5wDDU Vault ID: 6AC4EC2D775C6275D314996D6ECDD16DCB9382A29FDB769951C42192FCED76EF Asset MPT issuance ID: 0003E3B486D3DACD8BB468AB33793B9626BD894A92AB3AB4 Vault share MPT issuance ID: 0000000152E7CD364F869E832EDB806C4A7AD8B3D0C151C5 === Getting initial vault state... === Initial vault state: Assets Total: 2 Assets Available: 2 === Checking depositor's share balance... === Shares held: 2 === Preparing VaultWithdraw transaction === { "TransactionType": "VaultWithdraw", "Account": "rnEmvWahVbNXzs8zGjhEfkBwo41Zn5wDDU", "VaultID": "6AC4EC2D775C6275D314996D6ECDD16DCB9382A29FDB769951C42192FCED76EF", "Amount": { "mpt_issuance_id": "0003E3B486D3DACD8BB468AB33793B9626BD894A92AB3AB4", "value": "1" } } === Submitting VaultWithdraw transaction... === Withdrawal successful! === Vault state after withdrawal === Assets Total: 1 Assets Available: 1 === Depositor's share balance == Shares held: 1 === Depositor's asset balance == Balance: 9937 ```