Exemplo n.º 1
0
def _validate_mosaic_creation(mosaic_creation: NEMMosaicCreation, network: int):
    if mosaic_creation.definition is None:
        raise ProcessError('No mosaic definition provided')
    if mosaic_creation.sink is None:
        raise ProcessError('No creation sink provided')
    if mosaic_creation.fee is None:
        raise ProcessError('No creation sink fee provided')

    if not nem.validate_address(mosaic_creation.sink, network):
        raise ProcessError('Invalid creation sink address')

    if mosaic_creation.definition.name is not None:
        raise ProcessError('Name not allowed in mosaic creation transactions')
    if mosaic_creation.definition.ticker is not None:
        raise ProcessError('Ticker not allowed in mosaic creation transactions')
    if mosaic_creation.definition.networks:
        raise ProcessError('Networks not allowed in mosaic creation transactions')

    if mosaic_creation.definition.namespace is None:
        raise ProcessError('No mosaic namespace provided')
    if mosaic_creation.definition.mosaic is None:
        raise ProcessError('No mosaic name provided')

    if mosaic_creation.definition.supply is not None and mosaic_creation.definition.divisibility is None:
        raise ProcessError('Definition divisibility needs to be provided when supply is')
    if mosaic_creation.definition.supply is None and mosaic_creation.definition.divisibility is not None:
        raise ProcessError('Definition supply needs to be provided when divisibility is')

    if mosaic_creation.definition.levy is not None:
        if mosaic_creation.definition.fee is None:
            raise ProcessError('No levy fee provided')
        if mosaic_creation.definition.levy_address is None:
            raise ProcessError('No levy address provided')
        if mosaic_creation.definition.levy_namespace is None:
            raise ProcessError('No levy namespace provided')
        if mosaic_creation.definition.levy_mosaic is None:
            raise ProcessError('No levy mosaic name provided')

        if mosaic_creation.definition.divisibility is None:
            raise ProcessError('No divisibility provided')
        if mosaic_creation.definition.supply is None:
            raise ProcessError('No supply provided')
        if mosaic_creation.definition.mutable_supply is None:
            raise ProcessError('No supply mutability provided')
        if mosaic_creation.definition.transferable is None:
            raise ProcessError('No mosaic transferability provided')
        if mosaic_creation.definition.description is None:
            raise ProcessError('No description provided')

        if mosaic_creation.definition.divisibility > NEM_MAX_DIVISIBILITY:
            raise ProcessError('Invalid divisibility provided')
        if mosaic_creation.definition.supply > NEM_MAX_SUPPLY:
            raise ProcessError('Invalid supply provided')

        if not nem.validate_address(mosaic_creation.definition.levy_address, network):
            raise ProcessError('Invalid levy address')
Exemplo n.º 2
0
def _validate_transfer(transfer: NEMTransfer, network: int):
    if transfer.recipient is None:
        raise ProcessError("No recipient provided")
    if transfer.amount is None:
        raise ProcessError("No amount provided")

    if transfer.public_key is not None:
        _validate_public_key(transfer.public_key, "Invalid recipient public key")
        if transfer.payload is None:
            raise ProcessError("Public key provided but no payload to encrypt")

    if transfer.payload:
        if len(transfer.payload) > NEM_MAX_PLAIN_PAYLOAD_SIZE:
            raise ProcessError("Payload too large")
        if (
            transfer.public_key
            and len(transfer.payload) > NEM_MAX_ENCRYPTED_PAYLOAD_SIZE
        ):
            raise ProcessError("Payload too large")

    if not nem.validate_address(transfer.recipient, network):
        raise ProcessError("Invalid recipient address")

    for m in transfer.mosaics:
        if m.namespace is None:
            raise ProcessError("No mosaic namespace provided")
        if m.mosaic is None:
            raise ProcessError("No mosaic name provided")
        if m.quantity is None:
            raise ProcessError("No mosaic quantity provided")
Exemplo n.º 3
0
    def test_validate_address(self):
        validity = nem.validate_address('NDD2CT6LQLIYQ56KIXI3ENTM6EK3D44P5JFXJ4R4', NEM_NETWORK_MAINNET)
        self.assertTrue(validity)

        validity = nem.validate_address('NCUKWDY3J3THKQHAKOK5ALF6ANJQABZHCH7VN6DP', NEM_NETWORK_MAINNET)
        self.assertTrue(validity)

        validity = nem.validate_address('TAU5HO3DRQZNELFEMZZTUKQEZGQ7IUAHKPO7OOLK', NEM_NETWORK_TESTNET)
        self.assertTrue(validity)

        validity = nem.validate_address('nope', NEM_NETWORK_TESTNET)
        self.assertFalse(validity)

        # not valid on testnet
        validity = nem.validate_address('NCUKWDY3J3THKQHAKOK5ALF6ANJQABZHCH7VN6DP', NEM_NETWORK_TESTNET)
        self.assertFalse(validity)
Exemplo n.º 4
0
def _validate_transfer(transfer: NEMTransfer, network: int):
    if transfer.recipient is None:
        raise ValueError('No recipient provided')
    if transfer.amount is None:
        raise ValueError('No amount provided')

    if transfer.public_key is not None:
        _validate_public_key(transfer.public_key,
                             'Invalid recipient public key')

    if transfer.payload:
        if len(transfer.payload) > NEM_MAX_PLAIN_PAYLOAD_SIZE:
            raise ValueError('Payload too large')
        if transfer.public_key and len(
                transfer.payload) > NEM_MAX_ENCRYPTED_PAYLOAD_SIZE:
            raise ValueError('Payload too large')

    if not nem.validate_address(transfer.recipient, network):
        raise ValueError('Invalid recipient address')

    for m in transfer.mosaics:
        if m.namespace is None:
            raise ValueError('No mosaic namespace provided')
        if m.mosaic is None:
            raise ValueError('No mosaic name provided')
        if m.quantity is None:
            raise ValueError('No mosaic quantity provided')
Exemplo n.º 5
0
def _validate_provision_namespace(provision_namespace: NEMProvisionNamespace, network: int):
    if provision_namespace.namespace is None:
        raise ProcessError('No namespace provided')
    if provision_namespace.sink is None:
        raise ProcessError('No rental sink provided')
    if provision_namespace.fee is None:
        raise ProcessError('No rental sink fee provided')

    if not nem.validate_address(provision_namespace.sink, network):
        raise ProcessError('Invalid rental sink address')
Exemplo n.º 6
0
def _validate_transfer(transfer: NEMTransfer, network: int) -> None:
    if transfer.public_key is not None:
        _validate_public_key(transfer.public_key,
                             "Invalid recipient public key")
        if not transfer.payload:
            raise ProcessError("Public key provided but no payload to encrypt")

    if transfer.payload:
        if len(transfer.payload) > NEM_MAX_PLAIN_PAYLOAD_SIZE:
            raise ProcessError("Payload too large")
        if (transfer.public_key
                and len(transfer.payload) > NEM_MAX_ENCRYPTED_PAYLOAD_SIZE):
            raise ProcessError("Payload too large")

    if not nem.validate_address(transfer.recipient, network):
        raise ProcessError("Invalid recipient address")
Exemplo n.º 7
0
def _validate_provision_namespace(provision_namespace: NEMProvisionNamespace,
                                  network: int) -> None:
    if not nem.validate_address(provision_namespace.sink, network):
        raise ProcessError("Invalid rental sink address")