Class: Zold::Txn
- Inherits:
-
Object
- Object
- Zold::Txn
- Defined in:
- lib/zold/txn.rb
Overview
A single transaction
Instance Attribute Summary collapse
-
#amount ⇒ Object
Returns the value of attribute amount.
-
#bnf ⇒ Object
Returns the value of attribute bnf.
-
#date ⇒ Object
readonly
Returns the value of attribute date.
-
#details ⇒ Object
readonly
Returns the value of attribute details.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#prefix ⇒ Object
readonly
Returns the value of attribute prefix.
-
#sign ⇒ Object
Returns the value of attribute sign.
Class Method Summary collapse
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #==(other) ⇒ Object
-
#initialize(id, date, amount, prefix, bnf, details) ⇒ Txn
constructor
A new instance of Txn.
- #inverse(bnf) ⇒ Object
-
#signed(pvt, id) ⇒ Object
- Sign the transaction and add RSA signature to it
pvt
- The private RSA key of the paying wallet
id
-
Paying wallet ID.
- The private RSA key of the paying wallet
- Sign the transaction and add RSA signature to it
- #to_json ⇒ Object
- #to_s ⇒ Object
- #to_text ⇒ Object
Constructor Details
#initialize(id, date, amount, prefix, bnf, details) ⇒ Txn
Returns a new instance of Txn.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/zold/txn.rb', line 47 def initialize(id, date, amount, prefix, bnf, details) raise 'The ID can\'t be NIL' if id.nil? raise "ID of transaction can't be negative: #{id}" if id < 1 @id = id raise 'The time can\'t be NIL' if date.nil? raise 'Time have to be of type Time' unless date.is_a?(Time) raise "Time can't be in the future: #{date}" if date > Time.now @date = date raise 'The amount can\'t be NIL' if amount.nil? raise 'The amount has to be of type Amount' unless amount.is_a?(Amount) raise 'The amount can\'t be zero' if amount.zero? @amount = amount raise 'The bnf can\'t be NIL' if bnf.nil? raise 'The bnf has to be of type Id' unless bnf.is_a?(Id) @bnf = bnf raise 'Prefix can\'t be NIL' if prefix.nil? raise "Prefix is too short: \"#{prefix}\"" if prefix.length < 8 raise "Prefix is too long: \"#{prefix}\"" if prefix.length > 32 raise "Prefix is wrong: \"#{prefix}\" (#{RE_PREFIX})" unless prefix =~ Regexp.new("^#{RE_PREFIX}$") @prefix = prefix raise 'Details can\'t be NIL' if details.nil? raise 'Details can\'t be empty' if details.empty? raise "Details are too long: \"#{details}\"" if details.length > 512 raise "Wrong details \"#{details}\" (#{RE_DETAILS})" unless details =~ Regexp.new("^#{RE_DETAILS}$") @details = details end |
Instance Attribute Details
#amount ⇒ Object
Returns the value of attribute amount.
45 46 47 |
# File 'lib/zold/txn.rb', line 45 def amount @amount end |
#bnf ⇒ Object
Returns the value of attribute bnf.
45 46 47 |
# File 'lib/zold/txn.rb', line 45 def bnf @bnf end |
#date ⇒ Object (readonly)
Returns the value of attribute date.
45 46 47 |
# File 'lib/zold/txn.rb', line 45 def date @date end |
#details ⇒ Object (readonly)
Returns the value of attribute details.
45 46 47 |
# File 'lib/zold/txn.rb', line 45 def details @details end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
45 46 47 |
# File 'lib/zold/txn.rb', line 45 def id @id end |
#prefix ⇒ Object (readonly)
Returns the value of attribute prefix.
45 46 47 |
# File 'lib/zold/txn.rb', line 45 def prefix @prefix end |
#sign ⇒ Object
Returns the value of attribute sign.
45 46 47 |
# File 'lib/zold/txn.rb', line 45 def sign @sign end |
Class Method Details
.parse(line, idx = 0) ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/zold/txn.rb', line 146 def self.parse(line, idx = 0) clean = line.strip parts = PTN.match(clean) raise "Invalid line ##{idx}: #{line.inspect} #{regex}" unless parts txn = Txn.new( Hexnum.parse(parts[:id]).to_i, Time.parse(parts[:date]), Amount.new(zents: Hexnum.parse(parts[:amount]).to_i), parts[:prefix], Id.new(parts[:bnf]), parts[:details] ) txn.sign = parts[:sign] txn end |
Instance Method Details
#<=>(other) ⇒ Object
80 81 82 83 |
# File 'lib/zold/txn.rb', line 80 def <=>(other) raise 'Can only compare with Txn' unless other.is_a?(Txn) [date, amount * -1, id, bnf] <=> [other.date, other.amount * -1, other.id, other.bnf] end |
#==(other) ⇒ Object
74 75 76 77 78 |
# File 'lib/zold/txn.rb', line 74 def ==(other) id == other.id && date == other.date && amount == other.amount && prefix == other.prefix && bnf == other.bnf && details == other.details && sign == other.sign end |
#inverse(bnf) ⇒ Object
114 115 116 117 118 119 120 121 |
# File 'lib/zold/txn.rb', line 114 def inverse(bnf) raise 'You can\'t reverse a positive transaction' unless amount.negative? t = clone t.amount = amount * -1 t.bnf = bnf t.sign = '' t end |
#signed(pvt, id) ⇒ Object
Sign the transaction and add RSA signature to it
pvt
-
The private RSA key of the paying wallet
id
-
Paying wallet ID
126 127 128 129 130 |
# File 'lib/zold/txn.rb', line 126 def signed(pvt, id) t = clone t.sign = Signature.new.sign(pvt, id, self) t end |
#to_json ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/zold/txn.rb', line 97 def to_json { id: @id, date: @date.utc.iso8601, amount: @amount.to_i, prefix: @prefix, bnf: @bnf.to_s, details: @details, sign: @sign } end |
#to_s ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/zold/txn.rb', line 85 def to_s [ Hexnum.new(@id, 4).to_s, @date.utc.iso8601, Hexnum.new(@amount.to_i, 16), @prefix, @bnf, @details, @sign ].join(';') end |
#to_text ⇒ Object
109 110 111 112 |
# File 'lib/zold/txn.rb', line 109 def to_text start = @amount.negative? ? "##{@id}" : '-' "#{start} #{@date.utc.iso8601} #{@amount} #{@bnf} #{@details}" end |