diff --git a/packages/mana/mana.go b/packages/mana/mana.go
new file mode 100644
index 0000000000000000000000000000000000000000..a2706c743d5a9459f64929d90ff0f8544d194b93
--- /dev/null
+++ b/packages/mana/mana.go
@@ -0,0 +1,28 @@
+package mana
+
+import "math"
+
+func CoinTimeDestroyed(transferredValue uint64, parkedTime uint64) uint64 {
+	return transferredValue * parkedTime
+}
+
+func ErodedGains(gainsPerInterval uint64, elapsedIntervals uint64) uint64 {
+	return uint64(float64(gainsPerInterval) * DECAY_FACTOR * (1 - math.Pow(DECAY_FACTOR, float64(elapsedIntervals))) / (1 - DECAY_FACTOR))
+}
+
+func ManaOfTransfer(value uint64, parkedTime uint64) uint64 {
+	fullErosionIntervals := parkedTime / DECAY_INTERVAL
+
+	if fullErosionIntervals >= 1 {
+		gainsPerInterval := CoinTimeDestroyed(value, DECAY_INTERVAL)
+
+		return ErodedGains(gainsPerInterval, fullErosionIntervals) + CoinTimeDestroyed(value, (parkedTime-fullErosionIntervals*DECAY_INTERVAL))
+	} else {
+		return CoinTimeDestroyed(value, parkedTime)
+	}
+}
+
+const (
+	DECAY_INTERVAL = 100
+	DECAY_FACTOR   = 0.9
+)
diff --git a/packages/mana/mana_test.go b/packages/mana/mana_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..018bbea735b6adcb78e204ce34117ce7f9a63adf
--- /dev/null
+++ b/packages/mana/mana_test.go
@@ -0,0 +1,14 @@
+package mana
+
+import (
+	"fmt"
+	"testing"
+)
+
+func TestManaOfTransfer(t *testing.T) {
+	fmt.Println(ManaOfTransfer(50, 99))
+	fmt.Println(ManaOfTransfer(50, 100))
+	fmt.Println(ManaOfTransfer(50, 200))
+	fmt.Println(ManaOfTransfer(50, 290))
+	fmt.Println(ManaOfTransfer(50, 300))
+}