use of com.radixdlt.constraintmachine.SystemMapKey in project radixdlt by radixdlt.
the class EntityHandler method handleRequest.
@Override
public EntityResponse handleRequest(EntityRequest request) throws CoreApiException {
modelMapper.verifyNetwork(request.getNetworkIdentifier());
var entity = modelMapper.entity(request.getEntityIdentifier());
var keyQueries = entity.getKeyQueries();
var resourceQueries = entity.getResourceQueries();
// This must be read atomically
return radixEngine.read(reader -> {
Function<REAddr, String> addressToSymbol = addr -> {
var mapKey = SystemMapKey.ofResourceData(addr, SubstateTypeId.TOKEN_RESOURCE_METADATA.id());
var substate = reader.get(mapKey).orElseThrow();
var tokenResource = (TokenResourceMetadata) substate;
return tokenResource.symbol();
};
var proof = reader.getMetadata().getProof();
var response = new EntityResponse().stateIdentifier(modelMapper.stateIdentifier(proof.getAccumulatorState()));
for (var resourceQuery : resourceQueries) {
resourceQuery.fold((index, bucketPredicate) -> reader.reduceResources(index, ResourceInBucket::bucket, bucketPredicate).entrySet().stream().map(e -> modelMapper.resourceOperation(e.getKey(), e.getValue(), addressToSymbol)), systemMapKey -> reader.get(systemMapKey).map(ResourceInBucket.class::cast).stream().map(b -> modelMapper.resourceOperation(b, true, addressToSymbol))).forEach(response::addBalancesItem);
}
for (var keyQuery : keyQueries) {
var substate = keyQuery.get(reader);
substate.flatMap(modelMapper::dataObject).ifPresent(response::addDataObjectsItem);
}
return response;
});
}
use of com.radixdlt.constraintmachine.SystemMapKey in project radixdlt by radixdlt.
the class RadixEngine method construct.
private TxBuilder construct(TxBuilderExecutable executable, Set<SubstateId> avoid) throws TxBuilderException {
synchronized (stateUpdateEngineLock) {
SubstateStore filteredStore = new SubstateStore() {
@Override
public CloseableCursor<RawSubstateBytes> openIndexedCursor(SubstateIndex<?> index) {
return engineStore.openIndexedCursor(index).filter(i -> !avoid.contains(SubstateId.fromBytes(i.getId())));
}
@Override
public Optional<RawSubstateBytes> get(SystemMapKey key) {
return engineStore.get(key);
}
};
var txBuilder = TxBuilder.newBuilder(filteredStore, constraintMachine.getDeserialization(), serialization, maxMessageLen);
executable.execute(txBuilder);
return txBuilder;
}
}
Aggregations