Skip to content

Commit

Permalink
Merge pull request #99 from bloxbean/feat_98
Browse files Browse the repository at this point in the history
Add support to search redeemer data by data hash
  • Loading branch information
satran004 committed Sep 27, 2023
2 parents 971114f + 0047edf commit 501b488
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 17 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
group = com.bloxbean.cardano
version = 0.0.13-SNAPSHOT
version = 0.0.12.1
Original file line number Diff line number Diff line change
Expand Up @@ -54,38 +54,45 @@ public List<ScriptContext> findScriptsForRedeemers(Transaction transaction, Map<
com.bloxbean.cardano.yaci.core.model.Redeemer orgRedeemer = redeemerTuple.get()._1;
com.bloxbean.cardano.client.plutus.spec.Redeemer deRedeemer = redeemerTuple.get()._2;

ScriptContext scriptContext;
if (deRedeemer.getTag() == RedeemerTag.Spend) {
ScriptContext scriptContext = findSpendScriptFromRedeemer(deRedeemer, inputs, scriptsMap)
scriptContext = findSpendScriptFromRedeemer(deRedeemer, inputs, scriptsMap)
.orElse(new ScriptContext());
scriptContext.setRedeemer(orgRedeemer.getCbor()); //set redeemer here to save serialization cost
return scriptContext;
}
if (deRedeemer.getTag() == RedeemerTag.Mint) {
} else if (deRedeemer.getTag() == RedeemerTag.Mint) {
if (log.isDebugEnabled())
log.debug("Mint tag : " + transaction.getTxHash());
//check mint policy
ScriptContext scriptContext = findMintScriptForRedeemer(deRedeemer, distinctPolicies, scriptsMap)
scriptContext = findMintScriptForRedeemer(deRedeemer, distinctPolicies, scriptsMap)
.orElse(new ScriptContext());
scriptContext.setRedeemer(orgRedeemer.getCbor());
return scriptContext;
} else if (deRedeemer.getTag() == RedeemerTag.Cert) {
if (log.isDebugEnabled())
log.debug("Redeemer Cert : " + transaction.getTxHash());
ScriptContext scriptContext = findCertScriptForRedeemer(deRedeemer, transaction.getBody().getCertificates(), scriptsMap)
scriptContext = findCertScriptForRedeemer(deRedeemer, transaction.getBody().getCertificates(), scriptsMap)
.orElse(new ScriptContext());
scriptContext.setRedeemer(orgRedeemer.getCbor());
return scriptContext;
} else if (deRedeemer.getTag() == RedeemerTag.Reward) {
if (log.isDebugEnabled())
log.info("Redeemer Reward : " + transaction.getTxHash());
ScriptContext scriptContext = findRewardScriptForRedeemer(deRedeemer, transaction, scriptsMap).orElse(new ScriptContext());
scriptContext = findRewardScriptForRedeemer(deRedeemer, transaction, scriptsMap).orElse(new ScriptContext());
scriptContext.setRedeemer(orgRedeemer.getCbor());
return scriptContext;
} else {
ScriptContext scriptContext = new ScriptContext();
scriptContext = new ScriptContext();
scriptContext.setRedeemer(orgRedeemer.getCbor());
return scriptContext;
}

//Set redeemer data and redeemer data hash
if (deRedeemer.getData() != null) {
String redeemerData = deRedeemer.getData().serializeToHex();
String redeemerDataHash = deRedeemer.getData().getDatumHash();

scriptContext.setRedeemerData(redeemerData);
scriptContext.setRedeemerDataHash(redeemerDataHash);
}

return scriptContext;

}).collect(Collectors.toList());
return scriptContexts;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public class ScriptContext {
private String redeemer;
private String datum;
private String datumHash;
private String redeemerData;
private String redeemerDataHash;

public String getScriptHash() {
if (plutusScript == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,12 @@
import com.bloxbean.cardano.yaci.store.common.util.StringUtil;
import com.bloxbean.cardano.yaci.store.events.EventMetadata;
import com.bloxbean.cardano.yaci.store.events.TransactionEvent;
import com.bloxbean.cardano.yaci.store.script.domain.Script;
import com.bloxbean.cardano.yaci.store.script.domain.ScriptType;
import com.bloxbean.cardano.yaci.store.script.domain.TxScript;
import com.bloxbean.cardano.yaci.store.script.domain.TxScriptEvent;
import com.bloxbean.cardano.yaci.store.script.domain.*;
import com.bloxbean.cardano.yaci.store.script.helper.RedeemerDatumMatcher;
import com.bloxbean.cardano.yaci.store.script.helper.ScriptContext;
import com.bloxbean.cardano.yaci.store.script.helper.ScriptUtil;
import com.bloxbean.cardano.yaci.store.script.helper.TxScriptFinder;
import com.bloxbean.cardano.yaci.store.script.storage.DatumStorage;
import com.bloxbean.cardano.yaci.store.script.storage.ScriptStorage;
import com.bloxbean.cardano.yaci.store.script.storage.TxScriptStorage;
import lombok.AllArgsConstructor;
Expand All @@ -38,6 +36,7 @@
public class ScriptRedeemerDatumProcessor {
private TxScriptStorage txScriptStorage;
private ScriptStorage scriptStorage;
private DatumStorage datumStorage;
private RedeemerDatumMatcher redeemerMatcher;
private TxScriptFinder txScriptFinder;
private ApplicationEventPublisher publisher;
Expand Down Expand Up @@ -98,6 +97,18 @@ private void handleScriptTransaction(EventMetadata metadata, Transaction transac
.build();
}).collect(Collectors.toList());

//Save redeemer data by data hash in Datum storage
if (scriptContexts != null && scriptContexts.size() > 0) {
List<Datum> redeemerDataList = scriptContexts.stream()
.filter(scriptContext -> !StringUtil.isEmpty(scriptContext.getRedeemerDataHash()))
.map(scriptContext -> new Datum(scriptContext.getRedeemerDataHash(), scriptContext.getRedeemerData(), transaction.getTxHash()))
.toList();

if (redeemerDataList.size() > 0) {
datumStorage.saveAll(redeemerDataList);
}
}

//Create TxScript entities to save
List<Script> plutusScripts = scriptsMap.values().stream()
.map(plutusScript -> Script.builder()
Expand Down

0 comments on commit 501b488

Please sign in to comment.