refactor: Elrond rebranding to MultiversX (#148)
This commit is contained in:
@@ -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 { useSnapshot } from 'valtio'
|
||||
|
||||
export default function AccountPicker() {
|
||||
@@ -16,7 +16,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])
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -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 SessionSignTypedDataModal from '@/views/SessionSignTypedDataModal'
|
||||
import SessionUnsuportedMethodModal from '@/views/SessionUnsuportedMethodModal'
|
||||
import { Modal as NextModal } from '@nextui-org/react'
|
||||
@@ -27,7 +27,7 @@ export default function Modal() {
|
||||
{view === 'SessionSignSolanaModal' && <SessionSignSolanaModal />}
|
||||
{view === 'SessionSignPolkadotModal' && <SessionSignPolkadotModal />}
|
||||
{view === 'SessionSignNearModal' && <SessionSignNearModal />}
|
||||
{view === 'SessionSignElrondModal' && <SessionSignElrondModal />}
|
||||
{view === 'SessionSignMultiversxModal' && <SessionSignMultiversxModal />}
|
||||
{view === 'AuthRequestModal' && <AuthRequestModal />}
|
||||
</NextModal>
|
||||
)
|
||||
|
||||
@@ -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 { Col, Divider, Row, Text } from '@nextui-org/react'
|
||||
import { Fragment } from 'react'
|
||||
|
||||
@@ -31,7 +31,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 ??
|
||||
chain
|
||||
)
|
||||
.join(', ')}
|
||||
|
||||
@@ -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 { formatChainName } from '@/utils/HelperUtil'
|
||||
import { Col, Row, Text } from '@nextui-org/react'
|
||||
import { SessionTypes } from '@walletconnect/types'
|
||||
@@ -15,12 +15,12 @@ import { Fragment } from 'react'
|
||||
const CHAIN_METADATA = {
|
||||
...COSMOS_MAINNET_CHAINS,
|
||||
...SOLANA_MAINNET_CHAINS,
|
||||
...ELROND_MAINNET_CHAINS,
|
||||
...MULTIVERSX_MAINNET_CHAINS,
|
||||
...EIP155_MAINNET_CHAINS,
|
||||
...EIP155_TEST_CHAINS,
|
||||
...SOLANA_TEST_CHAINS,
|
||||
...NEAR_TEST_CHAINS,
|
||||
...ELROND_TEST_CHAINS
|
||||
...MULTIVERSX_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 { formatChainName } from '@/utils/HelperUtil'
|
||||
import { Col, Row, Text } from '@nextui-org/react'
|
||||
import { ProposalTypes } from '@walletconnect/types'
|
||||
@@ -15,12 +15,12 @@ import { Fragment } from 'react'
|
||||
const CHAIN_METADATA = {
|
||||
...COSMOS_MAINNET_CHAINS,
|
||||
...SOLANA_MAINNET_CHAINS,
|
||||
...ELROND_MAINNET_CHAINS,
|
||||
...MULTIVERSX_MAINNET_CHAINS,
|
||||
...EIP155_MAINNET_CHAINS,
|
||||
...EIP155_TEST_CHAINS,
|
||||
...SOLANA_TEST_CHAINS,
|
||||
...NEAR_TEST_CHAINS,
|
||||
...ELROND_TEST_CHAINS
|
||||
...MULTIVERSX_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 { createWeb3Wallet } from '@/utils/WalletConnectUtil'
|
||||
import { useCallback, useEffect, useRef, useState } from 'react'
|
||||
import { useSnapshot } from 'valtio'
|
||||
@@ -22,14 +22,14 @@ export default function useInitialization() {
|
||||
const { solanaAddresses } = await createOrRestoreSolanaWallet()
|
||||
const { polkadotAddresses } = await createOrRestorePolkadotWallet()
|
||||
const { nearAddresses } = await createOrRestoreNearWallet()
|
||||
const { elrondAddresses } = await createOrRestoreElrondWallet()
|
||||
const { multiversxAddresses } = await createOrRestoreMultiversxWallet()
|
||||
|
||||
SettingsStore.setEIP155Address(eip155Addresses[0])
|
||||
SettingsStore.setCosmosAddress(cosmosAddresses[0])
|
||||
SettingsStore.setSolanaAddress(solanaAddresses[0])
|
||||
SettingsStore.setPolkadotAddress(polkadotAddresses[0])
|
||||
SettingsStore.setNearAddress(nearAddresses[0])
|
||||
SettingsStore.setElrondAddress(elrondAddresses[0])
|
||||
SettingsStore.setMultiversxAddress(multiversxAddresses[0])
|
||||
prevRelayerURLValue.current = relayerRegionURL
|
||||
|
||||
await createWeb3Wallet(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 ModalStore from '@/store/ModalStore'
|
||||
import { web3wallet } from '@/utils/WalletConnectUtil'
|
||||
import { SignClientTypes } from '@walletconnect/types'
|
||||
@@ -72,11 +72,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 web3wallet.respondSessionRequest({
|
||||
|
||||
+16
-14
@@ -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') }
|
||||
})
|
||||
)
|
||||
|
||||
@@ -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 SettingsStore from '@/store/SettingsStore'
|
||||
import { Text } from '@nextui-org/react'
|
||||
import { Fragment } from 'react'
|
||||
@@ -20,7 +20,7 @@ export default function HomePage() {
|
||||
solanaAddress,
|
||||
polkadotAddress,
|
||||
nearAddress,
|
||||
elrondAddress
|
||||
multiversxAddress
|
||||
} = useSnapshot(SettingsStore.state)
|
||||
|
||||
return (
|
||||
@@ -43,8 +43,8 @@ export default function HomePage() {
|
||||
{Object.values(POLKADOT_MAINNET_CHAINS).map(({ name, logo, rgb }) => (
|
||||
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={polkadotAddress} />
|
||||
))}
|
||||
{Object.values(ELROND_MAINNET_CHAINS).map(({ name, logo, rgb }) => (
|
||||
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={elrondAddress} />
|
||||
{Object.values(MULTIVERSX_MAINNET_CHAINS).map(({ name, logo, rgb }) => (
|
||||
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={multiversxAddress} />
|
||||
))}
|
||||
|
||||
{testNets ? (
|
||||
@@ -64,8 +64,8 @@ export default function HomePage() {
|
||||
{Object.values(NEAR_TEST_CHAINS).map(({ name, logo, rgb }) => (
|
||||
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={nearAddress} />
|
||||
))}
|
||||
{Object.values(ELROND_TEST_CHAINS).map(({ name, logo, rgb }) => (
|
||||
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={elrondAddress} />
|
||||
{Object.values(MULTIVERSX_TEST_CHAINS).map(({ name, logo, rgb }) => (
|
||||
<AccountCard key={name} name={name} logo={logo} rgb={rgb} address={multiversxAddress} />
|
||||
))}
|
||||
</Fragment>
|
||||
) : null}
|
||||
|
||||
@@ -4,14 +4,14 @@ 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 { Card, Divider, Row, Switch, Text } from '@nextui-org/react'
|
||||
import { Fragment } from 'react'
|
||||
import { useSnapshot } from 'valtio'
|
||||
import packageJSON from '../../package.json'
|
||||
|
||||
export default function SettingsPage() {
|
||||
const { testNets, eip155Address, cosmosAddress, solanaAddress, elrondAddress } = useSnapshot(
|
||||
const { testNets, eip155Address, cosmosAddress, solanaAddress, multiversxAddress } = useSnapshot(
|
||||
SettingsStore.state
|
||||
)
|
||||
|
||||
@@ -83,10 +83,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>
|
||||
</Fragment>
|
||||
)
|
||||
|
||||
@@ -24,7 +24,7 @@ interface State {
|
||||
| 'SessionSignSolanaModal'
|
||||
| 'SessionSignPolkadotModal'
|
||||
| 'SessionSignNearModal'
|
||||
| 'SessionSignElrondModal'
|
||||
| 'SessionSignMultiversxModal'
|
||||
| 'AuthRequestModal'
|
||||
data?: ModalData
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ interface State {
|
||||
solanaAddress: string
|
||||
polkadotAddress: string
|
||||
nearAddress: string
|
||||
elrondAddress: string
|
||||
multiversxAddress: string
|
||||
relayerRegionURL: string
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ const state = proxy<State>({
|
||||
solanaAddress: '',
|
||||
polkadotAddress: '',
|
||||
nearAddress: '',
|
||||
elrondAddress: '',
|
||||
multiversxAddress: '',
|
||||
relayerRegionURL: ''
|
||||
})
|
||||
|
||||
@@ -62,8 +62,8 @@ const SettingsStore = {
|
||||
state.relayerRegionURL = relayerRegionURL
|
||||
},
|
||||
|
||||
setElrondAddress(elrondAddress: string) {
|
||||
state.elrondAddress = elrondAddress
|
||||
setMultiversxAddress(multiversxAddress: string) {
|
||||
state.multiversxAddress = multiversxAddress
|
||||
},
|
||||
|
||||
toggleTestNets() {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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 { utils } from 'ethers'
|
||||
|
||||
/**
|
||||
@@ -111,10 +111,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')
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -126,7 +126,7 @@ export function formatChainName(chainId: string) {
|
||||
COSMOS_MAINNET_CHAINS[chainId as TCosmosChain]?.name ??
|
||||
SOLANA_CHAINS[chainId as TSolanaChain]?.name ??
|
||||
NEAR_TEST_CHAINS[chainId as TNearChain]?.name ??
|
||||
ELROND_CHAINS[chainId as TElrondChain]?.name ??
|
||||
MULTIVERSX_CHAINS[chainId as TMultiversxChain]?.name ??
|
||||
chainId
|
||||
)
|
||||
}
|
||||
|
||||
+16
-13
@@ -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,14 +6,14 @@ 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 {
|
||||
isCosmosChain,
|
||||
isEIP155Chain,
|
||||
isSolanaChain,
|
||||
isPolkadotChain,
|
||||
isNearChain,
|
||||
isElrondChain
|
||||
isMultiversxChain
|
||||
} from '@/utils/HelperUtil'
|
||||
import { solanaAddresses } from '@/utils/SolanaWalletUtil'
|
||||
import { web3wallet } from '@/utils/WalletConnectUtil'
|
||||
@@ -139,10 +139,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
-4
@@ -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 { web3wallet } 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 web3wallet.respondSessionRequest({
|
||||
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 web3wallet.respondSessionRequest({
|
||||
topic,
|
||||
response
|
||||
Reference in New Issue
Block a user