Packages
forge_sdk
1.0.3
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.7
1.0.6
1.0.4
1.0.4-p1
1.0.4-p0
1.0.3
1.0.2
1.0.2-p1
1.0.1
1.0.1-p1
1.0.0
0.40.6
0.40.5
0.40.4
0.40.3
0.40.2
0.40.1
0.40.0
0.39.1
0.39.0
0.38.6
0.38.5
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.5
0.37.4
0.37.3
0.37.2
0.37.1
0.37.0
0.34.0
0.33.2
0.33.1
0.33.0
0.32.2
0.32.1
0.32.0
0.31.1
0.31.0
0.30.0
0.29.1
0.29.0
0.28.3
0.28.2
0.28.1
0.28.0
0.27.4
0.27.3
0.27.2
0.27.1
0.27.0
0.26.6
0.26.5
0.26.4
0.26.3
0.26.1
0.26.0
Elixir / Erlang version of the SDK for Forge framework.
Current section
Files
Jump to
Current section
Files
lib/forge_sdk/version.ex
defmodule ForgeSdk.Version do
@moduledoc """
Check if forge version is upgradable
"""
@doc """
Check if the version being upgraded is valid or not.
* :match - could upgrade without sending UpgradeNodeTx
* :allow - allow upgrade
* :deny - do not allow upgrade
* :invalid - the new version is not a valid version
Examples:
iex> ForgeSdk.Version.check("0.1.0", "0.1.100")
:allow
iex> ForgeSdk.Version.check("1.2.0", "1.2.100-p3")
:allow
iex> ForgeSdk.Version.check("1.2.2", "1.2.1-p3")
:deny
iex> ForgeSdk.Version.check("0.5.0", "0.5.0-p2")
:match
iex> ForgeSdk.Version.check("1.2.3-p50", "1.2.3-p2")
:match
iex> ForgeSdk.Version.check("1.1.1", "1.2.1")
:deny
iex> ForgeSdk.Version.check("1.1.1", "1.2.1-p1")
:deny
iex> ForgeSdk.Version.check("1.1.1", "1.2.0")
:allow
iex> ForgeSdk.Version.check("1.2.100-p1", "1.3.0")
:allow
iex> ForgeSdk.Version.check("2.3.0", "3.0.1")
:deny
iex> ForgeSdk.Version.check("2.3.0", "3.1.0")
:deny
iex> ForgeSdk.Version.check("2.3.0", "3.1.1")
:deny
iex> ForgeSdk.Version.check("2.3.0", "3.0.0-p1")
:allow
iex> ForgeSdk.Version.check("2.3.0", "3.0.0")
:allow
iex> ForgeSdk.Version.check("4.0.0", "3.0.0")
:deny
iex> ForgeSdk.Version.check("4.0.0", "4.0a.1")
:invalid
iex> ForgeSdk.Version.check("4.0.0", "4.0.1-p1-p2")
:invalid
"""
def check(old, new) do
[ov1, ov2, ov3, _op] = normalize_version(old)
[nv1, nv2, nv3, _np] = normalize_version(new)
cond do
# same consensus version. OK to upgrade without sending UpgradeNodeTx.
ov1 == nv1 and ov2 == nv2 and ov3 == nv3 -> :match
# different MR release of same FR. Allow to upgrade.
ov1 == nv1 and ov2 == nv2 and ov3 < nv3 -> :allow
# different FR. Only allow to ugprade with consequent FR.
ov1 == nv1 and ov2 + 1 == nv2 and nv3 == 0 -> :allow
# different major release. Only allow to upgrade with consequent major release. User must make sure they have already upgraded to the last FR.
ov1 + 1 == nv1 and nv2 == 0 and nv3 == 0 -> :allow
true -> :deny
end
rescue
_ -> :invalid
end
# private functions
defp normalize_version(version) do
[v, p] =
case String.split(version, "-") do
[v] -> [v, ""]
[v, p] -> [v, p]
_ -> raise "Invalid version"
end
[v1, v2, v3] =
case String.split(v, ".") do
[v1, v2, v3] -> [String.to_integer(v1), String.to_integer(v2), String.to_integer(v3)]
_ -> raise "Invalid version"
end
[v1, v2, v3, p]
end
end