Skip to content

Commit

Permalink
Merge pull request #172 from cardano-foundation/add_unit_field
Browse files Browse the repository at this point in the history
Add unit field to multi_asset table
  • Loading branch information
Sotatek-HuyLe3a committed Apr 25, 2024
2 parents 30cbeef + 8b05736 commit a717d6e
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.cardanofoundation.ledgersync.service.impl;

import com.bloxbean.cardano.client.api.util.AssetUtil;
import com.bloxbean.cardano.client.util.HexUtil;
import com.bloxbean.cardano.yaci.core.model.Amount;
import com.google.common.collect.Lists;
Expand Down Expand Up @@ -88,9 +89,9 @@ public void handleMultiAssetMint(Collection<AggregatedTx> successTxs, Map<String
mintAssets.forEach(amount -> {
//B
String assetName = HexUtil.encodeHexString(amount.getAssetNameBytes());

String unit = amount.getUnit() != null ? amount.getUnit().replace(".", "") : null;
// Get asset entity from minted existing asset map. If not exists, create a new one
var ma = getMultiAssetByPolicyAndNameFromList(tx, mintAssetsExists, amount.getPolicyId(),
var ma = getMultiAssetByPolicyAndNameFromList(tx, mintAssetsExists, unit, amount.getPolicyId(),
amount.getAssetNameBytes(), Objects.isNull(assetName) ? EMPTY_STRING : assetName);
var supply = ma.getSupply();
var quantity = amount.getQuantity();
Expand Down Expand Up @@ -132,6 +133,7 @@ public Collection<MultiAsset> findMultiAssetsByFingerprintIn(Set<String> fingerp

private MultiAsset getMultiAssetByPolicyAndNameFromList(Tx tx,
Map<Pair<String, String>, MultiAsset> multiAssetMap,
String unit,
String policy, byte[] assetNameBytes,
String name) {
MultiAsset multiAsset = multiAssetMap.get(Pair.of(name, policy));
Expand All @@ -155,6 +157,7 @@ private MultiAsset getMultiAssetByPolicyAndNameFromList(Tx tx,
.name(name)
.nameView(nameView)
.fingerprint(fingerPrint)
.unit(unit)
.supply(BigInteger.ZERO)
.time(tx.getBlock().getTime())
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ CREATE TABLE IF NOT EXISTS multi_asset
fingerprint character varying(255) NOT NULL,
name bytea NOT NULL,
policy character varying(56) NOT NULL,
unit character varying(255),
supply numeric(23, 0),
"time" timestamp without time zone,
name_view varchar(64)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ CREATE INDEX IF NOT EXISTS redeemer_data_hash_index ON redeemer_data (hash);
CREATE INDEX IF NOT EXISTS slot_leader_hash_index ON slot_leader (hash);

CREATE INDEX IF NOT EXISTS idx_multi_asset_name_view ON multi_asset (name_view);
CREATE INDEX IF NOT EXISTS idx_multi_asset_unit ON multi_asset (unit);
CREATE UNIQUE INDEX IF NOT EXISTS multi_asset_fingerprint_uindex ON multi_asset (fingerprint);

CREATE UNIQUE INDEX IF NOT EXISTS datum_hash_uindex ON datum (hash);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ void shouldHandleNewAssetMintsSuccessfullyTest() {
AggregatedTx aggregatedTx = Mockito.mock(AggregatedTx.class);
Amount amount = Mockito.mock(Amount.class);
String policyId = "e2bab64ca481afc5a695b7db22fd0a7df4bf930158dfa652fb337999";

Mockito.when(block.getBlockNo()).thenReturn(177242L);
txMap.values().forEach(tx -> Mockito.when(tx.getBlock()).thenReturn(block));
Mockito.when(amount.getUnit()).thenReturn("e2bab64ca481afc5a695b7db22fd0a7df4bf930158dfa652fb33799953554d4d495441574152445344656669");
Mockito.when(amount.getPolicyId()).thenReturn(policyId);
Mockito.when(amount.getAssetNameBytes())
.thenReturn("SUMMITAWARDSDefi".getBytes(StandardCharsets.UTF_8));
Expand Down Expand Up @@ -129,6 +129,8 @@ void shouldHandleNewAssetMintsSuccessfullyTest() {
Assertions.assertEquals("asset132r28qxkhg0wddjjpt2qffzd9m7g37arndlxsv",
multiAsset.getFingerprint());
Assertions.assertEquals(policyId, multiAsset.getPolicy());
Assertions.assertEquals("e2bab64ca481afc5a695b7db22fd0a7df4bf930158dfa652fb33799953554d4d495441574152445344656669",
multiAsset.getUnit());
}

@Test
Expand All @@ -139,16 +141,19 @@ void shouldHandleExistingAssetMintsSuccessfullyTest() {
);
AggregatedTx aggregatedTx = Mockito.mock(AggregatedTx.class);
Amount amount = Mockito.mock(Amount.class);
String unit = "e2bab64ca481afc5a695b7db22fd0a7df4bf930158dfa652fb33799953554d4d495441574152445344656669";
String policyId = "e2bab64ca481afc5a695b7db22fd0a7df4bf930158dfa652fb337999";
String assetName = "SUMMITAWARDSDefi";
String assetFingerprint = "asset132r28qxkhg0wddjjpt2qffzd9m7g37arndlxsv";
MultiAsset existingAsset = MultiAsset.builder()
.name(HexUtil.encodeHexString(assetName.getBytes(StandardCharsets.UTF_8)))
.fingerprint(assetFingerprint)
.policy(policyId)
.unit(unit)
.supply(BigInteger.ONE)
.build();

Mockito.when(amount.getUnit()).thenReturn(unit);
Mockito.when(amount.getPolicyId()).thenReturn(policyId);
Mockito.when(amount.getAssetNameBytes()).thenReturn(assetName.getBytes(StandardCharsets.UTF_8));
Mockito.when(amount.getQuantity()).thenReturn(BigInteger.ONE);
Expand Down Expand Up @@ -181,6 +186,7 @@ void shouldHandleExistingAssetMintsSuccessfullyTest() {
Assertions.assertEquals(BigInteger.TWO, multiAsset.getSupply());
Assertions.assertEquals(assetFingerprint, multiAsset.getFingerprint());
Assertions.assertEquals(policyId, multiAsset.getPolicy());
Assertions.assertEquals(unit, multiAsset.getUnit());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
@StaticMetamodel(MultiAsset.class)
public abstract class MultiAsset_ extends org.cardanofoundation.explorer.consumercommon.entity.BaseEntity_ {

public static volatile SingularAttribute<MultiAsset, String> unit;
public static volatile SingularAttribute<MultiAsset, String> nameView;
public static volatile ListAttribute<MultiAsset, AddressToken> addressToken;
public static volatile SingularAttribute<MultiAsset, String> name;
Expand All @@ -19,6 +20,7 @@ public abstract class MultiAsset_ extends org.cardanofoundation.explorer.consume
public static volatile SingularAttribute<MultiAsset, BigInteger> supply;
public static volatile SingularAttribute<MultiAsset, String> policy;

public static final String UNIT = "unit";
public static final String NAME_VIEW = "nameView";
public static final String ADDRESS_TOKEN = "addressToken";
public static final String NAME = "name";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ public class MultiAsset extends BaseEntity {
@Column(name = "fingerprint", nullable = false)
private String fingerprint;

@Column(name = "unit")
private String unit;

@Column(name = "supply", precision = 23)
@Digits(integer = 23, fraction = 0)
private BigInteger supply;
Expand Down

0 comments on commit a717d6e

Please sign in to comment.