Search in sources :

Example 1 with SystemMapKey

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;
    });
}
Also used : SubstateTypeId(com.radixdlt.atom.SubstateTypeId) TokenResourceMetadata(com.radixdlt.application.tokens.state.TokenResourceMetadata) CoreApiException(com.radixdlt.api.core.model.CoreApiException) LedgerAndBFTProof(com.radixdlt.statecomputer.LedgerAndBFTProof) Inject(com.google.inject.Inject) RadixEngine(com.radixdlt.engine.RadixEngine) REAddr(com.radixdlt.identifiers.REAddr) Function(java.util.function.Function) ResourceInBucket(com.radixdlt.application.tokens.ResourceInBucket) CoreJsonRpcHandler(com.radixdlt.api.core.CoreJsonRpcHandler) SystemMapKey(com.radixdlt.constraintmachine.SystemMapKey) EntityResponse(com.radixdlt.api.core.openapitools.model.EntityResponse) CoreModelMapper(com.radixdlt.api.core.model.CoreModelMapper) EntityRequest(com.radixdlt.api.core.openapitools.model.EntityRequest) ResourceInBucket(com.radixdlt.application.tokens.ResourceInBucket) EntityResponse(com.radixdlt.api.core.openapitools.model.EntityResponse) REAddr(com.radixdlt.identifiers.REAddr)

Example 2 with SystemMapKey

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;
    }
}
Also used : RawSubstateBytes(com.radixdlt.constraintmachine.RawSubstateBytes) SystemMapKey(com.radixdlt.constraintmachine.SystemMapKey) SubstateStore(com.radixdlt.atom.SubstateStore) SubstateIndex(com.radixdlt.constraintmachine.SubstateIndex)

Aggregations

SystemMapKey (com.radixdlt.constraintmachine.SystemMapKey)2 Inject (com.google.inject.Inject)1 CoreJsonRpcHandler (com.radixdlt.api.core.CoreJsonRpcHandler)1 CoreApiException (com.radixdlt.api.core.model.CoreApiException)1 CoreModelMapper (com.radixdlt.api.core.model.CoreModelMapper)1 EntityRequest (com.radixdlt.api.core.openapitools.model.EntityRequest)1 EntityResponse (com.radixdlt.api.core.openapitools.model.EntityResponse)1 ResourceInBucket (com.radixdlt.application.tokens.ResourceInBucket)1 TokenResourceMetadata (com.radixdlt.application.tokens.state.TokenResourceMetadata)1 SubstateStore (com.radixdlt.atom.SubstateStore)1 SubstateTypeId (com.radixdlt.atom.SubstateTypeId)1 RawSubstateBytes (com.radixdlt.constraintmachine.RawSubstateBytes)1 SubstateIndex (com.radixdlt.constraintmachine.SubstateIndex)1 RadixEngine (com.radixdlt.engine.RadixEngine)1 REAddr (com.radixdlt.identifiers.REAddr)1 LedgerAndBFTProof (com.radixdlt.statecomputer.LedgerAndBFTProof)1 Function (java.util.function.Function)1