diff --git a/stack_orchestrator/deploy/webapp/deploy_webapp_from_registry.py b/stack_orchestrator/deploy/webapp/deploy_webapp_from_registry.py index 4e57659d..88137d33 100644 --- a/stack_orchestrator/deploy/webapp/deploy_webapp_from_registry.py +++ b/stack_orchestrator/deploy/webapp/deploy_webapp_from_registry.py @@ -616,6 +616,7 @@ def command( # noqa: C901 if confirm_payment( laconic, r, + lrn, payment_address, min_required_payment, main_logger, diff --git a/stack_orchestrator/deploy/webapp/util.py b/stack_orchestrator/deploy/webapp/util.py index dd3bfe96..2be1c007 100644 --- a/stack_orchestrator/deploy/webapp/util.py +++ b/stack_orchestrator/deploy/webapp/util.py @@ -798,7 +798,7 @@ def skip_by_tag(r, include_tags, exclude_tags): return False -def confirm_payment(laconic: LaconicRegistryClient, record, payment_address, min_amount, logger): +def confirm_payment(laconic: LaconicRegistryClient, record, deployer_lrn, payment_address, min_amount, logger): req_owner = laconic.get_owner(record) if req_owner == payment_address: # No need to confirm payment if the sender and recipient are the same account. @@ -846,16 +846,19 @@ def confirm_payment(laconic: LaconicRegistryClient, record, payment_address, min ) return False - # Check if the payment was already used on a + # Check if the payment was already used on a deployment used = laconic.app_deployments( - {"deployer": payment_address, "payment": tx.hash}, all=True + {"deployer": deployer_lrn, "payment": tx.hash}, all=True ) if len(used): - logger.log(f"{record.id}: payment {tx.hash} already used on deployment {used}") - return False + # Check that payment was used for deployment of same application + app_record = laconic.get_record(record.attributes.application, require=True) + if app_record.id != used[0].attributes.application: + logger.log(f"{record.id}: payment {tx.hash} already used on a different application deployment {used}") + return False used = laconic.app_deployment_removals( - {"deployer": payment_address, "payment": tx.hash}, all=True + {"deployer": deployer_lrn, "payment": tx.hash}, all=True ) if len(used): logger.log(