refactor: Elrond rebranding to MultiversX (#148)

This commit is contained in:
Radu Mojic
2023-05-30 09:13:49 +02:00
committed by GitHub
parent 5d579166cb
commit a60069941f
60 changed files with 3711 additions and 3469 deletions
+2 -2
View File
@@ -12,8 +12,8 @@
"@cosmjs/amino": "0.28.4",
"@cosmjs/encoding": "0.28.4",
"@cosmjs/proto-signing": "0.28.4",
"@elrondnetwork/erdjs": "11.1.1",
"@elrondnetwork/erdjs-walletcore": "2.1.0",
"@multiversx/sdk-core": "11.5.0",
"@multiversx/sdk-wallet": "4.0.0",
"@json-rpc-tools/utils": "1.7.6",
"@near-wallet-selector/wallet-utils": "^7.0.2",
"@nextui-org/react": "1.0.8-beta.5",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

@@ -0,0 +1,4 @@
<svg width="300" height="300" viewBox="0 0 300 300" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="300" rx="150" fill="black"/>
<path d="M158.482 149.928L228.714 112.529L216.919 90L152.575 115.854C150.923 116.523 149.077 116.523 147.425 115.854L83.0814 90L71.25 112.602L141.482 150L71.25 187.398L83.0814 210L147.425 183.948C149.077 183.279 150.923 183.279 152.575 183.948L216.919 209.874L228.75 187.272L158.482 149.928Z" fill="#23F7DD"/>
</svg>

After

Width:  |  Height:  |  Size: 472 B

@@ -3,7 +3,7 @@ import { cosmosAddresses } from '@/utils/CosmosWalletUtil'
import { eip155Addresses } from '@/utils/EIP155WalletUtil'
import { nearAddresses } from '@/utils/NearWalletUtil'
import { solanaAddresses } from '@/utils/SolanaWalletUtil'
import { elrondAddresses } from '@/utils/ElrondWalletUtil'
import { multiversxAddresses } from '@/utils/MultiversxWalletUtil'
import { tronAddresses } from '@/utils/TronWalletUtil'
import { tezosAddresses } from '@/utils/TezosWalletUtil'
import { useSnapshot } from 'valtio'
@@ -18,7 +18,7 @@ export default function AccountPicker() {
SettingsStore.setCosmosAddress(cosmosAddresses[account])
SettingsStore.setSolanaAddress(solanaAddresses[account])
SettingsStore.setNearAddress(nearAddresses[account])
SettingsStore.setElrondAddress(elrondAddresses[account])
SettingsStore.setMultiversxAddress(multiversxAddresses[account])
SettingsStore.setTronAddress(tronAddresses[account])
SettingsStore.setTezosAddress(tezosAddresses[account])
}
@@ -6,7 +6,7 @@ import SessionRequestModal from '@/views/SessionSignModal'
import SessionSignNearModal from '@/views/SessionSignNearModal'
import SessionSignPolkadotModal from '@/views/SessionSignPolkadotModal'
import SessionSignSolanaModal from '@/views/SessionSignSolanaModal'
import SessionSignElrondModal from '@/views/SessionSignElrondModal'
import SessionSignMultiversxModal from '@/views/SessionSignMultiversxModal'
import SessionSignTronModal from '@/views/SessionSignTronModal'
import SessionSignTezosModal from '@/views/SessionSignTezosModal'
import SessionSignTypedDataModal from '@/views/SessionSignTypedDataModal'
@@ -32,7 +32,7 @@ export default function Modal() {
{view === 'SessionSignSolanaModal' && <SessionSignSolanaModal />}
{view === 'SessionSignPolkadotModal' && <SessionSignPolkadotModal />}
{view === 'SessionSignNearModal' && <SessionSignNearModal />}
{view === 'SessionSignElrondModal' && <SessionSignElrondModal />}
{view === 'SessionSignMultiversxModal' && <SessionSignMultiversxModal />}
{view === 'SessionSignTronModal' && <SessionSignTronModal />}
{view === 'SessionSignTezosModal' && <SessionSignTezosModal />}
{view === 'LegacySessionProposalModal' && <LegacySessionProposalModal />}
@@ -2,7 +2,7 @@ import { COSMOS_MAINNET_CHAINS, TCosmosChain } from '@/data/COSMOSData'
import { EIP155_CHAINS, TEIP155Chain } from '@/data/EIP155Data'
import { NEAR_TEST_CHAINS, TNearChain } from '@/data/NEARData'
import { SOLANA_CHAINS, TSolanaChain } from '@/data/SolanaData'
import { ELROND_CHAINS, TElrondChain } from '@/data/ElrondData'
import { MULTIVERSX_CHAINS, TMultiversxChain } from '@/data/MultiversxData'
import { TRON_CHAINS, TTronChain } from '@/data/TronData'
import { Col, Divider, Row, Text } from '@nextui-org/react'
import { Fragment } from 'react'
@@ -32,7 +32,7 @@ export default function RequesDetailsCard({ chains, protocol }: IProps) {
COSMOS_MAINNET_CHAINS[chain as TCosmosChain]?.name ??
SOLANA_CHAINS[chain as TSolanaChain]?.name ??
NEAR_TEST_CHAINS[chain as TNearChain]?.name ??
ELROND_CHAINS[chain as TElrondChain]?.name ??
MULTIVERSX_CHAINS[chain as TMultiversxChain]?.name ??
TRON_CHAINS[chain as TTronChain]?.name ??
chain
)
@@ -3,7 +3,7 @@ import { COSMOS_MAINNET_CHAINS } from '@/data/COSMOSData'
import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@/data/EIP155Data'
import { NEAR_TEST_CHAINS } from '@/data/NEARData'
import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@/data/SolanaData'
import { ELROND_MAINNET_CHAINS, ELROND_TEST_CHAINS } from '@/data/ElrondData'
import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@/data/MultiversxData'
import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@/data/TronData'
import { formatChainName } from '@/utils/HelperUtil'
import { Col, Row, Text } from '@nextui-org/react'
@@ -16,13 +16,13 @@ import { Fragment } from 'react'
const CHAIN_METADATA = {
...COSMOS_MAINNET_CHAINS,
...SOLANA_MAINNET_CHAINS,
...ELROND_MAINNET_CHAINS,
...MULTIVERSX_MAINNET_CHAINS,
...TRON_MAINNET_CHAINS,
...EIP155_MAINNET_CHAINS,
...EIP155_TEST_CHAINS,
...SOLANA_TEST_CHAINS,
...NEAR_TEST_CHAINS,
...ELROND_TEST_CHAINS,
...MULTIVERSX_TEST_CHAINS,
...TRON_TEST_CHAINS
}
@@ -3,7 +3,7 @@ import { COSMOS_MAINNET_CHAINS } from '@/data/COSMOSData'
import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@/data/EIP155Data'
import { NEAR_TEST_CHAINS } from '@/data/NEARData'
import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@/data/SolanaData'
import { ELROND_MAINNET_CHAINS, ELROND_TEST_CHAINS } from '@/data/ElrondData'
import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@/data/MultiversxData'
import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@/data/TronData'
import { formatChainName } from '@/utils/HelperUtil'
import { Col, Row, Text } from '@nextui-org/react'
@@ -16,13 +16,13 @@ import { Fragment } from 'react'
const CHAIN_METADATA = {
...COSMOS_MAINNET_CHAINS,
...SOLANA_MAINNET_CHAINS,
...ELROND_MAINNET_CHAINS,
...MULTIVERSX_MAINNET_CHAINS,
...TRON_MAINNET_CHAINS,
...EIP155_MAINNET_CHAINS,
...EIP155_TEST_CHAINS,
...SOLANA_TEST_CHAINS,
...NEAR_TEST_CHAINS,
...ELROND_TEST_CHAINS,
...MULTIVERSX_TEST_CHAINS,
...TRON_TEST_CHAINS
}
@@ -1,47 +0,0 @@
/**
* Types
*/
export type TElrondChain = keyof typeof ELROND_MAINNET_CHAINS
/**
* Chains
*/
export const ELROND_MAINNET_CHAINS = {
'elrond:1': {
chainId: '1',
name: 'Elrond',
logo: '/chain-logos/elrond-1.png',
rgb: '43, 45, 46',
rpc: ''
}
}
export const ELROND_TEST_CHAINS = {
'elrond:D': {
chainId: 'D',
name: 'Elrond Devnet',
logo: '/chain-logos/elrond-1.png',
rgb: '43, 45, 46',
rpc: ''
}
// Keep only one Test Chain visible
// 'elrond:T': {
// chainId: 'T',
// name: 'Elrond Testnet',
// logo: '/chain-logos/elrond-1.png',
// rgb: '43, 45, 46',
// rpc: ''
// }
}
export const ELROND_CHAINS = { ...ELROND_MAINNET_CHAINS, ...ELROND_TEST_CHAINS }
/**
* Methods
*/
export const ELROND_SIGNING_METHODS = {
ELROND_SIGN_TRANSACTION: 'erd_signTransaction',
ELROND_SIGN_TRANSACTIONS: 'erd_signTransactions',
ELROND_SIGN_MESSAGE: 'erd_signMessage',
ELROND_SIGN_LOGIN_TOKEN: 'erd_signLoginToken'
}
@@ -0,0 +1,48 @@
/**
* Types
*/
export type TMultiversxChain = keyof typeof MULTIVERSX_MAINNET_CHAINS
/**
* Chains
*/
export const MULTIVERSX_MAINNET_CHAINS = {
'mvx:1': {
chainId: '1',
name: 'MultiversX',
logo: '/chain-logos/multiversx-1.svg',
rgb: '43, 45, 46',
rpc: ''
}
}
export const MULTIVERSX_TEST_CHAINS = {
'mvx:D': {
chainId: 'D',
name: 'MultiversX Devnet',
logo: '/chain-logos/multiversx-1.svg',
rgb: '43, 45, 46',
rpc: ''
}
// Keep only one Test Chain visible
// 'mvx:T': {
// chainId: 'T',
// name: 'MultiversX Testnet',
// logo: '/chain-logos/multiversx-1.svg',
// rgb: '43, 45, 46',
// rpc: ''
// }
}
export const MULTIVERSX_CHAINS = { ...MULTIVERSX_MAINNET_CHAINS, ...MULTIVERSX_TEST_CHAINS }
/**
* Methods
*/
export const MULTIVERSX_SIGNING_METHODS = {
MULTIVERSX_SIGN_TRANSACTION: 'mvx_signTransaction',
MULTIVERSX_SIGN_TRANSACTIONS: 'mvx_signTransactions',
MULTIVERSX_SIGN_MESSAGE: 'mvx_signMessage',
MULTIVERSX_SIGN_LOGIN_TOKEN: 'mvx_signLoginToken',
MULTIVERSX_SIGN_NATIVE_AUTH_TOKEN: 'mvx_signNativeAuthToken'
}
@@ -3,7 +3,7 @@ import { createOrRestoreCosmosWallet } from '@/utils/CosmosWalletUtil'
import { createOrRestoreEIP155Wallet } from '@/utils/EIP155WalletUtil'
import { createOrRestoreSolanaWallet } from '@/utils/SolanaWalletUtil'
import { createOrRestorePolkadotWallet } from '@/utils/PolkadotWalletUtil'
import { createOrRestoreElrondWallet } from '@/utils/ElrondWalletUtil'
import { createOrRestoreMultiversxWallet } from '@/utils/MultiversxWalletUtil'
import { createOrRestoreTronWallet } from '@/utils/TronWalletUtil'
import { createOrRestoreTezosWallet } from '@/utils/TezosWalletUtil'
import { createSignClient, signClient } from '@/utils/WalletConnectUtil'
@@ -24,7 +24,7 @@ export default function useInitialization() {
const { solanaAddresses } = await createOrRestoreSolanaWallet()
const { polkadotAddresses } = await createOrRestorePolkadotWallet()
const { nearAddresses } = await createOrRestoreNearWallet()
const { elrondAddresses } = await createOrRestoreElrondWallet()
const { multiversxAddresses } = await createOrRestoreMultiversxWallet()
const { tronAddresses } = await createOrRestoreTronWallet()
const { tezosAddresses } = await createOrRestoreTezosWallet()
@@ -33,7 +33,7 @@ export default function useInitialization() {
SettingsStore.setSolanaAddress(solanaAddresses[0])
SettingsStore.setPolkadotAddress(polkadotAddresses[0])
SettingsStore.setNearAddress(nearAddresses[0])
SettingsStore.setElrondAddress(elrondAddresses[0])
SettingsStore.setMultiversxAddress(multiversxAddresses[0])
SettingsStore.setTronAddress(tronAddresses[0])
SettingsStore.setTezosAddress(tezosAddresses[0])
await createSignClient(relayerRegionURL)
@@ -2,7 +2,7 @@ import { COSMOS_SIGNING_METHODS } from '@/data/COSMOSData'
import { EIP155_SIGNING_METHODS } from '@/data/EIP155Data'
import { SOLANA_SIGNING_METHODS } from '@/data/SolanaData'
import { POLKADOT_SIGNING_METHODS } from '@/data/PolkadotData'
import { ELROND_SIGNING_METHODS } from '@/data/ElrondData'
import { MULTIVERSX_SIGNING_METHODS } from '@/data/MultiversxData'
import { TRON_SIGNING_METHODS } from '@/data/TronData'
import ModalStore from '@/store/ModalStore'
import { signClient } from '@/utils/WalletConnectUtil'
@@ -68,11 +68,12 @@ export default function useWalletConnectEventsManager(initialized: boolean) {
case NEAR_SIGNING_METHODS.NEAR_VERIFY_OWNER:
return ModalStore.open('SessionSignNearModal', { requestEvent, requestSession })
case ELROND_SIGNING_METHODS.ELROND_SIGN_MESSAGE:
case ELROND_SIGNING_METHODS.ELROND_SIGN_TRANSACTION:
case ELROND_SIGNING_METHODS.ELROND_SIGN_TRANSACTIONS:
case ELROND_SIGNING_METHODS.ELROND_SIGN_LOGIN_TOKEN:
return ModalStore.open('SessionSignElrondModal', { requestEvent, requestSession })
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_MESSAGE:
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_TRANSACTION:
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_TRANSACTIONS:
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_LOGIN_TOKEN:
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_NATIVE_AUTH_TOKEN:
return ModalStore.open('SessionSignMultiversxModal', { requestEvent, requestSession })
case NEAR_SIGNING_METHODS.NEAR_GET_ACCOUNTS:
return signClient.respond({
@@ -1,5 +1,5 @@
import { Transaction, SignableMessage } from '@elrondnetwork/erdjs'
import { Mnemonic, UserSecretKey, UserWallet, UserSigner } from '@elrondnetwork/erdjs-walletcore'
import { Transaction, SignableMessage } from '@multiversx/sdk-core'
import { Mnemonic, UserSecretKey, UserWallet, UserSigner } from '@multiversx/sdk-wallet'
/**
* Types
@@ -11,7 +11,7 @@ interface IInitArgs {
/**
* Library
*/
export default class ElrondLib {
export default class MultiversxLib {
wallet: UserWallet
mnemonic: Mnemonic
password: string
@@ -20,16 +20,16 @@ export default class ElrondLib {
this.mnemonic = mnemonic
this.password = 'password' // test purposes only
const secretKey = mnemonic.deriveKey(0)
const secretKeyHex = secretKey.hex()
let fromHex = UserSecretKey.fromString(secretKeyHex)
this.wallet = new UserWallet(fromHex, this.password)
this.wallet = UserWallet.fromMnemonic({
password: this.password,
mnemonic: mnemonic.toString()
})
}
static init({ mnemonic }: IInitArgs) {
const mnemonicObj = mnemonic ? Mnemonic.fromString(mnemonic) : Mnemonic.generate()
return new ElrondLib(mnemonicObj)
return new MultiversxLib(mnemonicObj)
}
getMnemonic() {
@@ -54,9 +54,9 @@ export default class ElrondLib {
})
const signer = new UserSigner(UserSecretKey.fromString(secretKeyHex))
await signer.sign(signMessage)
const signature = await signer.sign(signMessage.serializeForSigning())
return { signature: signMessage.signature.hex() }
return { signature: signature.toString('hex') }
}
async signTransaction(transaction: any) {
@@ -66,9 +66,9 @@ export default class ElrondLib {
const signTransaction = Transaction.fromPlainObject(transaction)
const signer = new UserSigner(UserSecretKey.fromString(secretKeyHex))
await signer.sign(signTransaction)
const signature = await signer.sign(signTransaction.serializeForSigning(signer.getAddress()))
return { signature: signTransaction.getSignature().hex() }
return { signature: signature.toString('hex') }
}
async signTransactions(transactions: any[]) {
@@ -79,9 +79,11 @@ export default class ElrondLib {
transactions.map(async (transaction: any): Promise<any> => {
const signTransaction = Transaction.fromPlainObject(transaction)
const signer = new UserSigner(UserSecretKey.fromString(secretKeyHex))
await signer.sign(signTransaction)
const signature = await signer.sign(
signTransaction.serializeForSigning(signer.getAddress())
)
return { signature: signTransaction.getSignature().hex() }
return { signature: signature.toString('hex') }
})
)
+7 -7
View File
@@ -5,7 +5,7 @@ import { COSMOS_MAINNET_CHAINS } from '@/data/COSMOSData'
import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@/data/EIP155Data'
import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@/data/SolanaData'
import { POLKADOT_MAINNET_CHAINS, POLKADOT_TEST_CHAINS } from '@/data/PolkadotData'
import { ELROND_MAINNET_CHAINS, ELROND_TEST_CHAINS } from '@/data/ElrondData'
import { MULTIVERSX_MAINNET_CHAINS, MULTIVERSX_TEST_CHAINS } from '@/data/MultiversxData'
import { TRON_MAINNET_CHAINS, TRON_TEST_CHAINS } from '@/data/TronData'
import SettingsStore from '@/store/SettingsStore'
import { Text } from '@nextui-org/react'
@@ -22,7 +22,7 @@ export default function HomePage() {
solanaAddress,
polkadotAddress,
nearAddress,
elrondAddress,
multiversxAddress,
tronAddress,
tezosAddress
} = useSnapshot(SettingsStore.state)
@@ -47,8 +47,8 @@ export default function HomePage() {
{Object.entries(POLKADOT_MAINNET_CHAINS).map(([caip10, {name, logo, rgb}]) => (
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={polkadotAddress} chainId={caip10}/>
))}
{Object.entries(ELROND_MAINNET_CHAINS).map(([caip10, {name, logo, rgb}]) => (
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={elrondAddress} chainId={caip10}/>
{Object.entries(MULTIVERSX_MAINNET_CHAINS).map(([caip10, {name, logo, rgb}]) => (
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={multiversxAddress} chainId={caip10}/>
))}
{Object.entries(TRON_MAINNET_CHAINS).map(([caip10, {name, logo, rgb}]) => (
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={tronAddress} chainId={caip10}/>
@@ -74,9 +74,9 @@ export default function HomePage() {
{Object.entries(NEAR_TEST_CHAINS).map(([caip10, {name, logo, rgb}]) => (
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={nearAddress} chainId={caip10}/>
))}
{Object.entries(ELROND_TEST_CHAINS).map(([caip10, {name, logo, rgb}]) => (
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={elrondAddress} chainId={caip10}/>
))}
{Object.entries(MULTIVERSX_TEST_CHAINS).map(([caip10, {name, logo, rgb}]) => (
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={multiversxAddress} chainId={caip10}/>
))}
{Object.entries(TRON_TEST_CHAINS).map(([caip10, {name, logo, rgb}]) => (
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={tronAddress} chainId={caip10}/>
))}
@@ -4,7 +4,7 @@ import SettingsStore from '@/store/SettingsStore'
import { cosmosWallets } from '@/utils/CosmosWalletUtil'
import { eip155Wallets } from '@/utils/EIP155WalletUtil'
import { solanaWallets } from '@/utils/SolanaWalletUtil'
import { elrondWallets } from '@/utils/ElrondWalletUtil'
import { multiversxWallets } from '@/utils/MultiversxWalletUtil'
import { tronWallets } from '@/utils/TronWalletUtil'
import { Card, Divider, Row, Switch, Text } from '@nextui-org/react'
import { Fragment } from 'react'
@@ -18,7 +18,7 @@ export default function SettingsPage() {
eip155Address,
cosmosAddress,
solanaAddress,
elrondAddress,
multiversxAddress,
tronAddress,
tezosAddress
} = useSnapshot(SettingsStore.state)
@@ -91,10 +91,10 @@ export default function SettingsPage() {
</Card>
<Text h4 css={{ marginTop: '$10', marginBottom: '$5' }}>
Elrond Mnemonic
MultiversX Mnemonic
</Text>
<Card bordered borderWeight="light" css={{ minHeight: '215px', wordWrap: 'break-word' }}>
<Text css={{ fontFamily: '$mono' }}>{elrondWallets[elrondAddress].getMnemonic()}</Text>
<Text css={{ fontFamily: '$mono' }}>{multiversxWallets[multiversxAddress].getMnemonic()}</Text>
</Card>
<Text h4 css={{ marginTop: '$10', marginBottom: '$5' }}>
@@ -29,7 +29,7 @@ interface State {
| 'SessionSignSolanaModal'
| 'SessionSignPolkadotModal'
| 'SessionSignNearModal'
| 'SessionSignElrondModal'
| 'SessionSignMultiversxModal'
| 'SessionSignTronModal'
| 'SessionSignTezosModal'
| 'LegacySessionProposalModal'
@@ -11,7 +11,7 @@ interface State {
solanaAddress: string
polkadotAddress: string
nearAddress: string
elrondAddress: string
multiversxAddress: string
tronAddress: string
tezosAddress: string
relayerRegionURL: string
@@ -30,7 +30,7 @@ const state = proxy<State>({
solanaAddress: '',
polkadotAddress: '',
nearAddress: '',
elrondAddress: '',
multiversxAddress: '',
tronAddress: '',
tezosAddress: '',
relayerRegionURL: ''
@@ -68,8 +68,8 @@ const SettingsStore = {
state.relayerRegionURL = relayerRegionURL
},
setElrondAddress(elrondAddress: string) {
state.elrondAddress = elrondAddress
setMultiversxAddress(multiversxAddress: string) {
state.multiversxAddress = multiversxAddress
},
setTronAddress(tronAddress: string) {
@@ -1,43 +0,0 @@
import ElrondLib from '@/lib/ElrondLib'
export let wallet1: ElrondLib
export let wallet2: ElrondLib
export let elrondWallets: Record<string, ElrondLib>
export let elrondAddresses: string[]
let address1: string
let address2: string
/**
* Utilities
*/
export async function createOrRestoreElrondWallet() {
const mnemonic1 = localStorage.getItem('ELROND_MNEMONIC_1')
const mnemonic2 = localStorage.getItem('ELROND_MNEMONIC_2')
if (mnemonic1 && mnemonic2) {
wallet1 = await ElrondLib.init({ mnemonic: mnemonic1 })
wallet2 = await ElrondLib.init({ mnemonic: mnemonic2 })
} else {
wallet1 = await ElrondLib.init({})
wallet2 = await ElrondLib.init({})
// Don't store mnemonic in local storage in a production project!
localStorage.setItem('ELROND_MNEMONIC_1', wallet1.getMnemonic())
localStorage.setItem('ELROND_MNEMONIC_2', wallet2.getMnemonic())
}
address1 = await wallet1.getAddress()
address2 = await wallet2.getAddress()
elrondWallets = {
[address1]: wallet1,
[address2]: wallet2
}
elrondAddresses = Object.keys(elrondWallets)
return {
elrondWallets,
elrondAddresses
}
}
@@ -1,6 +1,6 @@
import { COSMOS_MAINNET_CHAINS, TCosmosChain } from '@/data/COSMOSData'
import { EIP155_CHAINS, TEIP155Chain } from '@/data/EIP155Data'
import { ELROND_CHAINS, TElrondChain } from '@/data/ElrondData'
import { MULTIVERSX_CHAINS, TMultiversxChain } from '@/data/MultiversxData'
import { NEAR_TEST_CHAINS, TNearChain } from '@/data/NEARData'
import { POLKADOT_CHAINS, TPolkadotChain } from '@/data/PolkadotData'
import { SOLANA_CHAINS, TSolanaChain } from '@/data/SolanaData'
@@ -115,10 +115,10 @@ export function isNearChain(chain: string) {
}
/**
* Check if chain is part of ELROND standard
* Check if chain is part of MULTIVERSX standard
*/
export function isElrondChain(chain: string) {
return chain.includes('elrond')
export function isMultiversxChain(chain: string) {
return chain.includes('mvx')
}
/**
@@ -142,7 +142,7 @@ export function formatChainName(chainId: string) {
return (
COSMOS_MAINNET_CHAINS[chainId as TCosmosChain]?.name ??
EIP155_CHAINS[chainId as TEIP155Chain]?.name ??
ELROND_CHAINS[chainId as TElrondChain]?.name ??
MULTIVERSX_CHAINS[chainId as TMultiversxChain]?.name ??
NEAR_TEST_CHAINS[chainId as TNearChain]?.name ??
POLKADOT_CHAINS[chainId as TPolkadotChain]?.name ??
SOLANA_CHAINS[chainId as TSolanaChain]?.name ??
@@ -1,40 +1,41 @@
import { ELROND_SIGNING_METHODS } from '@/data/ElrondData'
import { MULTIVERSX_SIGNING_METHODS } from '@/data/MultiversxData'
import { getWalletAddressFromParams } from '@/utils/HelperUtil'
import { elrondAddresses, elrondWallets } from '@/utils/ElrondWalletUtil'
import { multiversxAddresses, multiversxWallets } from '@/utils/MultiversxWalletUtil'
import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils'
import { SignClientTypes } from '@walletconnect/types'
import { getSdkError } from '@walletconnect/utils'
export async function approveElrondRequest(
export async function approveMultiversxRequest(
requestEvent: SignClientTypes.EventArguments['session_request']
) {
const { params, id } = requestEvent
const { request } = params
const account = getWalletAddressFromParams(elrondAddresses, params)
const wallet = elrondWallets[account]
const account = getWalletAddressFromParams(multiversxAddresses, params)
const wallet = multiversxWallets[account]
switch (request.method) {
case ELROND_SIGNING_METHODS.ELROND_SIGN_MESSAGE:
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_MESSAGE:
const signedMessage = await wallet.signMessage(request.params.message)
return formatJsonRpcResult(id, signedMessage)
case ELROND_SIGNING_METHODS.ELROND_SIGN_TRANSACTION:
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_TRANSACTION:
const signTransaction = request.params.transaction
// Transactions must be signed with the Sender's Private Key before submitting them to the Elrond Network.
// Transactions must be signed with the Sender's Private Key before submitting them to the MultiversX Network.
// Signing is performed with the Ed25519 algorithm.
const signature = await wallet.signTransaction(signTransaction)
return formatJsonRpcResult(id, signature)
case ELROND_SIGNING_METHODS.ELROND_SIGN_TRANSACTIONS:
// Elrond Allows for a Batch of Transactions to be signed
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_TRANSACTIONS:
// MultiversX Allows for a Batch of Transactions to be signed
const signTransactions = request.params.transactions
const signatures = await wallet.signTransactions(signTransactions)
return formatJsonRpcResult(id, signatures)
case ELROND_SIGNING_METHODS.ELROND_SIGN_LOGIN_TOKEN:
// Sometimes a dApp (and its backend) might want to reliably assign an off-chain user identity to an Elrond address.
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_LOGIN_TOKEN:
case MULTIVERSX_SIGNING_METHODS.MULTIVERSX_SIGN_NATIVE_AUTH_TOKEN:
// Sometimes a dApp (and its backend) might want to reliably assign an off-chain user identity to a MultiversX address.
// On this purpose, the signing providers allow a login token to be used within the login flow - this token is signed using the wallet of the user.
// Afterwards, a backend application would normally verify the signature of the token
const message = `${account}${request.params.token}{}`
@@ -47,7 +48,9 @@ export async function approveElrondRequest(
}
}
export function rejectElrondRequest(request: SignClientTypes.EventArguments['session_request']) {
export function rejectMultiversxRequest(
request: SignClientTypes.EventArguments['session_request']
) {
const { id } = request
return formatJsonRpcError(id, getSdkError('USER_REJECTED_METHODS').message)
@@ -0,0 +1,43 @@
import MultiversxLib from '@/lib/MultiversxLib'
export let wallet1: MultiversxLib
export let wallet2: MultiversxLib
export let multiversxWallets: Record<string, MultiversxLib>
export let multiversxAddresses: string[]
let address1: string
let address2: string
/**
* Utilities
*/
export async function createOrRestoreMultiversxWallet() {
const mnemonic1 = localStorage.getItem('MULTIVERSX_MNEMONIC_1')
const mnemonic2 = localStorage.getItem('MULTIVERSX_MNEMONIC_2')
if (mnemonic1 && mnemonic2) {
wallet1 = await MultiversxLib.init({ mnemonic: mnemonic1 })
wallet2 = await MultiversxLib.init({ mnemonic: mnemonic2 })
} else {
wallet1 = await MultiversxLib.init({})
wallet2 = await MultiversxLib.init({})
// Don't store mnemonic in local storage in a production project!
localStorage.setItem('MULTIVERSX_MNEMONIC_1', wallet1.getMnemonic())
localStorage.setItem('MULTIVERSX_MNEMONIC_2', wallet2.getMnemonic())
}
address1 = await wallet1.getAddress()
address2 = await wallet2.getAddress()
multiversxWallets = {
[address1]: wallet1,
[address2]: wallet2
}
multiversxAddresses = Object.keys(multiversxWallets)
return {
multiversxWallets,
multiversxAddresses
}
}
@@ -6,7 +6,7 @@ import ModalStore from '@/store/ModalStore'
import { cosmosAddresses } from '@/utils/CosmosWalletUtil'
import { eip155Addresses } from '@/utils/EIP155WalletUtil'
import { polkadotAddresses } from '@/utils/PolkadotWalletUtil'
import { elrondAddresses } from '@/utils/ElrondWalletUtil'
import { multiversxAddresses } from '@/utils/MultiversxWalletUtil'
import { tronAddresses } from '@/utils/TronWalletUtil'
import { tezosAddresses } from '@/utils/TezosWalletUtil'
import {
@@ -15,7 +15,7 @@ import {
isSolanaChain,
isPolkadotChain,
isNearChain,
isElrondChain,
isMultiversxChain,
isTronChain,
isTezosChain
} from '@/utils/HelperUtil'
@@ -168,10 +168,10 @@ export default function SessionProposalModal() {
chain={chain}
/>
)
} else if (isElrondChain(chain)) {
} else if (isMultiversxChain(chain)) {
return (
<ProposalSelectSection
addresses={elrondAddresses}
addresses={multiversxAddresses}
selectedAddresses={selectedAccounts[chain]}
onSelect={onSelectAccount}
chain={chain}
@@ -4,12 +4,12 @@ import RequesDetailsCard from '@/components/RequestDetalilsCard'
import RequestMethodCard from '@/components/RequestMethodCard'
import RequestModalContainer from '@/components/RequestModalContainer'
import ModalStore from '@/store/ModalStore'
import { approveElrondRequest, rejectElrondRequest } from '@/utils/ElrondRequestHandlerUtil'
import { approveMultiversxRequest, rejectMultiversxRequest } from '@/utils/MultiversxRequestHandlerUtil'
import { signClient } from '@/utils/WalletConnectUtil'
import { Button, Divider, Modal, Text } from '@nextui-org/react'
import { Fragment } from 'react'
export default function SessionSignElrondModal() {
export default function SessionSignMultiversxModal() {
// Get request and wallet data from store
const requestEvent = ModalStore.state.data?.requestEvent
const requestSession = ModalStore.state.data?.requestSession
@@ -26,7 +26,7 @@ export default function SessionSignElrondModal() {
// Handle approve action (logic varies based on request method)
async function onApprove() {
if (requestEvent) {
const response = await approveElrondRequest(requestEvent)
const response = await approveMultiversxRequest(requestEvent)
await signClient.respond({
topic,
response
@@ -38,7 +38,7 @@ export default function SessionSignElrondModal() {
// Handle reject action
async function onReject() {
if (requestEvent) {
const response = rejectElrondRequest(requestEvent)
const response = rejectMultiversxRequest(requestEvent)
await signClient.respond({
topic,
response
File diff suppressed because it is too large Load Diff