Skip to content

Commit

Permalink
Cardano dapp example upgraded
Browse files Browse the repository at this point in the history
  • Loading branch information
vsubhuman committed Jan 26, 2022
1 parent bea1c49 commit 60f3fde
Showing 1 changed file with 37 additions and 36 deletions.
73 changes: 37 additions & 36 deletions packages/yoroi-ergo-connector/example-cardano/index.js
Expand Up @@ -113,6 +113,31 @@ function onApiConnectied(api) {
}
}

function reduceWasmMultiasset(multiasset, reducer, initValue) {
let result = initValue;
if (multiasset) {
const policyIds = multiasset.keys();
for (let i = 0; i < policyIds.len(); i++) {
const policyId = policyIds.get(i);
const assets = multiasset.get(policyId);
const assetNames = assets.keys();
for (let j = 0; j < assetNames.len(); j++) {
const name = assetNames.get(j);
const amount = assets.get(name);
const policyIdHex = Buffer.from(policyId.to_bytes()).toString('hex');
const encodedName = Buffer.from(name.name()).toString('hex');
result = reducer(result, {
policyId: policyIdHex,
name: encodedName,
amount: amount.to_str(),
assetId: `${policyIdHex}.${encodedName}`,
});
}
}
}
return result;
}

cardanoAccessBtn.addEventListener('click', () => {
toggleSpinner('show');
const requestIdentification = cardanoAuthCheck.checked;
Expand All @@ -134,23 +159,22 @@ getAccountBalance.addEventListener('click', () => {
toggleSpinner('show')
const tokenId = '*';
cardanoApi.getBalance(tokenId).then(function(balance) {
console.log('[getBalance]', balance);
toggleSpinner('hide')
let mainBalance;
let numAssets;
let balanceJson = balance;
if (isCBOR()) {
if (tokenId !== '*') {
alertSuccess(`Asset Balance: ${balance} (asset: ${tokenId})`)
return;
}
const value = CardanoWasm.Value.from_bytes(Buffer.from(balance, 'hex'));
mainBalance = value.coin().to_str();
const ma = value.multiasset()
numAssets = ma ? ma.len() : 0;
} else {
mainBalance = balance.default;
numAssets = (balance.assets||[]).length;
balanceJson = { default: value.coin().to_str() };
balanceJson.assets = reduceWasmMultiasset(value.multiasset(), (res, asset) => {
res[asset.assetId] = asset.amount;
return res;
}, {});
}
alertSuccess(`Account Balance: ${mainBalance} (assets: ${numAssets})`)
alertSuccess(`Account Balance: ${JSON.stringify(balanceJson, null, 2)}`)
});
}
})
Expand Down Expand Up @@ -252,39 +276,16 @@ getUtxos.addEventListener('click', () => {
const txHash = Buffer.from(input.transaction_id().to_bytes()).toString('hex');
const txIndex = input.index();
const value = output.amount();
const multiasset = value.multiasset();
function parseMultiasset() {
if (!multiasset) {
return [];
}
const result = [];
const policyIds = multiasset.keys();
for (let i = 0; i < policyIds.len(); i++) {
const policyId = policyIds.get(i);
const assets = multiasset.get(policyId);
const assetNames = assets.keys();
for (let j = 0; j < assetNames.len(); j++) {
const name = assetNames.get(j);
const amount = assets.get(name);
const policyIdHex = Buffer.from(policyId.to_bytes()).toString('hex');
const encodedName = Buffer.from(name.name()).toString('hex');
result.push({
policyId: policyIdHex,
name: encodedName,
amount: amount.to_str(),
assetId: `${policyIdHex}.${encodedName}`,
});
}
}
return result;
}
return {
utxo_id: `${txHash}${txIndex}`,
tx_hash: txHash,
tx_index: txIndex,
receiver: output.address().to_bech32(),
amount: value.coin().to_str(),
assets: parseMultiasset(),
assets: reduceWasmMultiasset(value.multiasset(), (res, asset) => {
res.push(asset);
return res;
}, []),
}
})
} else {
Expand Down

0 comments on commit 60f3fde

Please sign in to comment.