Skip to content

Commit

Permalink
XLS-33 Multi Purpose token (#989)
Browse files Browse the repository at this point in the history
## High Level Overview of Change
- add MPT transactions: MPTokenIssuance, MPTokenIssuanceDestroy,
MPTokenAuthorize, MPTokenIssuanceSet
- add MPT page
- support search by MPTID
- updates transactions: Payment, Clawback
- modified Currency to support MPTID
<!--
Please include a summary/list of the changes.
If too broad, please consider splitting into multiple PRs.
-->

### Context of Change
Spec:
https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0033d-multi-purpose-tokens
  • Loading branch information
shawnxie999 authored Oct 10, 2024
1 parent e1e37de commit e7a89c9
Show file tree
Hide file tree
Showing 99 changed files with 3,225 additions and 118 deletions.
25 changes: 24 additions & 1 deletion public/locales/ca-CA/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -530,5 +530,28 @@
"last_update_time": null,
"asset_class": null,
"trading_pairs": null,
"deleted": null
"deleted": null,
"assets.mpt_tab_title": null,
"assets.no_mpts_message": null,
"transaction_type_name_MPTokenIssuanceCreate": null,
"transaction_type_name_MPTokenIssuanceDestroy": null,
"transaction_type_name_MPTokenIssuanceSet": null,
"transaction_type_name_MPTokenAuthorize": null,
"transaction_outstanding_balance_line_two": null,
"transaction_mptoken_line_one": null,
"transaction_mpt_issuance_line_one":null,
"mpt_issuance_id": null,
"asset_scale": null,
"metadata": null,
"max_amount": null,
"mpt_holder": null,
"check_mpt_id": null,
"outstanding_amount": null,
"locked": null,
"can_lock": null,
"require_auth": null,
"can_escrow": null,
"can_trade": null,
"can_transfer": null,
"can_clawback": null
}
25 changes: 24 additions & 1 deletion public/locales/en-US/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
"action": "action",
"assets": "Assets",
"assets.nft_tab_title": "Non-Fungible Tokens",
"assets.mpt_tab_title": "Multi-Purpose Tokens",
"assets.issued_tab_title": "Issued Tokens",
"assets.no_issued_message": "No tokens found.",
"assets.no_nfts_message": "No NFTs found.",
"assets.no_mpts_message": "No MPTs found.",
"network": "Network",
"amendments": "Amendments",
"network_name": "Unknown Network",
Expand Down Expand Up @@ -166,6 +168,10 @@
"transaction_type_name_EscrowCreate": "Escrow Create",
"transaction_type_name_EscrowFinish": "Escrow Finish",
"transaction_type_name_Invoke": "Invoke",
"transaction_type_name_MPTokenIssuanceCreate": "MPT Issuance Create",
"transaction_type_name_MPTokenIssuanceDestroy": "MPT Issuance Destroy",
"transaction_type_name_MPTokenIssuanceSet": "MPT Issuance Set",
"transaction_type_name_MPTokenAuthorize": "MPT Authorize",
"transaction_type_name_NFTokenAcceptOffer": "NFT Accept Offer",
"transaction_type_name_NFTokenBurn": "NFT Burn",
"transaction_type_name_NFTokenCancelOffer": "NFT Cancel Offer",
Expand Down Expand Up @@ -248,8 +254,11 @@
"node_meta_type": "It {{action}} a node with type",
"transaction_balance_line_one": "It <1><0>{{action}}</0></1> a <3><0>{{currency}}</0></3> RippleState node between <5><0>{{account}}</0></5> and <7><0>{{counterAccount}}</0></7>",
"transaction_balance_line_two": "Balance changed by <1><0>{{change}}</0></1> from <3><0>{{previousBalance}}</0></3> to <5><0>{{finalBalance}}</0></5>",
"transaction_outstanding_balance_line_two": "Outstanding balance changed by <1><0>{{change}}</0></1> from <3><0>{{previousBalance}}</0></3> to <5><0>{{finalBalance}}</0></5>",
"transaction_owned_directory": "It {{action}} a DirectoryNode node owned by",
"transaction_unowned_directory": "It {{action}} a DirectoryNode node",
"transaction_mptoken_line_one": "It <1><0>{{action}}</0></1> an MPToken node of <3><0>{{account}}</0></3>",
"transaction_mpt_issuance_line_one": "It <1><0>{{action}}</0></1> an MPTokenIssuance node of <3><0>{{account}}</0></3>",
"owned_account_root": "It {{action}} the AccountRoot node of",
"unowned_account_root": "It {{action}} the AccountRoot node",
"account_balance_increased": "Balance increased by <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> from <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> to <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>",
Expand Down Expand Up @@ -530,5 +539,19 @@
"last_update_time": "Last Update Time",
"asset_class": "Asset Class",
"trading_pairs": "Trading Pairs",
"deleted": "Deleted"
"deleted": "Deleted",
"mpt_issuance_id": "MPT Issuance ID",
"asset_scale": "Asset Scale",
"metadata": "Metadata",
"max_amount": "Max Amount",
"mpt_holder": "MPT Holder",
"check_mpt_id": "Please check your MPT Issuance ID",
"outstanding_amount": "Issued Amount",
"locked": "Locked",
"can_lock": "Can Lock",
"require_auth": "Require Auth",
"can_escrow": "Can Escrow",
"can_trade": "Can Trade",
"can_transfer": "Can Transfer",
"can_clawback": "Can Clawback"
}
25 changes: 24 additions & 1 deletion public/locales/es-ES/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -526,5 +526,28 @@
"last_update_time": null,
"asset_class": null,
"trading_pairs": null,
"deleted": null
"deleted": null,
"assets.mpt_tab_title": null,
"assets.no_mpts_message": null,
"transaction_type_name_MPTokenIssuanceCreate": null,
"transaction_type_name_MPTokenIssuanceDestroy": null,
"transaction_type_name_MPTokenIssuanceSet": null,
"transaction_type_name_MPTokenAuthorize": null,
"transaction_outstanding_balance_line_two": null,
"transaction_mptoken_line_one": null,
"transaction_mpt_issuance_line_one":null,
"mpt_issuance_id": null,
"asset_scale": null,
"metadata": null,
"max_amount": null,
"mpt_holder": null,
"check_mpt_id": null,
"outstanding_amount": null,
"locked": null,
"can_lock": null,
"require_auth": null,
"can_escrow": null,
"can_trade": null,
"can_transfer": null,
"can_clawback": null
}
25 changes: 24 additions & 1 deletion public/locales/fr-FR/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -527,5 +527,28 @@
"last_update_time": null,
"asset_class": null,
"trading_pairs": null,
"deleted": null
"deleted": null,
"assets.mpt_tab_title": null,
"assets.no_mpts_message": null,
"transaction_type_name_MPTokenIssuanceCreate": null,
"transaction_type_name_MPTokenIssuanceDestroy": null,
"transaction_type_name_MPTokenIssuanceSet": null,
"transaction_type_name_MPTokenAuthorize": null,
"transaction_outstanding_balance_line_two": null,
"transaction_mptoken_line_one": null,
"transaction_mpt_issuance_line_one":null,
"mpt_issuance_id": null,
"asset_scale": null,
"metadata": null,
"max_amount": null,
"mpt_holder": null,
"check_mpt_id": null,
"outstanding_amount": null,
"locked": null,
"can_lock": null,
"require_auth": null,
"can_escrow": null,
"can_trade": null,
"can_transfer": null,
"can_clawback": null
}
25 changes: 24 additions & 1 deletion public/locales/ja-JP/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -526,5 +526,28 @@
"last_update_time": null,
"asset_class": null,
"trading_pairs": null,
"deleted": null
"deleted": null,
"assets.mpt_tab_title": null,
"assets.no_mpts_message": null,
"transaction_type_name_MPTokenIssuanceCreate": null,
"transaction_type_name_MPTokenIssuanceDestroy": null,
"transaction_type_name_MPTokenIssuanceSet": null,
"transaction_type_name_MPTokenAuthorize": null,
"transaction_outstanding_balance_line_two": null,
"transaction_mptoken_line_one": null,
"transaction_mpt_issuance_line_one":null,
"mpt_issuance_id": null,
"asset_scale": null,
"metadata": null,
"max_amount": null,
"mpt_holder": null,
"check_mpt_id": null,
"outstanding_amount": null,
"locked": null,
"can_lock": null,
"require_auth": null,
"can_escrow": null,
"can_trade": null,
"can_transfer": null,
"can_clawback": null
}
25 changes: 24 additions & 1 deletion public/locales/ko-KR/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -524,5 +524,28 @@
"last_update_time": null,
"asset_class": null,
"trading_pairs": null,
"deleted": null
"deleted": null,
"assets.mpt_tab_title": null,
"assets.no_mpts_message": null,
"transaction_type_name_MPTokenIssuanceCreate": null,
"transaction_type_name_MPTokenIssuanceDestroy": null,
"transaction_type_name_MPTokenIssuanceSet": null,
"transaction_type_name_MPTokenAuthorize": null,
"transaction_outstanding_balance_line_two": null,
"transaction_mptoken_line_one": null,
"transaction_mpt_issuance_line_one":null,
"mpt_issuance_id": null,
"asset_scale": null,
"metadata": null,
"max_amount": null,
"mpt_holder": null,
"check_mpt_id": null,
"outstanding_amount": null,
"locked": null,
"can_lock": null,
"require_auth": null,
"can_escrow": null,
"can_trade": null,
"can_transfer": null,
"can_clawback": null
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
import { mount } from 'enzyme'
import { I18nextProvider } from 'react-i18next'
import { MemoryRouter } from 'react-router'
import { QueryClientProvider } from 'react-query'
import i18n from '../../../../../../i18n/testConfig'
import { AMMAccountHeader, AmmDataType } from '../AMMAccountHeader'
import { flushPromises } from '../../../../../test/utils'
import { queryClient } from '../../../../../shared/QueryClient'

