ledger-lite 1.1.0 → 1.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8bb00328da0a43ae0598c37a0fdf2bbfb10879b1
4
- data.tar.gz: d86879ffe02cc2d2eb90995449de681855259903
3
+ metadata.gz: 2913a46758e571674fbeddb848ddfab228a2eace
4
+ data.tar.gz: 6783620e8081c675eb912810e8491ed781b53a8c
5
5
  SHA512:
6
- metadata.gz: e90be7b13645162660fa2c0d1a0c19f816a97d1d8cd531e073039e27a24187a57526a8ca46c603229724ae3c25355416ab179810ea6c6f88573deea9ef7a698d
7
- data.tar.gz: 522966950666004944338587eb7dfe07a2af5d9e3708d22913f4200ada59bfd432dd63ccf29f21c9781834617a745ec98634825e97854972386e6e460e46c7e1
6
+ metadata.gz: 3f71518005dbf46557c6dbc807dc23fd363dc872ec41129bdde74d7c91df69866b98503c58cf0debd5654162c665b15396c2b926d98535c4a1f49d56fe501901
7
+ data.tar.gz: afa5f7913b4d85a2b8c16bfbe46ab40d32c1f563f86c545c3cbb0593af5b643f91333f2da0477c95f944976460c74aaf9d4f60a9e21669642499f0a5787ca596
data/README.md CHANGED
@@ -9,21 +9,22 @@ ledger-lite library / gem - hyper ledger book for the distributed blockchain int
9
9
  * rdoc :: [rubydoc.info/gems/ledger-lite](http://rubydoc.info/gems/ledger-lite)
10
10
 
11
11
 
12
+
12
13
  ## Usage
13
14
 
14
15
  Let's add some transactions to the (hyper) ledger book:
15
16
 
16
- | From | To | $ |
17
- |---------------------|--------------|----:|
18
- | Keukenhof (†) | Vincent | 11 |
19
- | Vincent | Anne | 3 |
20
- | Anne | Julia | 2 |
21
- | Julia | Luuk | 1 |
22
- | | | |
23
- | Dutchgrown (†) | Ruben | 11 |
24
- | Vincent | Max | 3 |
25
- | Ruben | Julia | 2 |
26
- | Anne | Martijn | 1 |
17
+ | From | To | $ |
18
+ |---------------------------|--------------|----:|
19
+ | Central Bank (†) | Vincent | 11 |
20
+ | Vincent | Anne | 3 |
21
+ | Anne | Julia | 2 |
22
+ | Julia | Luuk | 1 |
23
+ | | | |
24
+ | De Nederlandsche Bank (†) | Ruben | 11 |
25
+ | Vincent | Max | 3 |
26
+ | Ruben | Julia | 2 |
27
+ | Anne | Martijn | 1 |
27
28
 
28
29
  (†): Mining Transaction - New Dutch Gulden ($) on the Market!
29
30
 
@@ -35,15 +36,15 @@ Let's add some transactions to the (hyper) ledger book:
35
36
 
36
37
  ledger = Ledger.new
37
38
 
38
- ledger.send( "Keukenhof†", "Vincent", 11 )
39
- ledger.send( "Vincent", "Anne", 3 )
40
- ledger.send( "Anne", "Julia", 2 )
41
- ledger.send( "Julia", "Luuk", 1 )
39
+ ledger.send( "Central Bank†", "Vincent", 11 )
40
+ ledger.send( "Vincent", "Anne", 3 )
41
+ ledger.send( "Anne", "Julia", 2 )
42
+ ledger.send( "Julia", "Luuk", 1 )
42
43
 
43
- ledger.send( "Dutchgrown†", "Ruben", 11 )
44
- ledger.send( "Vincent", "Max", 3 )
45
- ledger.send( "Ruben", "Julia", 2 )
46
- ledger.send( "Anne", "Martijn", 1 )
44
+ ledger.send( "De Nederlandsche Bank†", "Ruben", 11 )
45
+ ledger.send( "Vincent", "Max", 3 )
46
+ ledger.send( "Ruben", "Julia", 2 )
47
+ ledger.send( "Anne", "Martijn", 1 )
47
48
 
48
49
  pp ledger ## pp = pretty print
49
50
 
@@ -85,15 +86,15 @@ Or use transaction hashes:
85
86
  ``` ruby
86
87
  ledger = Ledger.new
87
88
 
88
- ledger.write( from: "Keukenhof†", to: "Vincent", amount: 11 )
89
- ledger.write( from: "Vincent", to: "Anne", amount: 3 )
90
- ledger.write( from: "Anne", to: "Julia", amount: 2 )
91
- ledger.write( from: "Julia", to: "Luuk", amount: 1 )
89
+ ledger.write( from: "Central Bank†", to: "Vincent", amount: 11 )
90
+ ledger.write( from: "Vincent", to: "Anne", amount: 3 )
91
+ ledger.write( from: "Anne", to: "Julia", amount: 2 )
92
+ ledger.write( from: "Julia", to: "Luuk", amount: 1 )
92
93
 
93
- ledger.write( { from: "Dutchgrown†", to: "Ruben", amount: 11 },
94
- { from: "Vincent", to: "Max", amount: 3 },
95
- { from: "Ruben", to: "Julia", amount: 2 },
96
- { from: "Anne", to: "Martijn", amount: 1 } )
94
+ ledger.write( { from: "De Nederlandsche Bank†", to: "Ruben", amount: 11 },
95
+ { from: "Vincent", to: "Max", amount: 3 },
96
+ { from: "Ruben", to: "Julia", amount: 2 },
97
+ { from: "Anne", to: "Martijn", amount: 1 } )
97
98
 
98
99
  pp ledger
99
100
  ```
@@ -103,15 +104,15 @@ Or use transaction (tx) classes/structs:
103
104
  ``` ruby
104
105
  ledger = Ledger.new
105
106
 
106
- ledger.write( Tx.new( "Keukenhof†", "Vincent", 11 ))
107
- ledger.write( Tx.new( "Vincent", "Anne", 3 ))
108
- ledger.write( Tx.new( "Anne", "Julia", 2 ))
109
- ledger.write( Tx.new( "Julia", "Luuk", 1 ))
107
+ ledger.write( Tx.new( "Central Bank†", "Vincent", 11 ))
108
+ ledger.write( Tx.new( "Vincent", "Anne", 3 ))
109
+ ledger.write( Tx.new( "Anne", "Julia", 2 ))
110
+ ledger.write( Tx.new( "Julia", "Luuk", 1 ))
110
111
 
111
- ledger.write( Tx.new( "Dutchgrown†", "Ruben", 11 ),
112
- Tx.new( "Vincent", "Max", 3 ),
113
- Tx.new( "Ruben", "Julia", 2 ),
114
- Tx.new( "Anne", "Martijn", 1 ))
112
+ ledger.write( Tx.new( "De Nederlandsche Bank†", "Ruben", 11 ),
113
+ Tx.new( "Vincent", "Max", 3 ),
114
+ Tx.new( "Ruben", "Julia", 2 ),
115
+ Tx.new( "Anne", "Martijn", 1 ))
115
116
 
116
117
  pp ledger
117
118
  ```
@@ -121,15 +122,15 @@ Or use the operator `<<` alias for `write`:
121
122
  ```ruby
122
123
  ledger = Ledger.new
123
124
 
124
- ledger << Tx.new( "Keukenhof†", "Vincent", 11 )
125
- ledger << Tx.new( "Vincent", "Anne", 3 )
126
- ledger << Tx.new( "Anne", "Julia", 2 )
127
- ledger << Tx.new( "Julia", "Luuk", 1 )
125
+ ledger << Tx.new( "Central Bank†", "Vincent", 11 )
126
+ ledger << Tx.new( "Vincent", "Anne", 3 )
127
+ ledger << Tx.new( "Anne", "Julia", 2 )
128
+ ledger << Tx.new( "Julia", "Luuk", 1 )
128
129
 
129
- ledger << [Tx.new( "Dutchgrown†", "Ruben", 11 ),
130
- Tx.new( "Vincent", "Max", 3 ),
131
- Tx.new( "Ruben", "Julia", 2 ),
132
- Tx.new( "Anne", "Martijn", 1 )]
130
+ ledger << [Tx.new( "De Nederlandsche Bank†", "Ruben", 11 ),
131
+ Tx.new( "Vincent", "Max", 3 ),
132
+ Tx.new( "Ruben", "Julia", 2 ),
133
+ Tx.new( "Anne", "Martijn", 1 )]
133
134
 
134
135
  pp ledger
135
136
  ```
@@ -141,14 +142,14 @@ Or use blocks of transaction hashes:
141
142
 
142
143
  ledger = Ledger.new
143
144
 
144
- ledger.write( Block.new( { from: "Keukenhof†", to: "Vincent", amount: 11 },
145
- { from: "Vincent", to: "Anne", amount: 3 },
146
- { from: "Anne", to: "Julia", amount: 2 },
147
- { from: "Julia", to: "Luuk", amount: 1 } ),
148
- Block.new( { from: "Dutchgrown†", to: "Ruben", amount: 11 },
149
- { from: "Vincent", to: "Max", amount: 3 },
150
- { from: "Ruben", to: "Julia", amount: 2 },
151
- { from: "Anne", to: "Martijn", amount: 1 } ))
145
+ ledger.write( Block.new( { from: "Central Bank†", to: "Vincent", amount: 11 },
146
+ { from: "Vincent", to: "Anne", amount: 3 },
147
+ { from: "Anne", to: "Julia", amount: 2 },
148
+ { from: "Julia", to: "Luuk", amount: 1 } ),
149
+ Block.new( { from: "De Nederlandsche Bank†", to: "Ruben", amount: 11 },
150
+ { from: "Vincent", to: "Max", amount: 3 },
151
+ { from: "Ruben", to: "Julia", amount: 2 },
152
+ { from: "Anne", to: "Martijn", amount: 1 } ))
152
153
 
153
154
  pp ledger
154
155
  ```
@@ -159,14 +160,14 @@ Or use blocks of transaction classes/structs:
159
160
  ``` ruby
160
161
  ledger = Ledger.new
161
162
 
162
- ledger.write( Block.new( Tx.new( "Keukenhof†", "Vincent", 11 ),
163
- Tx.new( "Vincent", "Anne", 3 ),
164
- Tx.new( "Anne", "Julia", 2 ),
165
- Tx.new( "Julia", "Luuk", 1 )),
166
- Block.new( Tx.new( "Dutchgrown†", "Ruben", 11 ),
167
- Tx.new( "Vincent", "Max", 3 ),
168
- Tx.new( "Ruben", "Julia", 2 ),
169
- Tx.new( "Anne", "Martijn", 1 )))
163
+ ledger.write( Block.new( Tx.new( "Central Bank†", "Vincent", 11 ),
164
+ Tx.new( "Vincent", "Anne", 3 ),
165
+ Tx.new( "Anne", "Julia", 2 ),
166
+ Tx.new( "Julia", "Luuk", 1 )),
167
+ Block.new( Tx.new( "De Nederlandsche Bank†", "Ruben", 11 ),
168
+ Tx.new( "Vincent", "Max", 3 ),
169
+ Tx.new( "Ruben", "Julia", 2 ),
170
+ Tx.new( "Anne", "Martijn", 1 )))
170
171
 
171
172
  pp ledger
172
173
  ```
@@ -176,23 +177,121 @@ Or use blocks of transaction classes/structs (with keyword arguments):
176
177
  ```ruby
177
178
  ledger = Ledger.new
178
179
 
179
- ledger.write( Block.new( Tx.new( from: "Keukenhof†", to: "Vincent", amount: 11 ),
180
- Tx.new( from: "Vincent", to: "Anne", amount: 3 ),
181
- Tx.new( from: "Anne", to: "Julia", amount: 2 ),
182
- Tx.new( from: "Julia", to: "Luuk", amount: 1 )),
183
- Block.new( Tx.new( from: "Dutchgrown†", to: "Ruben", amount: 11 ),
184
- Tx.new( from: "Vincent", to: "Max", amount: 3 ),
185
- Tx.new( from: "Ruben", to: "Julia", amount: 2 ),
186
- Tx.new( from: "Anne", to: "Martijn", amount: 1 )))
180
+ ledger.write( Block.new( Tx.new( from: "Central Bank†", to: "Vincent", amount: 11 ),
181
+ Tx.new( from: "Vincent", to: "Anne", amount: 3 ),
182
+ Tx.new( from: "Anne", to: "Julia", amount: 2 ),
183
+ Tx.new( from: "Julia", to: "Luuk", amount: 1 )),
184
+ Block.new( Tx.new( from: "De Nederlandsche Bank†", to: "Ruben", amount: 11 ),
185
+ Tx.new( from: "Vincent", to: "Max", amount: 3 ),
186
+ Tx.new( from: "Ruben", to: "Julia", amount: 2 ),
187
+ Tx.new( from: "Anne", to: "Martijn", amount: 1 )))
188
+
189
+ pp ledger
190
+ ```
191
+
192
+ # Bonus: Track Commodities, Collectibles or Assets
193
+
194
+ Ledger Lite lets you design / create your own transactions. For example, let's use
195
+ `from`, `to`, `qty` (quantity) and `name` (of commodity, collectible or asset).
196
+ Override the `Ledger#unpack` method for "unpacking" arguments from transactions
197
+ and the `Ledger#send` method for "committing" transactions:
198
+
199
+
200
+ ``` ruby
201
+ def unpack( tx )
202
+ ## "unpack" from, to, qty, name values
203
+ if tx.is_a?( Hash ) ## support hashes
204
+ from = tx[:from]
205
+ to = tx[:to]
206
+ qty = tx[:qty]
207
+ name = tx[:name]
208
+ else ## assume it's a transaction (tx) struct/class
209
+ from = tx.from
210
+ to = tx.to
211
+ qty = tx.qty
212
+ name = tx.name
213
+ end
214
+ [from,to,qty,name]
215
+ end
216
+ ```
217
+
218
+ and
219
+
220
+ ``` ruby
221
+ def send( from, to, qty, name )
222
+ if sufficient?( from, qty, name )
223
+ if self.class.config.coinbase?( from )
224
+ # note: coinbase has unlimited supply!! magic happens here
225
+ else
226
+ @addr[ from ][ name ] -= qty
227
+ end
228
+ @addr[ to ] ||= {} ## make sure addr exists (e.g. init with empty hash {})
229
+ @addr[ to ][ name ] ||= 0
230
+ @addr[ to ][ name ] += qty
231
+ end
232
+ end
233
+ ```
234
+
235
+ Now use the ledger with the new transaction format like:
236
+
237
+
238
+ ``` ruby
239
+ ledger = Ledger.new
240
+
241
+ ledger.send( "Keukenhof†", "Vincent", 11, "Tulip Admiral van Eijck" )
242
+ ledger.send( "Vincent", "Anne", 3, "Tulip Admiral van Eijck" )
243
+ ledger.send( "Anne", "Julia", 2, "Tulip Admiral van Eijck" )
244
+ ledger.send( "Julia", "Luuk", 1, "Tulip Admiral van Eijck" )
245
+
246
+ ledger.send( "Dutchgrown†", "Ruben", 11, "Tulip Semper Augustus" )
247
+ ledger.send( "Vincent", "Max", 3, "Tulip Admiral van Eijck" )
248
+ ledger.send( "Ruben", "Julia", 2, "Tulip Semper Augustus" )
249
+ ledger.send( "Anne", "Martijn", 1, "Tulip Admiral van Eijck" )
250
+
251
+ pp ledger ## pp == pretty print
252
+ ```
253
+
254
+ resulting in:
255
+
256
+ ```
257
+ #<LedgerLite::Ledger
258
+ @addr={
259
+ "Vincent" => {"Tulip Admiral van Eijck" => 5},
260
+ "Anne" => {"Tulip Admiral van Eijck" => 0},
261
+ "Julia" => {"Tulip Admiral van Eijck" => 1, "Tulip Semper Augustus" => 2},
262
+ "Luuk" => {"Tulip Admiral van Eijck" => 1},
263
+ "Ruben" => {"Tulip Semper Augustus" => 9},
264
+ "Max" => {"Tulip Admiral van Eijck" => 3},
265
+ "Martijn" => {"Tulip Admiral van Eijck" => 1}}>
266
+ ```
267
+
268
+ Or use blocks of transaction classes/structs (with keyword arguments):
269
+
270
+
271
+ ``` ruby
272
+ ledger = Ledger.new
273
+
274
+ ledger.write( Block.new( Tx.new( from: "Keukenhof†", to: "Vincent", qty: 11, name: "Tulip Admiral van Eijck" ),
275
+ Tx.new( from: "Vincent", to: "Anne", qty: 3, name: "Tulip Admiral van Eijck" ),
276
+ Tx.new( from: "Anne", to: "Julia", qty: 2, name: "Tulip Admiral van Eijck" ),
277
+ Tx.new( from: "Julia", to: "Luuk", qty: 1, name: "Tulip Admiral van Eijck" )),
278
+ Block.new( Tx.new( from: "Dutchgrown†", to: "Ruben", qty: 11, name: "Tulip Semper Augustus" ),
279
+ Tx.new( from: "Vincent", to: "Max", qty: 3, name: "Tulip Admiral van Eijck" ),
280
+ Tx.new( from: "Ruben", to: "Julia", qty: 2, name: "Tulip Semper Augustus" ),
281
+ Tx.new( from: "Anne", to: "Martijn", qty: 1, name: "Tulip Admiral van Eijck" )))
187
282
 
188
283
  pp ledger
189
284
  ```
190
285
 
286
+ And so on and on.
287
+
288
+
191
289
 
192
290
 
193
291
  ## Ledger Lite in the Real World
194
292
 
195
293
  - [**centralbank**](https://github.com/openblockchains/centralbank) - command line tool (and core library) - print your own money / cryptocurrency; run your own federated central bank nodes on the blockchain peer-to-peer over HTTP; revolutionize the world one block at a time
294
+ - [**tulipmania**](https://github.com/openblockchains/tulipmania) - command line tool (and core library) - tulips on the blockchain; learn by example from the real world (anno 1637) - buy! sell! hodl! enjoy the beauty of admiral of admirals, semper augustus, and more; run your own hyper ledger tulip exchange nodes on the blockchain peer-to-peer over HTTP; revolutionize the world one block at a time
196
295
  - [**shilling**](https://github.com/bitshilling/bitshilling.tools) - command line tool (and core library) - shilling (or schilling) on the blockchain! rock-solid alpine dollar from austria; print (mine) your own shillings; run your own federated shilling central bank nodes w/ public distributed (hyper) ledger book on the blockchain peer-to-peer over HTTP; revolutionize the world one block at a time
197
296
  - You? Add your tool / service
198
297
 
@@ -90,6 +90,11 @@ class Base
90
90
  if args.size == 1 && args[0].is_a?( Array )
91
91
  puts " unwrap array in array"
92
92
  blks_or_txns = args[0] ## "unwrap" array in array
93
+ elsif args.size == 1 && defined?( Blockchain ) && args[0].is_a?( Blockchain )
94
+ ## support passing in of "top-level" defined blockchain class if defined
95
+ ## pass along all blocks ("unwrapped" from blockchain)
96
+ blks_or_txns = []
97
+ args[0].each { |b| blks_or_txns << b }
93
98
  else
94
99
  blks_or_txns = args ## use "auto-wrapped" splat array
95
100
  end
@@ -5,7 +5,7 @@ module LedgerLite
5
5
 
6
6
  MAJOR = 1
7
7
  MINOR = 1
8
- PATCH = 0
8
+ PATCH = 1
9
9
  VERSION = [MAJOR,MINOR,PATCH].join('.')
10
10
 
11
11
  def self.version
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ledger-lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer