It's not simple.
If you want it to be stable over a long period of time, then each player must settle at a point where they are gaining points as quickly as they are losing them.
But high ranked players will be winning more games than they are losing, simply because they'll be playing mostly against people less skilled than themselves. This fact has to be taken into consideration in terms of points awarded or taken.
If the numbers balance, then you get a transaction system, where players are essentially winning points off one another. However, new players won't have any points to give up when they lose... so that doesn't work.
If the numbers don't balance, then the ladder as a whole *can* lose or accumulate points over time, where players all sail towards level 100, or puddle together in level 1.
A second problem is that if a player is at a low level, does it mean they are bad, or does it mean they haven't played many games? Or are they actually a highly skilled player who is starting anew?
What this uncertainty means is that we can't decide how many points to award/take based solely on comparing player levels. We have to actively estimate the player's skill independently of what level they're currently at. This is crucial for a stable ladder.
The final factor is that a level has to have some statistical meaning in order to calibrate the whole ladder. eg, What win% do we expect a level 60 player to have against level 50 opponents?
I've made a couple of ladder systems myself, but it's hard to describe exactly how they work. The core of each of them is to consider these parts:
(i) to award points based on expected
(ii) expected win% is determined by estimating player skills,
(iii) estimated player skill is more mobile than player level, and is nudged up or down depending on the the relative skill of opponents we win/lose against.
(iv) estimated player skill should make use of the statistical calibration I mentioned above.