universum 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Manifest.txt +16 -0
- data/README.md +34 -35
- data/Rakefile +1 -1
- data/lib/universum.rb +19 -0
- data/lib/universum/account.rb +52 -0
- data/lib/universum/address.rb +75 -0
- data/lib/universum/contract.rb +87 -0
- data/lib/universum/function.rb +10 -0
- data/lib/universum/receipt.rb +52 -0
- data/lib/universum/safe_array.rb +69 -0
- data/lib/universum/safe_hash.rb +77 -0
- data/lib/universum/transaction.rb +89 -0
- data/lib/universum/type.rb +49 -0
- data/lib/universum/units_money.rb +64 -0
- data/lib/universum/units_time.rb +51 -0
- data/lib/universum/universum.rb +0 -394
- data/lib/universum/version.rb +2 -2
- data/test/contracts/greeter.rb +12 -13
- data/test/contracts/mytoken.rb +13 -14
- data/test/test_array.rb +52 -0
- data/test/test_greeter.rb +2 -2
- data/test/test_hash.rb +84 -0
- data/test/test_struct.rb +35 -0
- data/test/test_units_money.rb +60 -0
- data/test/test_units_time.rb +75 -0
- metadata +19 -3
data/lib/universum/version.rb
CHANGED
data/test/contracts/greeter.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
######################
|
4
|
+
# Greeter Contract
|
3
5
|
|
4
|
-
|
6
|
+
def initialize( greeting )
|
7
|
+
@owner = msg.sender
|
8
|
+
@greeting = greeting
|
9
|
+
end
|
5
10
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
11
|
+
def greet
|
12
|
+
@greeting
|
13
|
+
end
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
def kill
|
16
|
-
selfdestruct( msg.sender ) if msg.sender == @owner
|
17
|
-
end
|
18
|
-
end # class Greeter
|
15
|
+
def kill
|
16
|
+
selfdestruct( msg.sender ) if msg.sender == @owner
|
17
|
+
end
|
data/test/contracts/mytoken.rb
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
#########################
|
4
|
+
# My Token Contract
|
3
5
|
|
4
|
-
|
6
|
+
def initialize( initial_supply )
|
7
|
+
@balance_of = Mapping.of( Address => Money )
|
8
|
+
@balance_of[ msg.sender] = initial_supply
|
9
|
+
end
|
5
10
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
11
|
+
def transfer( to, value )
|
12
|
+
assert @balance_of[ msg.sender ] >= value
|
13
|
+
assert @balance_of[ to ] + value >= @balance_of[ to ]
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
assert( @balance_of[ to ] + value >= @balance_of[ to ] )
|
15
|
+
@balance_of[ msg.sender ] -= value
|
16
|
+
@balance_of[ to ] += value
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
true
|
19
|
-
end
|
20
|
-
end # class MyToken
|
18
|
+
true
|
19
|
+
end
|
data/test/test_array.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_array.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
|
11
|
+
class TestArray < MiniTest::Test
|
12
|
+
|
13
|
+
Array_Integer = SafeArray.build_class( Integer )
|
14
|
+
Array_Bool = SafeArray.build_class( Bool )
|
15
|
+
|
16
|
+
def test_integer
|
17
|
+
pp Array_Integer
|
18
|
+
pp ary = Array_Integer.new
|
19
|
+
|
20
|
+
assert_equal Integer, Array_Integer.klass_value
|
21
|
+
assert_equal 0, ary[0]
|
22
|
+
assert_equal 0, ary[1]
|
23
|
+
|
24
|
+
ary[0] = 101
|
25
|
+
ary[1] = 102
|
26
|
+
assert_equal 101, ary[0]
|
27
|
+
assert_equal 102, ary[1]
|
28
|
+
|
29
|
+
## check Array.of (uses cached classes)
|
30
|
+
assert_equal Array_Integer, Array.of( Integer ).class
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def test_bool
|
35
|
+
pp Array_Bool
|
36
|
+
pp ary = Array_Bool.new
|
37
|
+
|
38
|
+
assert_equal Bool, Array_Bool.klass_value
|
39
|
+
assert_equal false, ary[0]
|
40
|
+
assert_equal false, ary[1]
|
41
|
+
|
42
|
+
ary[0] = true
|
43
|
+
ary[1] = true
|
44
|
+
assert_equal true, ary[0]
|
45
|
+
assert_equal true, ary[1]
|
46
|
+
|
47
|
+
## check Array.of (uses cached classes)
|
48
|
+
assert_equal Array_Bool, Array.of( Bool ).class
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
end # class TestArray
|
data/test/test_greeter.rb
CHANGED
@@ -8,11 +8,11 @@
|
|
8
8
|
require 'helper'
|
9
9
|
|
10
10
|
|
11
|
-
require 'contracts/greeter' ## use require_relative - why? why not?
|
12
|
-
|
13
11
|
|
14
12
|
class TestGreeter < MiniTest::Test
|
15
13
|
|
14
|
+
Greeter = Contract.load( "#{Universum.root}/test/contracts/greeter" )
|
15
|
+
|
16
16
|
def test_uni
|
17
17
|
account = Account['0x1111']
|
18
18
|
|
data/test/test_hash.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_hash.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
|
11
|
+
class TestHash < MiniTest::Test
|
12
|
+
|
13
|
+
## sig: [Integer, Bool, Integer, Address]
|
14
|
+
Voter = Struct.new( :weight, :voted, :vote, :delegate ) do
|
15
|
+
def self.new_zero
|
16
|
+
new( 0, false, 0, '0x0000' )
|
17
|
+
end
|
18
|
+
def self.zero
|
19
|
+
@zero ||= new_zero
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Hash_X_Integer = SafeHash.build_class( String, Integer )
|
24
|
+
Hash_X_Bool = SafeHash.build_class( String, Bool )
|
25
|
+
Hash_X_Voter = SafeHash.build_class( String, Voter )
|
26
|
+
|
27
|
+
def test_integer
|
28
|
+
pp Hash_X_Integer
|
29
|
+
pp h = Hash_X_Integer.new
|
30
|
+
|
31
|
+
assert_equal Integer, Hash_X_Integer.klass_value
|
32
|
+
assert_equal 0, h['0x1111']
|
33
|
+
assert_equal 0, h['0x2222']
|
34
|
+
|
35
|
+
h['0x1111'] = 101
|
36
|
+
h['0x2222'] = 102
|
37
|
+
assert_equal 101, h['0x1111']
|
38
|
+
assert_equal 102, h['0x2222']
|
39
|
+
|
40
|
+
## check Mapping.of (uses cached classes)
|
41
|
+
assert_equal Hash_X_Integer, Mapping.of( String => Integer ).class
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def test_bool
|
46
|
+
pp Hash_X_Bool
|
47
|
+
pp h = Hash_X_Bool.new
|
48
|
+
|
49
|
+
assert_equal Bool, Hash_X_Bool.klass_value
|
50
|
+
assert_equal false, h['0x1111']
|
51
|
+
assert_equal false, h['0x2222']
|
52
|
+
|
53
|
+
h['0x1111'] = true
|
54
|
+
h['0x2222'] = true
|
55
|
+
assert_equal true, h['0x1111']
|
56
|
+
assert_equal true, h['0x2222']
|
57
|
+
|
58
|
+
## check Mapping.of (uses cached classes)
|
59
|
+
assert_equal Hash_X_Bool, Mapping.of( String => Bool ).class
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
def test_voter
|
64
|
+
pp Hash_X_Voter
|
65
|
+
pp h = Hash_X_Voter.new
|
66
|
+
|
67
|
+
assert_equal Voter, Hash_X_Voter.klass_value
|
68
|
+
assert_equal Voter.zero, h['0x1111']
|
69
|
+
assert_equal Voter.zero, h['0x2222']
|
70
|
+
|
71
|
+
h['0x1111'].voted = true
|
72
|
+
h['0x2222'].voted = true
|
73
|
+
assert_equal true, h['0x1111'].voted
|
74
|
+
assert_equal true, h['0x2222'].voted
|
75
|
+
|
76
|
+
pp h['0x1111']
|
77
|
+
pp h['0x2222']
|
78
|
+
|
79
|
+
## check Mapping.of (uses cached classes)
|
80
|
+
assert_equal Hash_X_Voter, Mapping.of( String => Voter ).class
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
end # class TestHash
|
data/test/test_struct.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_struct.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
|
11
|
+
class TestStruct < MiniTest::Test
|
12
|
+
|
13
|
+
## sig: [Integer, Bool, Integer, Address]
|
14
|
+
Voter = Struct.new( :weight, :voted, :vote, :delegate ) do
|
15
|
+
def self.new_zero
|
16
|
+
new( 0, false, 0, '0x0000' )
|
17
|
+
end
|
18
|
+
def self.zero
|
19
|
+
@zero ||= new_zero
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def test_zero
|
25
|
+
assert_equal Voter.zero, Voter.zero
|
26
|
+
|
27
|
+
zerodup = Voter.zero.dup
|
28
|
+
zerodup.delegate = '0x1111'
|
29
|
+
pp zerodup
|
30
|
+
|
31
|
+
assert_equal '0x0000', Voter.zero.delegate
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end # class TestStruct
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_units_money.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
|
11
|
+
class TestUnitsMoney < MiniTest::Test
|
12
|
+
|
13
|
+
def test_money
|
14
|
+
assert_equal 1_000_000_000_000_000_000, 1.e18
|
15
|
+
assert_equal 1_000_000_000_000_000, 1.e15
|
16
|
+
assert_equal 1_000_000_000_000, 1.e12
|
17
|
+
assert_equal 1_000_000_000, 1.e9
|
18
|
+
assert_equal 1_000_000, 1.e6
|
19
|
+
assert_equal 1_000, 1.e3
|
20
|
+
|
21
|
+
|
22
|
+
value = rand( 1_000_000_000 )
|
23
|
+
|
24
|
+
assert_equal 1_000_000_000_000_000_000, 1.ether
|
25
|
+
assert_equal 1_000_000_000_000_000_000, 1.eth
|
26
|
+
assert_equal 1_000_000_000_000_000_000*2, 1.ether*2
|
27
|
+
assert_equal value+1_000_000_000_000_000_000, value+1.ether
|
28
|
+
|
29
|
+
assert_equal 1_000_000_000_000_000, 1.milliether
|
30
|
+
assert_equal 1_000_000_000_000_000, 1.millieth
|
31
|
+
assert_equal 1_000_000_000_000_000, 1.milli
|
32
|
+
assert_equal 1_000_000_000_000_000, 1.finney
|
33
|
+
assert_equal 1_000_000_000_000_000*2, 1.milliether*2
|
34
|
+
assert_equal value+1_000_000_000_000_000, value+1.milliether
|
35
|
+
|
36
|
+
assert_equal 1_000_000_000_000, 1.microether
|
37
|
+
assert_equal 1_000_000_000_000, 1.microeth
|
38
|
+
assert_equal 1_000_000_000_000, 1.micro
|
39
|
+
assert_equal 1_000_000_000_000, 1.szabo
|
40
|
+
assert_equal 1_000_000_000_000*2, 1.microether*2
|
41
|
+
assert_equal value+1_000_000_000_000, value+1.microether
|
42
|
+
|
43
|
+
assert_equal 1_000_000_000, 1.gwei
|
44
|
+
assert_equal 1_000_000_000, 1.shannon
|
45
|
+
assert_equal 1_000_000_000*2, 1.gwei*2
|
46
|
+
assert_equal value+1_000_000_000, value+1.gwei
|
47
|
+
|
48
|
+
assert_equal 1_000_000, 1.mwei
|
49
|
+
assert_equal 1_000_000, 1.lovelace
|
50
|
+
assert_equal 1_000_000, 1.ada
|
51
|
+
assert_equal 1_000_000*2, 1.mwei*2
|
52
|
+
assert_equal value+1_000_000, value+1.mwei
|
53
|
+
|
54
|
+
assert_equal 1_000, 1.kwei
|
55
|
+
assert_equal 1_000, 1.babbage
|
56
|
+
assert_equal 1_000*2, 1.kwei*2
|
57
|
+
assert_equal value+1_000, value+1.kwei
|
58
|
+
end
|
59
|
+
|
60
|
+
end # class TestUnitsMoney
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_units_time.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
|
11
|
+
class TestUnitsTime < MiniTest::Test
|
12
|
+
|
13
|
+
def test_time
|
14
|
+
now = Time.now.to_i
|
15
|
+
|
16
|
+
assert_equal 31_536_000, 1.year
|
17
|
+
assert_equal 31_536_000, 1.y
|
18
|
+
assert_equal 31_536_000*2, 2.years
|
19
|
+
assert_equal 31_536_000*2, 1.y*2
|
20
|
+
assert_equal now+31_536_000, now+1.year
|
21
|
+
assert_equal 31_536_000, 365.days
|
22
|
+
assert_equal 31_536_000, 365*24.hours
|
23
|
+
|
24
|
+
assert_equal 1_209_600, 1.fortnight
|
25
|
+
assert_equal 1_209_600*2, 2.fortnights
|
26
|
+
assert_equal 1_209_600*2, 1.fortnight*2
|
27
|
+
assert_equal now+1_209_600, now+1.fortnight
|
28
|
+
assert_equal 1_209_600, 2.weeks
|
29
|
+
assert_equal 1_209_600, 14.days
|
30
|
+
assert_equal 1_209_600, 14*24.hours
|
31
|
+
|
32
|
+
assert_equal 604_800, 1.week
|
33
|
+
assert_equal 604_800, 1.w
|
34
|
+
assert_equal 604_800*2, 2.weeks
|
35
|
+
assert_equal 604_800*2, 1.week*2
|
36
|
+
assert_equal now+604_800, now+1.week
|
37
|
+
assert_equal 604_800, 7.days
|
38
|
+
assert_equal 604_800, 7*24.hours
|
39
|
+
|
40
|
+
assert_equal 86_400, 1.day
|
41
|
+
assert_equal 86_400, 1.d
|
42
|
+
assert_equal 86_400*2, 2.days
|
43
|
+
assert_equal 86_400*2, 1.day*2
|
44
|
+
assert_equal now+86_400, now+1.day
|
45
|
+
assert_equal 86_400, 24.hours
|
46
|
+
assert_equal 86_400, 24*1.hour
|
47
|
+
|
48
|
+
assert_equal 3600, 1.hour
|
49
|
+
assert_equal 3600, 1.h
|
50
|
+
assert_equal 3600*2, 2.hours
|
51
|
+
assert_equal 3600*2, 1.hour*2
|
52
|
+
assert_equal now+3600, now+1.hour
|
53
|
+
assert_equal 3600, 60.minutes
|
54
|
+
assert_equal 3600, 60*1.minute
|
55
|
+
|
56
|
+
assert_equal 60, 1.minute
|
57
|
+
assert_equal 60, 1.min
|
58
|
+
assert_equal 60, 1.m
|
59
|
+
assert_equal 60*2, 2.minutes
|
60
|
+
assert_equal 60*2, 2.mins
|
61
|
+
assert_equal 60*2, 1.minute*2
|
62
|
+
assert_equal now+60, now+1.minute
|
63
|
+
assert_equal 60, 60.seconds
|
64
|
+
assert_equal 60, 60*1.second
|
65
|
+
|
66
|
+
assert_equal 1, 1.second
|
67
|
+
assert_equal 1, 1.sec
|
68
|
+
assert_equal 1, 1.s
|
69
|
+
assert_equal 1*2, 2.seconds
|
70
|
+
assert_equal 1*2, 2.secs
|
71
|
+
assert_equal 1*2, 1.second*2
|
72
|
+
assert_equal now+1, now+1.second
|
73
|
+
end
|
74
|
+
|
75
|
+
end # class TestUnitsTime
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: universum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
@@ -57,18 +57,34 @@ files:
|
|
57
57
|
- README.md
|
58
58
|
- Rakefile
|
59
59
|
- lib/universum.rb
|
60
|
+
- lib/universum/account.rb
|
61
|
+
- lib/universum/address.rb
|
62
|
+
- lib/universum/contract.rb
|
60
63
|
- lib/universum/enum.rb
|
61
64
|
- lib/universum/event.rb
|
65
|
+
- lib/universum/function.rb
|
66
|
+
- lib/universum/receipt.rb
|
67
|
+
- lib/universum/safe_array.rb
|
68
|
+
- lib/universum/safe_hash.rb
|
69
|
+
- lib/universum/transaction.rb
|
70
|
+
- lib/universum/type.rb
|
71
|
+
- lib/universum/units_money.rb
|
72
|
+
- lib/universum/units_time.rb
|
62
73
|
- lib/universum/universum.rb
|
63
74
|
- lib/universum/version.rb
|
64
75
|
- test/contracts/greeter.rb
|
65
76
|
- test/contracts/mytoken.rb
|
66
77
|
- test/helper.rb
|
78
|
+
- test/test_array.rb
|
67
79
|
- test/test_enum.rb
|
68
80
|
- test/test_event.rb
|
69
81
|
- test/test_greeter.rb
|
82
|
+
- test/test_hash.rb
|
83
|
+
- test/test_struct.rb
|
84
|
+
- test/test_units_money.rb
|
85
|
+
- test/test_units_time.rb
|
70
86
|
- test/test_version.rb
|
71
|
-
homepage: https://github.com/
|
87
|
+
homepage: https://github.com/s6ruby/universum
|
72
88
|
licenses:
|
73
89
|
- Public Domain
|
74
90
|
metadata: {}
|