Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions ocean_provider/utils/datatoken.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,9 @@ def verify_order_tx(
)

provider_initialize_timestamp = 0
provider_data = json.loads(provider_fee_order_log.args.providerData)
provider_timeout = provider_data.get("timeout")
if extra_data:
provider_data = json.loads(provider_fee_order_log.args.providerData)
if extra_data["environment"] != provider_data["environment"]:
raise AssertionError(
"Mismatch between ordered c2d environment and selected one."
Expand Down Expand Up @@ -150,6 +151,16 @@ def verify_order_tx(
event_logs = datatoken_contract.events.OrderReused().processReceipt(
tx_receipt, errors=DISCARD
)
# get the original provider fee event, to get the timeout
provider_fee_event_logs = (
datatoken_contract.events.ProviderFee().processReceipt(
tx_receipt, errors=DISCARD
)
)
if provider_fee_event_logs:
provider_data = json.loads(provider_fee_event_logs[0].args.providerData)
provider_timeout = provider_data.get("timeout")

except Exception as e:
logger.error(e)
logger.debug(f"Got events log when searching for ReuseOrder : {event_logs}")
Expand Down Expand Up @@ -214,15 +225,26 @@ def verify_order_tx(
logger.debug(
f"verify_order_tx: service timeout = {service.timeout}, timestamp delta = {timestamp_delta}"
)
if service.timeout != 0:
if timestamp_delta > service.timeout:
if provider_timeout:
if timestamp_delta > provider_timeout:
raise ValueError(
f"The order has expired. \n"
f"current timestamp={timestamp_now}\n"
f"order timestamp={log_timestamp}\n"
f"timestamp delta={timestamp_delta}\n"
f"service timeout={service.timeout}"
f"provider service timeout={provider_timeout}"
)
else:
# check ddo if there is no timeout in providerData
if service.timeout != 0:
if timestamp_delta > service.timeout:
raise ValueError(
f"The order has expired. \n"
f"current timestamp={timestamp_now}\n"
f"order timestamp={log_timestamp}\n"
f"timestamp delta={timestamp_delta}\n"
f"service timeout={service.timeout}"
)

if web3.toChecksumAddress(sender) not in [
web3.toChecksumAddress(order_log.args.consumer),
Expand Down
6 changes: 5 additions & 1 deletion ocean_provider/utils/provider_fees.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,11 @@ def get_provider_fees(
provider_fee_amount = 0

provider_data = json.dumps(
{"environment": compute_env, "timestamp": datetime.utcnow().timestamp()},
{
"environment": compute_env,
"timestamp": datetime.utcnow().timestamp(),
"timeout": service.timeout,
},
separators=(",", ":"),
)
message_hash = web3.solidityKeccak(
Expand Down