Skip to content

Commit

Permalink
feat(all): use latest stable cardano-js-sdk
Browse files Browse the repository at this point in the history
  • Loading branch information
mchappell committed May 26, 2023
2 parents 81551bf + bde4254 commit 00d198d
Show file tree
Hide file tree
Showing 33 changed files with 160 additions and 284 deletions.
2 changes: 2 additions & 0 deletions apps/browser-extension-wallet/.env.defaults
Expand Up @@ -48,3 +48,5 @@ CEXPLORER_URL_MAINNET=https://cexplorer.io
CEXPLORER_URL_PREVIEW=https://preview.cexplorer.io
CEXPLORER_URL_PREPROD=https://preprod.cexplorer.io
CEXPLORER_URL_TESTNET=https://testnet.cexplorer.io

USE_DEV_ENDPOINTS=true
12 changes: 6 additions & 6 deletions apps/browser-extension-wallet/package.json
Expand Up @@ -30,12 +30,12 @@
"homepage": "https://github.com/input-output-hk/wallet-world/blob/master/apps/browser-extension-wallet/README.md",
"dependencies": {
"@ant-design/icons": "^4.7.0",
"@cardano-sdk/core": "~0.10.0",
"@cardano-sdk/dapp-connector": "~0.8.0",
"@cardano-sdk/input-selection": "~0.9.0",
"@cardano-sdk/util": "~0.8.2",
"@cardano-sdk/wallet": "~0.10.0",
"@cardano-sdk/web-extension": "~0.8.2",
"@cardano-sdk/core": "~0.11.0",
"@cardano-sdk/dapp-connector": "~0.9.0",
"@cardano-sdk/input-selection": "~0.9.1",
"@cardano-sdk/util": "~0.9.0",
"@cardano-sdk/wallet": "~0.11.0",
"@cardano-sdk/web-extension": "~0.9.0",
"@emurgo/cip14-js": "~3.0.1",
"@koralabs/handles-public-api-interfaces": "^1.6.6",
"@light-wallet/cardano": "0.1.0",
Expand Down
Expand Up @@ -30,7 +30,7 @@ export const mockServer = createGenericMockServer((handler) => async (req, res)

describe('HandleProvider', () => {
it('should resolve a handle', async () => {
const { serverUrl, closeMock } = await mockServer(() => ({
const { serverUrl, closeMock } = await mockServer(async () => ({
body: bobHandle
}));
const provider = new KoraLabsHandleProvider({
Expand All @@ -48,7 +48,7 @@ describe('HandleProvider', () => {
});

it('should resolve multiple handles', async () => {
const { serverUrl, closeMock } = await mockServer((req) =>
const { serverUrl, closeMock } = await mockServer(async (req) =>
req.url === '/handles/bob' ? { body: bobHandle } : { body: aliceHandle }
);
const provider = new KoraLabsHandleProvider({
Expand All @@ -62,7 +62,7 @@ describe('HandleProvider', () => {
});

it('should get ok health check', async () => {
const { serverUrl, closeMock } = await mockServer(() => ({
const { serverUrl, closeMock } = await mockServer(async () => ({
body: { ok: true }
}));
const provider = new KoraLabsHandleProvider({
Expand Down
Expand Up @@ -52,7 +52,7 @@ export const ConfirmTransaction = withAddressBookContext((): React.ReactElement

const [hasInsufficientFunds, setInsufficientFunds] = useState(false);
const [tx, setTx] = useState<Wallet.Cardano.Tx>();
const assets = useObservable<TokenInfo | null>(inMemoryWallet.assets$);
const assets = useObservable<TokenInfo | null>(inMemoryWallet.assetInfo$);
const availableBalance = useObservable(inMemoryWallet.balance.utxo.available$);
const [errorMessage, setErrorMessage] = useState<string>();
const [redirectToSignFailure] = useRedirection(dAppRoutePaths.dappTxSignFailure);
Expand Down
Expand Up @@ -27,7 +27,7 @@ export const NftDetail = (): React.ReactElement => {
const [redirectToNfts] = useRedirection(walletRoutePaths.nfts);
const [redirectToSend] = useRedirection<{ params: { id?: string } }>(walletRoutePaths.send);
const { id } = useParams<{ id: string }>();
const assetsInfo = useObservable(inMemoryWallet.assets$);
const assetsInfo = useObservable(inMemoryWallet.assetInfo$);
const setSendInitialState = useOutputInitialState();

const assetId = Wallet.Cardano.AssetId(id);
Expand Down
Expand Up @@ -36,7 +36,7 @@ export const Nfts = withNftsFoldersContext((): React.ReactElement => {
const [selectedFolderId, setSelectedFolderId] = useState<number | undefined>();
const { walletInfo, inMemoryWallet } = useWalletStore();
const { t } = useTranslation();
const assetsInfo = useObservable(inMemoryWallet.assets$);
const assetsInfo = useObservable(inMemoryWallet.assetInfo$);
const assetsBalance = useObservable(inMemoryWallet.balance.utxo.total$, DEFAULT_WALLET_BALANCE.utxo.total$);
const analytics = useAnalyticsContext();
const { fiatCurrency } = useCurrencyStore();
Expand Down
2 changes: 1 addition & 1 deletion apps/browser-extension-wallet/src/hooks/useInitializeTx.ts
Expand Up @@ -45,7 +45,7 @@ export const useInitializeTx = (
walletUI: { cardanoCoin }
} = useWalletStore();
const { outputs, metadata, hasInvalidOutputs } = txProps;
const assetsInfo = useObservable(inMemoryWallet.assets$);
const assetsInfo = useObservable(inMemoryWallet.assetInfo$);
const balance = useObservable(inMemoryWallet.balance.utxo.total$);
const tokensUsed = useSpentBalances();
const spendableCoin = useMaxAda();
Expand Down
@@ -1,4 +1,4 @@
import { runtime } from 'webextension-polyfill';
import { runtime, storage as webStorage } from 'webextension-polyfill';
import { of } from 'rxjs';
import { getProviders } from './config';
import { SingleAddressWallet, storage } from '@cardano-sdk/wallet';
Expand Down Expand Up @@ -46,7 +46,7 @@ const storesFactory: StoresFactory = {

const walletManager = new WalletManagerWorker(
{ walletName: process.env.WALLET_NAME },
{ logger, runtime, storesFactory, walletFactory }
{ logger, runtime, storesFactory, walletFactory, managerStorage: webStorage.local }
);

exposeApi(
Expand Down
Expand Up @@ -8,7 +8,7 @@ const getAssets = async (
{ get }: ZustandHandlers<AssetDetailsSlice & WalletInfoSlice & BlockchainProviderSlice>
) => {
const wallet = get().inMemoryWallet;
const walletAssets = await firstValueFrom(wallet.assets$);
const walletAssets = await firstValueFrom(wallet.assetInfo$);
return getAssetsInformation(assetIds, walletAssets, {
assetProvider: get().blockchainProvider.assetProvider,
extraData: {
Expand Down
Expand Up @@ -57,7 +57,7 @@ const getTransactionDetail =
const { tx, status, direction, type } = get().transactionDetail;
const { chainHistoryProvider, stakePoolProvider, assetProvider } = get().blockchainProvider;
const wallet = get().inMemoryWallet;
const walletAssets = await firstValueFrom(wallet.assets$);
const walletAssets = await firstValueFrom(wallet.assetInfo$);
const [{ address, rewardAccount }] = await firstValueFrom(wallet.addresses$);
const protocolParameters = await firstValueFrom(wallet.protocolParameters$);
set({ fetchingTransactionInfo: true });
Expand Down Expand Up @@ -90,8 +90,8 @@ const getTransactionDetail =
const blocks = txBlock ? blockTransformer(txBlock) : undefined;

// Metadata
const txMetadata = !isEmpty(tx.auxiliaryData?.body?.blob)
? transactionMetadataTransformer(tx.auxiliaryData.body.blob)
const txMetadata = !isEmpty(tx.auxiliaryData?.blob)
? transactionMetadataTransformer(tx.auxiliaryData.blob)
: undefined;

// Transaction Costs
Expand Down
Expand Up @@ -77,9 +77,9 @@ const getWalletActivitiesObservable = async ({
assetDetails,
blockchainProvider: { assetProvider }
} = get();
const { transactions, eraSummaries$, protocolParameters$, assets$ } = inMemoryWallet;
const { transactions, eraSummaries$, protocolParameters$, assetInfo$ } = inMemoryWallet;
const protocolParameters = await firstValueFrom(protocolParameters$);
const walletAssets = await firstValueFrom(assets$);
const walletAssets = await firstValueFrom(assetInfo$);
const historicalTransactions$ = transactions.history$;
const pendingTransactions$ = transactions.outgoing.inFlight$;

Expand Down
2 changes: 1 addition & 1 deletion apps/browser-extension-wallet/src/utils/is-nft.ts
@@ -1,3 +1,3 @@
import { Wallet } from '@light-wallet/cardano';

export const isNFT = (assetInfo: Wallet.Asset.AssetInfo): boolean => assetInfo?.quantity === BigInt(1);
export const isNFT = (assetInfo: Wallet.Asset.AssetInfo): boolean => assetInfo?.supply === BigInt(1);
19 changes: 10 additions & 9 deletions apps/browser-extension-wallet/src/utils/mocks/test-helpers.tsx
Expand Up @@ -100,7 +100,7 @@ export const mockInMemoryWallet = {
slot: 1
}
}),
assets$: of([])
assetInfo$: of([])
} as unknown as Wallet.ObservableWallet;

export const mockWalletUI = {
Expand Down Expand Up @@ -195,7 +195,7 @@ export const mockAssetMetadata: Wallet.Asset.AssetInfo = {
],
name: Wallet.Cardano.AssetName('54534c41'),
policyId: Wallet.Cardano.PolicyId('659f2917fb63f12b33667463ee575eeac1845bbc736b9c0bbc40ba82'),
quantity: BigInt('1000')
supply: BigInt('1000')
};

export const mockDisplayedCoins: DisplayedCoinDetail[] = [
Expand Down Expand Up @@ -323,8 +323,9 @@ export const mockAsset: Wallet.Asset.AssetInfo = {
fingerprint: Wallet.Cardano.AssetFingerprint('asset1cvmyrfrc7lpht2hcjwr9lulzyyjv27uxh3kcz0'),
name: Wallet.Cardano.AssetName('54657374636f696e'),
policyId: Wallet.Cardano.PolicyId('6b8d07d69639e9413dd637a1a815a7323c69c86abbafb66dbfdb1aa7'),
quantity: BigInt('100042'),
supply: BigInt('100042'),
tokenMetadata: {
assetId: Wallet.Cardano.AssetId('6b8d07d69639e9413dd637a1a815a7323c69c86abbafb66dbfdb1aa7'),
decimals: undefined,
desc: 'Testcoin crypto powered by Cardano testnet.',
icon: undefined,
Expand All @@ -346,8 +347,9 @@ export const mockNft: Wallet.Asset.AssetInfo = {
fingerprint: Wallet.Cardano.AssetFingerprint('asset1pkpwyknlvul7az0xx8czhl60pyel45rpje4z8w'),
name: Wallet.Cardano.AssetName('54534c41'),
policyId: Wallet.Cardano.PolicyId('659f2917fb63f12b33667463ee575eeac1845bbc736b9c0bbc40ba82'),
quantity: BigInt(1),
supply: BigInt(1),
tokenMetadata: {
assetId: Wallet.Cardano.AssetId('659f2917fb63f12b33667463ee575eeac1845bbc736b9c0bbc40ba8254534c41'),
decimals: undefined,
desc: 'Mock NFT',
icon: undefined,
Expand All @@ -362,10 +364,10 @@ export const mockNft: Wallet.Asset.AssetInfo = {
}
],
nftMetadata: {
image: [Wallet.Asset.Uri('ipfs://asd.io')],
image: Wallet.Asset.Uri('ipfs://asd.io'),
name: 'NFT #123456',
version: '2',
description: ['NFT MOCK']
description: 'NFT MOCK'
}
};

Expand All @@ -384,9 +386,7 @@ export const transactionMock: {
},
txSize: 297,
auxiliaryData: {
body: {
blob: new Map()
}
blob: new Map()
},
blockHeader: {
hash: Wallet.Cardano.BlockId('96fbe9b0d4930626fc87ea7f1b6360035e9b8a714e9514f1b836190e95edd59e'),
Expand Down Expand Up @@ -472,6 +472,7 @@ export const formatTransaction = {

export const assetProviderMock: Wallet.AssetProvider = {
getAsset: () => fakeApiRequest(mockAsset),
getAssets: () => fakeApiRequest([mockAsset]),
healthCheck: () => Promise.resolve({ ok: true })
};

Expand Down
Expand Up @@ -147,7 +147,7 @@ export const Assets = ({ topSection }: AssetsProps): React.ReactElement => {

const total = useObservable(inMemoryWallet.balance.utxo.total$);
const rewards = useObservable(inMemoryWallet.balance.rewardAccounts.rewards$);
const assetsInfo = useObservable(inMemoryWallet.assets$);
const assetsInfo = useObservable(inMemoryWallet.assetInfo$);

const openSend = () => {
analytics.sendEvent({
Expand Down Expand Up @@ -276,7 +276,8 @@ export const Assets = ({ topSection }: AssetsProps): React.ReactElement => {

// TODO: refactor so we can use `getTokenList` [LW-6496]
if (hasTokens) {
for (const [assetId] of total.assets) {
for (const [assetId, assetBalance] of total.assets) {
if (assetBalance <= 0) return;
const asset = getTransformedAsset(assetId, false);
if (asset) tokens.push(asset);
}
Expand Down
Expand Up @@ -30,7 +30,7 @@ export const AssetPicker = ({
}: AssetPickerProps): React.ReactElement => {
const { t } = useTranslation();
const { inMemoryWallet, environmentName } = useWalletStore();
const assets = useObservable(inMemoryWallet.assets$);
const assets = useObservable(inMemoryWallet.assetInfo$);
const balance = useObservable(inMemoryWallet.balance.utxo.total$);
const { fiatCurrency } = useCurrencyStore();

Expand Down
Expand Up @@ -31,7 +31,7 @@ export const NftsList = ({
}: NftsListProps): React.ReactElement => {
const { t } = useTranslation();
const { inMemoryWallet, environmentName } = useWalletStore();
const assetsInfo = useObservable(inMemoryWallet.assets$);
const assetsInfo = useObservable(inMemoryWallet.assetInfo$);
const balance = useObservable(inMemoryWallet.balance.utxo.total$);
const nftsIds = useMemo(() => nfts?.map(({ assetId }) => assetId), [nfts]);
const { fiatCurrency } = useCurrencyStore();
Expand Down
Expand Up @@ -40,7 +40,7 @@ export const NftsLayout = withNftsFoldersContext((): React.ReactElement => {
const { walletInfo, inMemoryWallet, blockchainProvider, environmentName } = useWalletStore();
const [selectedFolderId, setSelectedFolderId] = useState<number | undefined>();
const { t } = useTranslation();
const assetsInfo = useObservable(inMemoryWallet.assets$);
const assetsInfo = useObservable(inMemoryWallet.assetInfo$);
const assetsBalance = useObservable(inMemoryWallet.balance.utxo.total$, DEFAULT_WALLET_BALANCE.utxo.total$);
const total = useObservable(inMemoryWallet.balance.utxo.total$);
const analytics = useAnalyticsContext();
Expand Down
Expand Up @@ -132,7 +132,7 @@ export const AssetPicker = ({ isPopupView }: AssetPickerProps): React.ReactEleme
environmentName
} = useWalletStore();
const [row] = useCurrentRow();
const assets = useObservable(inMemoryWallet.assets$);
const assets = useObservable(inMemoryWallet.assetInfo$);
const { priceResult } = useFetchCoinPrice();
const balance = useObservable(inMemoryWallet.balance.utxo.total$);
const availableRewards = useObservable(inMemoryWallet.balance.rewardAccounts.rewards$);
Expand Down
Expand Up @@ -113,7 +113,7 @@ export const CoinInput = ({
const [currentRow] = useCurrentRow();
const currentCoinToChange = useCurrentCoinIdToChange();
const onBlurErrors = new Set([COIN_SELECTION_ERRORS.BUNDLE_AMOUNT_IS_EMPTY]);
const isEmptyAssets = [...assets?.keys()].length === 0;
const isEmptyAssets = !!assetBalances && assetBalances?.size === 0;
const { setLastFocusedInput } = useLastFocusedInput();
const { fiatCurrency } = useCurrencyStore();

Expand Down Expand Up @@ -230,6 +230,7 @@ export const CoinInput = ({
assetInfo?.fingerprint.toString();

const bigintBalance = assetBalances?.get(Wallet.Cardano.AssetId(item.id)) || BigInt(0);

// convert tokens to bigint so we can ignore the decimal places for calculation
const bigintUsedTokens = Wallet.util.assetBalanceToBigInt(tokensUsed[id] || '0', assetInfo);
const bigintItemValue = Wallet.util.assetBalanceToBigInt(item?.value || '0', assetInfo);
Expand Down
Expand Up @@ -142,7 +142,7 @@ export const Form = ({

const { ids, uiOutputs, setNewOutput, removeExistingOutput } = useOutputs();
const handleRemoveRow = (id: string) => removeExistingOutput(id);
const isEmptyAssets = assets?.size === 0;
const isEmptyAssets = assetBalances?.size === 0;

const handleAddRow = () => {
const nextBundleId = getNextBundleCoinId(spendableCoin?.toString(), assetBalances, tokensUsed, assets, cardanoCoin);
Expand Down Expand Up @@ -190,8 +190,9 @@ export const Form = ({

return (
(!reachedMaxAmountList.has(cardanoAssetId) && !assetsIdsUsedInOutput.has(cardanoAssetId)) ||
(assets?.size &&
[...assets].some(
(!!balance?.assets?.size &&
balance?.assets &&
[...balance.assets].some(
([id]) => !reachedMaxAmountList.has(id.toString()) && !assetsIdsUsedInOutput.has(id.toString())
))
);
Expand Down
Expand Up @@ -27,7 +27,7 @@ export const TransactionForm = ({ isPopupView }: TransactionFormProps): React.Re
const toggleisTransitionAcknowledgmentDialog = () =>
setIsTransitionAcknowledgmentDialogVisible(!isTransitionAcknowledgmentDialogVisible);

const assets = useObservable(inMemoryWallet.assets$);
const assets = useObservable(inMemoryWallet.assetInfo$);
const balance = useObservable(inMemoryWallet.balance.utxo.total$);
const availableRewards = useObservable(inMemoryWallet.balance.rewardAccounts.rewards$);

Expand Down
Expand Up @@ -111,7 +111,7 @@ export const SendTransactionSummary = withAddressBookContext(
const analytics = useAnalyticsContext();
const { fiatCurrency } = useCurrencyStore();

const assetsInfo = useObservable(inMemoryWallet.assets$);
const assetsInfo = useObservable(inMemoryWallet.assetInfo$);

const outputSummaryListTranslation = {
recipientAddress: t('core.outputSummaryList.recipientAddress'),
Expand Down
4 changes: 0 additions & 4 deletions apps/browser-extension-wallet/webpack.common.js
Expand Up @@ -18,10 +18,6 @@ module.exports = () => ({
},
module: {
rules: [
{
test: /\.node$/,
loader: 'node-loader'
},
{
test: /\.(js|jsx|ts|tsx)$/,
exclude: /node_modules\/(?!(@cardano-sdk)\/).*/,
Expand Down
6 changes: 3 additions & 3 deletions apps/desktop/package.json
Expand Up @@ -57,9 +57,9 @@
},
"homepage": "",
"dependencies": {
"@cardano-sdk/core": "~0.10.0",
"@cardano-sdk/key-management": "~0.5.0",
"@cardano-sdk/wallet": "~0.10.0",
"@cardano-sdk/core": "~0.11.0",
"@cardano-sdk/key-management": "~0.5.1",
"@cardano-sdk/wallet": "~0.11.0",
"@emurgo/cardano-message-signing-browser": "1.0.1",
"@emurgo/cardano-serialization-lib-browser": "11.0.5",
"@light-wallet/browser-extension-wallet": "1.1.0",
Expand Down
11 changes: 4 additions & 7 deletions apps/desktop/src/renderer/features/dapps/cip30/mappers.ts
@@ -1,17 +1,14 @@
import { CML, Cardano, cmlToCore } from '@cardano-sdk/core';
import { CML, Cardano, Transaction } from '@cardano-sdk/core';
import { Cbor } from '@cardano-sdk/dapp-connector';
import { usingAutoFree } from '@cardano-sdk/util';
import { HexBlob, usingAutoFree } from '@cardano-sdk/util';

export const cborToAddress = (address: Cbor) =>
usingAutoFree((scope) =>
Cardano.PaymentAddress(scope.manage(CML.Address.from_bytes(Buffer.from(address, 'hex'))).to_bech32())
);

export const cborToCoreTx = (tx: Cbor) =>
usingAutoFree((scope) => {
const cslTx = scope.manage(CML.Transaction.from_bytes(Buffer.from(tx, 'hex')));
return cmlToCore.newTx(cslTx);
});
// eslint-disable-next-line new-cap
export const cborToCoreTx = (tx: Cbor) => Transaction.fromCbor(HexBlob(tx)).toCore();

export const cborToBuiltTxData = (tx: Cbor, changeAddress: Cardano.PaymentAddress) => {
const { body, id } = cborToCoreTx(tx);
Expand Down
4 changes: 0 additions & 4 deletions apps/desktop/webpack.common.js
Expand Up @@ -27,10 +27,6 @@ module.exports = () => ({
},
module: {
rules: [
{
test: /\.node$/,
loader: 'node-loader',
},
{
test: /\.(js|jsx|ts|tsx)$/,
exclude: /node_modules\/(?!(@cardano-sdk)\/).*/,
Expand Down
1 change: 0 additions & 1 deletion package.json
Expand Up @@ -146,7 +146,6 @@
"lint-staged": "^11.1.2",
"madr-tools": "^1.0.0",
"markdownlint-cli": "^0.31.1",
"node-loader": "^2.0.0",
"node-sass": "^7.0.1",
"p-retry": "5.1.2",
"postcss": "8.3.6",
Expand Down

0 comments on commit 00d198d

Please sign in to comment.