describe('AMM Account Header', () => {
const TEST_ACCOUNT_ID = 'rTEST_ACCOUNT'

const createWrapper = (state: AmmDataType) =>
mount(
<I18nextProvider i18n={i18n}>
<MemoryRouter initialEntries={[`accounts/${TEST_ACCOUNT_ID}`]}>
<AMMAccountHeader data={state} />
</MemoryRouter>
</I18nextProvider>,
<QueryClientProvider client={queryClient}>
<I18nextProvider i18n={i18n}>
<MemoryRouter initialEntries={[`accounts/${TEST_ACCOUNT_ID}`]}>
<AMMAccountHeader data={state} />
</MemoryRouter>
</I18nextProvider>
</QueryClientProvider>,
)

it('renders AMM account page', async () => {
Expand Down
11 changes: 10 additions & 1 deletion src/containers/Accounts/AccountAssetTab/AccountAssetTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,25 @@ import { useNavigate } from 'react-router'
import { useRouteParams } from '../../shared/routing'
import { AccountIssuedTokenTable } from '../AccountIssuedTokenTable'
import { AccountNFTTable } from '../AccountNFTTable/AccountNFTTable'
import { AccountMPTTable } from '../AccountMPTTable/AccountMPTTable'
import { ACCOUNT_ROUTE } from '../../App/routes'

// TODO: Add state types or convert to react query
interface Props {
account: any
}

const assetTypes = ['issued', 'nft']
let assetTypes = ['issued', 'nft']

const AccountAssetTabDisconnected = ({ account }: Props) => {
const { id: accountId = '', assetType = assetTypes[0] } =
useRouteParams(ACCOUNT_ROUTE)

const supportsMPT = ['mpt_sandbox', 'devnet'].includes(
process.env.VITE_ENVIRONMENT as string,
)
if (supportsMPT) assetTypes = ['issued', 'nft', 'mpt']

const navigate = useNavigate()
const { t } = useTranslation()
function switchAsset(event: ChangeEvent<HTMLInputElement>) {
Expand Down Expand Up @@ -48,11 +55,13 @@ const AccountAssetTabDisconnected = ({ account }: Props) => {
)
})}
</div>

<div className="tab-body">
{assetType === 'issued' && (
<AccountIssuedTokenTable account={account} />
)}
{assetType === 'nft' && <AccountNFTTable accountId={accountId} />}
{assetType === 'mpt' && <AccountMPTTable accountId={accountId} />}
</div>
</>
)
Expand Down
Loading

0 comments on commit e7a89c9

Please sign in to comment.