Search in sources :

Example 1 with TokenResourceMetadata

use of com.radixdlt.application.tokens.state.TokenResourceMetadata 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 TokenResourceMetadata

use of com.radixdlt.application.tokens.state.TokenResourceMetadata in project radixdlt by radixdlt.

the class TokensConstraintScryptV3 method registerParticles.

private void registerParticles(Loader os) {
    os.substate(new SubstateDefinition<>(TokenResource.class, SubstateTypeId.TOKEN_RESOURCE.id(), buf -> {
        REFieldSerialization.deserializeReservedByte(buf);
        var addr = REFieldSerialization.deserializeResourceAddr(buf);
        var granularity = REFieldSerialization.deserializeNonZeroUInt256(buf);
        if (!granularity.equals(UInt256.ONE)) {
            throw new DeserializeException("Granularity must be one.");
        }
        var isMutable = REFieldSerialization.deserializeBoolean(buf);
        var minter = REFieldSerialization.deserializeOptionalKey(buf);
        return new TokenResource(addr, granularity, isMutable, minter.orElse(null));
    }, (s, buf) -> {
        REFieldSerialization.serializeReservedByte(buf);
        REFieldSerialization.serializeREAddr(buf, s.addr());
        REFieldSerialization.serializeUInt256(buf, UInt256.ONE);
        REFieldSerialization.serializeBoolean(buf, s.isMutable());
        REFieldSerialization.serializeOptionalKey(buf, s.optionalOwner());
    }));
    os.substate(new SubstateDefinition<>(TokenResourceMetadata.class, SubstateTypeId.TOKEN_RESOURCE_METADATA.id(), buf -> {
        REFieldSerialization.deserializeReservedByte(buf);
        var addr = REFieldSerialization.deserializeResourceAddr(buf);
        var symbol = REFieldSerialization.deserializeString(buf);
        var name = REFieldSerialization.deserializeString(buf);
        var description = REFieldSerialization.deserializeString(buf);
        var url = REFieldSerialization.deserializeUrl(buf);
        var iconUrl = REFieldSerialization.deserializeUrl(buf);
        return new TokenResourceMetadata(addr, symbol, name, description, iconUrl, url);
    }, (s, buf) -> {
        REFieldSerialization.serializeReservedByte(buf);
        REFieldSerialization.serializeREAddr(buf, s.addr());
        REFieldSerialization.serializeString(buf, s.symbol());
        REFieldSerialization.serializeString(buf, s.name());
        REFieldSerialization.serializeString(buf, s.description());
        REFieldSerialization.serializeString(buf, s.url());
        REFieldSerialization.serializeString(buf, s.iconUrl());
    }));
    os.substate(new SubstateDefinition<>(TokensInAccount.class, SubstateTypeId.TOKENS.id(), buf -> {
        REFieldSerialization.deserializeReservedByte(buf);
        var holdingAddr = REFieldSerialization.deserializeAccountREAddr(buf);
        var addr = REFieldSerialization.deserializeResourceAddr(buf);
        var amount = REFieldSerialization.deserializeNonZeroUInt256(buf);
        return new TokensInAccount(holdingAddr, addr, amount);
    }, (s, buf) -> {
        REFieldSerialization.serializeReservedByte(buf);
        REFieldSerialization.serializeREAddr(buf, s.holdingAddress());
        REFieldSerialization.serializeREAddr(buf, s.resourceAddr());
        buf.put(s.amount().toByteArray());
    }));
}
Also used : SubstateTypeId(com.radixdlt.atom.SubstateTypeId) TokenResourceMetadata(com.radixdlt.application.tokens.state.TokenResourceMetadata) Loader(com.radixdlt.atomos.Loader) REFieldSerialization(com.radixdlt.atom.REFieldSerialization) TokenResource(com.radixdlt.application.tokens.state.TokenResource) Set(java.util.Set) TokensInAccount(com.radixdlt.application.tokens.state.TokensInAccount) SubstateDefinition(com.radixdlt.atomos.SubstateDefinition) StandardCharsets(java.nio.charset.StandardCharsets) com.radixdlt.constraintmachine(com.radixdlt.constraintmachine) ResourceCreatedEvent(com.radixdlt.constraintmachine.REEvent.ResourceCreatedEvent) ReservedSymbolException(com.radixdlt.constraintmachine.exceptions.ReservedSymbolException) SystemConstraintScrypt(com.radixdlt.application.system.scrypt.SystemConstraintScrypt) ConstraintScrypt(com.radixdlt.atomos.ConstraintScrypt) ProcedureException(com.radixdlt.constraintmachine.exceptions.ProcedureException) Pattern(java.util.regex.Pattern) DeserializeException(com.radixdlt.serialization.DeserializeException) UInt256(com.radixdlt.utils.UInt256) TokenResource(com.radixdlt.application.tokens.state.TokenResource) TokenResourceMetadata(com.radixdlt.application.tokens.state.TokenResourceMetadata) TokensInAccount(com.radixdlt.application.tokens.state.TokensInAccount) DeserializeException(com.radixdlt.serialization.DeserializeException)

Aggregations

TokenResourceMetadata (com.radixdlt.application.tokens.state.TokenResourceMetadata)2 SubstateTypeId (com.radixdlt.atom.SubstateTypeId)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 SystemConstraintScrypt (com.radixdlt.application.system.scrypt.SystemConstraintScrypt)1 ResourceInBucket (com.radixdlt.application.tokens.ResourceInBucket)1 TokenResource (com.radixdlt.application.tokens.state.TokenResource)1 TokensInAccount (com.radixdlt.application.tokens.state.TokensInAccount)1 REFieldSerialization (com.radixdlt.atom.REFieldSerialization)1 ConstraintScrypt (com.radixdlt.atomos.ConstraintScrypt)1 Loader (com.radixdlt.atomos.Loader)1 SubstateDefinition (com.radixdlt.atomos.SubstateDefinition)1 com.radixdlt.constraintmachine (com.radixdlt.constraintmachine)1 ResourceCreatedEvent (com.radixdlt.constraintmachine.REEvent.ResourceCreatedEvent)1 SystemMapKey (com.radixdlt.constraintmachine.SystemMapKey)1 ProcedureException (com.radixdlt.constraintmachine.exceptions.ProcedureException)1