Skip to content
Merged
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
26 changes: 24 additions & 2 deletions internal/migrations/001-common-actions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ CREATE OR REPLACE ACTION create_streams(
) PUBLIC {
-- ===== FEE COLLECTION WITH ROLE EXEMPTION =====
$lower_caller TEXT := LOWER(@caller);
$fee_total NUMERIC(78, 0) := 0::NUMERIC(78, 0);
$fee_recipient TEXT := NULL;
$leader_hex TEXT := NULL;

-- Get stream count (used for both fee calculation and validation)
$num_streams INT := array_length($stream_ids);
Expand All @@ -77,15 +80,21 @@ CREATE OR REPLACE ACTION create_streams(
$fee_per_stream := 2000000000000000000::NUMERIC(78, 0); -- 2 TRUF with 18 decimals
$total_fee := $fee_per_stream * $num_streams::NUMERIC(78, 0);

IF @leader_sender IS NULL {
ERROR('Leader address not available for fee transfer');
}
$leader_hex := encode(@leader_sender, 'hex')::TEXT;

$caller_balance := ethereum_bridge.balance(@caller);

IF $caller_balance < $total_fee {
-- Derive human-readable fee from $total_fee
ERROR('Insufficient balance for stream creation. Required: ' || ($total_fee / 1000000000000000000::NUMERIC(78, 0))::TEXT || ' TRUF for ' || $num_streams::TEXT || ' stream(s)');
}

$leader_addr TEXT := encode(@leader_sender, 'hex')::TEXT;
ethereum_bridge.transfer($leader_addr, $total_fee);
ethereum_bridge.transfer($leader_hex, $total_fee);
$fee_total := $total_fee;
$fee_recipient := '0x' || $leader_hex;
}
-- ===== END FEE COLLECTION =====

Expand Down Expand Up @@ -288,6 +297,12 @@ CREATE OR REPLACE ACTION create_streams(
JOIN data_providers dp ON dp.address = $data_provider
JOIN streams s ON s.data_provider_id = dp.id AND s.stream_id = t.stream_id;

record_transaction_event(
1,
$fee_total,
$fee_recipient,
NULL
);
};


Expand Down Expand Up @@ -376,6 +391,13 @@ CREATE OR REPLACE ACTION insert_metadata(
$current_block,
$stream_ref
);

record_transaction_event(
7,
0::NUMERIC(78, 0),
NULL,
NULL
);
};

/**
Expand Down
22 changes: 19 additions & 3 deletions internal/migrations/003-primitive-insertion.sql
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ CREATE OR REPLACE ACTION insert_records(
-- Use helper function to avoid expensive for-loop roundtrips
$data_provider := helper_lowercase_array($data_provider);
$lower_caller TEXT := LOWER(@caller);
$fee_total NUMERIC(78, 0) := 0::NUMERIC(78, 0);
$fee_recipient TEXT := NULL;
$leader_hex TEXT := NULL;

-- Get record count (used for both fee calculation and validation)
$num_records INT := array_length($data_provider);
Expand All @@ -49,15 +52,21 @@ CREATE OR REPLACE ACTION insert_records(
$fee_per_record := 2000000000000000000::NUMERIC(78, 0); -- 2 TRUF with 18 decimals
$total_fee := $fee_per_record * $num_records::NUMERIC(78, 0);

IF @leader_sender IS NULL {
ERROR('Leader address not available for fee transfer');
}
$leader_hex := encode(@leader_sender, 'hex')::TEXT;

$caller_balance := ethereum_bridge.balance(@caller);

IF $caller_balance < $total_fee {
-- Derive human-readable fee from $total_fee
ERROR('Insufficient balance for write fee. Required: ' || ($total_fee / 1000000000000000000::NUMERIC(78, 0))::TEXT || ' TRUF for ' || $num_records::TEXT || ' record(s)');
}

$leader_addr TEXT := encode(@leader_sender, 'hex')::TEXT;
ethereum_bridge.transfer($leader_addr, $total_fee);
ethereum_bridge.transfer($leader_hex, $total_fee);
$fee_total := $total_fee;
$fee_recipient := '0x' || $leader_hex;
}
-- ===== END FEE COLLECTION =====
if $num_records != array_length($stream_id) or $num_records != array_length($event_time) or $num_records != array_length($value) {
Expand Down Expand Up @@ -102,4 +111,11 @@ CREATE OR REPLACE ACTION insert_records(
$event_time,
$value
);
};

record_transaction_event(
2,
$fee_total,
$fee_recipient,
NULL
);
};
20 changes: 18 additions & 2 deletions internal/migrations/004-composed-taxonomy.sql
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ CREATE OR REPLACE ACTION insert_taxonomy(
$child_data_providers[$i] := LOWER($child_data_providers[$i]);
}
$lower_caller := LOWER(@caller);
$fee_total NUMERIC(78, 0) := 0::NUMERIC(78, 0);
$fee_recipient TEXT := NULL;
$leader_hex TEXT := NULL;

-- ensure it's a composed stream
if is_primitive_stream($data_provider, $stream_id) == true {
Expand Down Expand Up @@ -56,15 +59,21 @@ CREATE OR REPLACE ACTION insert_taxonomy(
$fee_per_stream := 2000000000000000000::NUMERIC(78, 0); -- 2 TRUF with 18 decimals
$total_fee := $fee_per_stream * $num_children::NUMERIC(78, 0);

IF @leader_sender IS NULL {
ERROR('Leader address not available for fee transfer');
}
$leader_hex := encode(@leader_sender, 'hex')::TEXT;

$caller_balance := ethereum_bridge.balance(@caller);

IF $caller_balance < $total_fee {
-- Derive human-readable fee from $total_fee
ERROR('Insufficient balance for taxonomies creation. Required: ' || ($total_fee / 1000000000000000000::NUMERIC(78, 0))::TEXT || ' TRUF for ' || $num_children::TEXT || ' child stream(s)');
}

$leader_addr TEXT := encode(@leader_sender, 'hex')::TEXT;
ethereum_bridge.transfer($leader_addr, $total_fee);
ethereum_bridge.transfer($leader_hex, $total_fee);
$fee_total := $total_fee;
$fee_recipient := '0x' || $leader_hex;
}
-- ===== END FEE COLLECTION =====

Expand Down Expand Up @@ -113,6 +122,13 @@ CREATE OR REPLACE ACTION insert_taxonomy(
$child_stream_ref
);
}

record_transaction_event(
3,
$fee_total,
$fee_recipient,
NULL
);
};

/**
Expand Down
Loading
Loading