stellar-base 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/create_account.rb +2 -4
- data/examples/low_level_transaction_post.rb +3 -4
- data/examples/mid_level_transaction_post.rb +2 -3
- data/examples/non_native_payment.rb +6 -6
- data/examples/offer.rb +9 -10
- data/examples/transaction_merge.rb +2 -2
- data/lib/stellar-base.rb +4 -2
- data/lib/stellar/base/version.rb +1 -1
- data/lib/stellar/currency.rb +9 -2
- data/lib/stellar/operation.rb +84 -43
- data/lib/stellar/transaction.rb +33 -27
- metadata +2 -3
- data/lib/stellar/payment_op.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf4158b0f95f7338c96416a0398e13dbf91ae047
|
4
|
+
data.tar.gz: 6df5ab1153e3b0ed2f23d30c061d5065bccc2663
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be53f549d08cba214888be4658913ec604881a3bc7ebe5afbe154ef060797389b31385f5ad37c796e2ee92c9e6215ee9aa7d14878f35af7e51cc443ec6cc681e
|
7
|
+
data.tar.gz: dd3d97061fc6ade77de67c6a47af1c9d7f23e81b45575fc3dafa473f6aab05bba0a326969488219aabeada7f5e326f927889c7c78afbd69ca06c7de4e770fba2
|
data/examples/create_account.rb
CHANGED
@@ -16,13 +16,11 @@ destination = Stellar::KeyPair.random
|
|
16
16
|
tx = Stellar::Transaction.create_account({
|
17
17
|
account: master,
|
18
18
|
destination: destination,
|
19
|
-
sequence:
|
20
|
-
starting_balance:
|
19
|
+
sequence: 2,
|
20
|
+
starting_balance: 50 * Stellar::ONE
|
21
21
|
})
|
22
22
|
|
23
23
|
hex = tx.to_envelope(master).to_xdr(:hex)
|
24
24
|
|
25
25
|
result = $server.get('tx', blob: hex)
|
26
26
|
p result.body
|
27
|
-
raw = [result.body["result"]].pack("H*")
|
28
|
-
p Stellar::TransactionResult.from_xdr(raw)
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# This is an example of using the raw xdr objects to post a transaction
|
4
4
|
# notice that we must manually hash/sign the structures and we must manually
|
5
|
-
# fill out all the fields.
|
5
|
+
# fill out all the fields.
|
6
6
|
#
|
7
7
|
# Look at mid_level_transaction_post.rb to see a friendlier form
|
8
8
|
|
@@ -22,7 +22,7 @@ tx.seq_num = 1
|
|
22
22
|
payment = Stellar::PaymentOp.new
|
23
23
|
payment.destination = destination.verify_key.to_bytes
|
24
24
|
payment.currency = Stellar::Currency.new(:native)
|
25
|
-
payment.amount =
|
25
|
+
payment.amount = 200 * Stellar::ONE
|
26
26
|
|
27
27
|
op = Stellar::Operation.new
|
28
28
|
op.body = Stellar::Operation::Body.new(:payment, payment)
|
@@ -36,7 +36,7 @@ signature = master.sign(tx_hash)
|
|
36
36
|
env = Stellar::TransactionEnvelope.new
|
37
37
|
env.tx = tx
|
38
38
|
env.signatures = [Stellar::DecoratedSignature.new({
|
39
|
-
hint:master.verify_key.to_bytes[0...4],
|
39
|
+
hint:master.verify_key.to_bytes[0...4],
|
40
40
|
signature:signature
|
41
41
|
})]
|
42
42
|
|
@@ -44,4 +44,3 @@ env_hex = env.to_xdr.unpack("H*").first
|
|
44
44
|
|
45
45
|
result = Faraday.get('http://localhost:39132/tx', blob: env_hex)
|
46
46
|
puts result.body
|
47
|
-
|
@@ -24,11 +24,10 @@ tx = Stellar::Transaction.payment({
|
|
24
24
|
account: master,
|
25
25
|
destination: destination,
|
26
26
|
sequence: 1,
|
27
|
-
amount: [:native,
|
27
|
+
amount: [:native, 20 * Stellar::ONE]
|
28
28
|
})
|
29
29
|
|
30
30
|
hex = tx.to_envelope(master).to_xdr(:hex)
|
31
31
|
|
32
32
|
result = $server.get('tx', blob: hex)
|
33
|
-
|
34
|
-
p Stellar::TransactionResult.from_xdr(raw)
|
33
|
+
p result.body
|
@@ -7,7 +7,7 @@
|
|
7
7
|
# You can see where these helpers are defined in the files underneath /lib,
|
8
8
|
# which is where we extend the xdrgen generated source files with our higher
|
9
9
|
# level api.
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# NOTE: due to the way that sequence number for a new account are set, this
|
12
12
|
# example is pretty cumbersome to run. It is only used for illustrative purposes
|
13
13
|
# of the flow
|
@@ -25,7 +25,7 @@ def submit(key, tx)
|
|
25
25
|
hex = tx.to_envelope(key).to_xdr(:hex)
|
26
26
|
response = $server.get('tx', blob: hex)
|
27
27
|
raw = [response.body["result"]].pack("H*")
|
28
|
-
p
|
28
|
+
p response.body
|
29
29
|
end
|
30
30
|
|
31
31
|
master = Stellar::KeyPair.from_raw_seed("allmylifemyhearthasbeensearching")
|
@@ -35,20 +35,20 @@ submit master, Stellar::Transaction.payment({
|
|
35
35
|
account: master,
|
36
36
|
destination: destination,
|
37
37
|
sequence: 1,
|
38
|
-
amount: [:native,
|
38
|
+
amount: [:native, 2000 * Stellar::ONE]
|
39
39
|
})
|
40
40
|
|
41
41
|
# NOTE: after this step, you need to get the sequence number for destination
|
42
42
|
# Which is based off of the ledger sequence number it was funded in.
|
43
43
|
gets # pause to get the account's sequence from the hayashi db
|
44
44
|
|
45
|
-
destination_sequence = FILL_ME_IN
|
45
|
+
destination_sequence = FILL_ME_IN
|
46
46
|
# destination_sequence = 17179869185
|
47
47
|
|
48
48
|
submit destination, Stellar::Transaction.change_trust({
|
49
49
|
account: destination,
|
50
50
|
sequence: destination_sequence,
|
51
|
-
line: [:
|
51
|
+
line: [:alphanum, "USD\x00", master],
|
52
52
|
limit: 1000
|
53
53
|
})
|
54
54
|
|
@@ -56,5 +56,5 @@ submit master, Stellar::Transaction.payment({
|
|
56
56
|
account: master,
|
57
57
|
destination: destination,
|
58
58
|
sequence: 3,
|
59
|
-
amount: [:
|
59
|
+
amount: [:alphanum, "USD\x00", master, 100]
|
60
60
|
})
|
data/examples/offer.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# You can see where these helpers are defined in the files underneath /lib,
|
8
8
|
# which is where we extend the xdrgen generated source files with our higher
|
9
9
|
# level api.
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# NOTE: due to the way that sequence number for a new account are set, this
|
12
12
|
# example is pretty cumbersome to run. It is only used for illustrative purposes
|
13
13
|
# of the flow
|
@@ -24,8 +24,7 @@ end
|
|
24
24
|
def submit(key, tx)
|
25
25
|
hex = tx.to_envelope(key).to_xdr(:hex)
|
26
26
|
response = $server.get('tx', blob: hex)
|
27
|
-
|
28
|
-
p Stellar::TransactionResult.from_xdr(raw)
|
27
|
+
p response.body
|
29
28
|
end
|
30
29
|
|
31
30
|
master = Stellar::KeyPair.from_raw_seed("allmylifemyhearthasbeensearching")
|
@@ -35,27 +34,27 @@ submit master, Stellar::Transaction.payment({
|
|
35
34
|
account: master,
|
36
35
|
destination: destination,
|
37
36
|
sequence: 1,
|
38
|
-
amount: [:native,
|
37
|
+
amount: [:native, 2000 * Stellar::ONE]
|
39
38
|
})
|
40
39
|
|
41
40
|
# NOTE: after this step, you need to get the sequence number for destination
|
42
41
|
# Which is based off of the ledger sequence number it was funded in.
|
43
42
|
gets # pause to get the account's sequence from the hayashi db
|
44
43
|
|
45
|
-
destination_sequence = FILL_ME_IN
|
44
|
+
destination_sequence = FILL_ME_IN
|
46
45
|
# destination_sequence = 17179869185
|
47
46
|
|
48
47
|
submit destination, Stellar::Transaction.change_trust({
|
49
48
|
account: destination,
|
50
49
|
sequence: destination_sequence,
|
51
|
-
line: [:
|
50
|
+
line: [:alphanum, "USD\x00", master],
|
52
51
|
limit: 1000
|
53
52
|
})
|
54
53
|
|
55
54
|
submit destination, Stellar::Transaction.change_trust({
|
56
55
|
account: destination,
|
57
56
|
sequence: destination_sequence + 1,
|
58
|
-
line: [:
|
57
|
+
line: [:alphanum, "EUR\x00", master],
|
59
58
|
limit: 1000
|
60
59
|
})
|
61
60
|
|
@@ -63,14 +62,14 @@ submit master, Stellar::Transaction.payment({
|
|
63
62
|
account: master,
|
64
63
|
destination: destination,
|
65
64
|
sequence: destination_sequence + 2,
|
66
|
-
amount: [:
|
65
|
+
amount: [:alphanum, "USD\x00", master, 1000]
|
67
66
|
})
|
68
67
|
|
69
68
|
submit master, Stellar::Transaction.create_offer({
|
70
69
|
account: destination,
|
71
70
|
sequence: destination_sequence + 3
|
72
|
-
taker_gets: [:
|
73
|
-
taker_pays: [:
|
71
|
+
taker_gets: [:alphanum, "USD\x00", usd_gateway],
|
72
|
+
taker_pays: [:alphanum, "EUR\x00", eur_gateway],
|
74
73
|
amount: 100,
|
75
74
|
price: 2.0,
|
76
75
|
})
|
@@ -9,14 +9,14 @@ tx1 = Stellar::Transaction.payment({
|
|
9
9
|
account: master,
|
10
10
|
destination: destination,
|
11
11
|
sequence: 1,
|
12
|
-
amount: [:native,
|
12
|
+
amount: [:native, 20 * Stellar::ONE]
|
13
13
|
})
|
14
14
|
|
15
15
|
tx2 = Stellar::Transaction.payment({
|
16
16
|
account: master,
|
17
17
|
destination: destination,
|
18
18
|
sequence: 2,
|
19
|
-
amount: [:native,
|
19
|
+
amount: [:native, 20 * Stellar::ONE]
|
20
20
|
})
|
21
21
|
|
22
22
|
hex = tx1.merge(tx2).to_envelope(master).to_xdr(:hex)
|
data/lib/stellar-base.rb
CHANGED
@@ -12,15 +12,17 @@ silence_warnings do
|
|
12
12
|
end
|
13
13
|
Stellar.load_all!
|
14
14
|
|
15
|
+
Stellar::ONE = 1_0000000
|
16
|
+
|
17
|
+
|
15
18
|
# extensions onto the generated files must be loaded manually, below
|
16
19
|
|
17
20
|
require_relative './stellar/account_flags'
|
18
21
|
require_relative './stellar/currency'
|
19
22
|
require_relative './stellar/key_pair'
|
20
23
|
require_relative './stellar/operation'
|
21
|
-
require_relative './stellar/payment_op'
|
22
24
|
require_relative './stellar/price'
|
23
25
|
require_relative './stellar/transaction'
|
24
26
|
require_relative './stellar/transaction_envelope'
|
25
27
|
require_relative './stellar/util/base58'
|
26
|
-
require_relative './stellar/util/continued_fraction'
|
28
|
+
require_relative './stellar/util/continued_fraction'
|
data/lib/stellar/base/version.rb
CHANGED
data/lib/stellar/currency.rb
CHANGED
@@ -4,8 +4,9 @@ module Stellar
|
|
4
4
|
new(:currency_type_native)
|
5
5
|
end
|
6
6
|
|
7
|
-
def self.
|
7
|
+
def self.alphanum(code, issuer)
|
8
8
|
raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
|
9
|
+
code = normalize_code(code)
|
9
10
|
an = AlphaNum.new({currency_code:code, issuer:issuer.public_key})
|
10
11
|
new(:currency_type_alphanum, an)
|
11
12
|
end
|
@@ -28,5 +29,11 @@ module Stellar
|
|
28
29
|
def code
|
29
30
|
self.alpha_num!.currency_code
|
30
31
|
end
|
32
|
+
|
33
|
+
def self.normalize_code(code)
|
34
|
+
raise ArgumentError, "Invalid currency code: #{code}, must be <= 4 bytes" if code.length > 4
|
35
|
+
|
36
|
+
code.ljust(4, "\x00")
|
37
|
+
end
|
31
38
|
end
|
32
|
-
end
|
39
|
+
end
|
data/lib/stellar/operation.rb
CHANGED
@@ -2,14 +2,14 @@ module Stellar
|
|
2
2
|
class Operation
|
3
3
|
|
4
4
|
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Construct a new Stellar::Operation from the provided
|
7
7
|
# source account and body
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# @param [Hash] attributes the attributes to create the operation with
|
10
10
|
# @option attributes [Stellar::KeyPair] :source_account
|
11
11
|
# @option attributes [Stellar::Operation::Body] :body
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# @return [Stellar::Operation] the built operation
|
14
14
|
def self.make(attributes={})
|
15
15
|
source_account = attributes[:source_account]
|
@@ -26,37 +26,70 @@ module Stellar
|
|
26
26
|
end
|
27
27
|
|
28
28
|
|
29
|
-
#
|
29
|
+
#
|
30
30
|
# Helper method to create a valid PaymentOp, wrapped
|
31
|
-
# in the necessary XDR structs to be included within a
|
31
|
+
# in the necessary XDR structs to be included within a
|
32
32
|
# transactions `operations` array.
|
33
|
-
#
|
33
|
+
#
|
34
34
|
# @see Stellar::Currency
|
35
|
-
#
|
35
|
+
#
|
36
36
|
# @param [Hash] attributes the attributes to create the operation with
|
37
37
|
# @option attributes [Stellar::KeyPair] :destination the receiver of the payment
|
38
38
|
# @option attributes [Array] :amount the amount to pay
|
39
|
-
# @
|
40
|
-
#
|
41
|
-
# @return [Stellar::Operation] the built operation, containing a
|
39
|
+
# @return [Stellar::Operation] the built operation, containing a
|
42
40
|
# Stellar::PaymentOp body
|
43
41
|
def self.payment(attributes={})
|
44
42
|
destination = attributes[:destination]
|
45
|
-
amount
|
46
|
-
# path = attributes[:path] || []
|
47
|
-
# path = path.map{|p| Stellar::Currency.send(*p)}
|
43
|
+
currency, amount = extract_amount(attributes[:amount])
|
48
44
|
|
49
45
|
raise ArgumentError unless destination.is_a?(KeyPair)
|
50
46
|
|
51
|
-
|
47
|
+
|
48
|
+
op = PaymentOp.new
|
49
|
+
op.currency = currency
|
50
|
+
op.amount = amount
|
52
51
|
op.destination = destination.public_key
|
53
|
-
op.apply_defaults
|
54
52
|
|
55
53
|
return make(attributes.merge({
|
56
54
|
body:[:payment, op]
|
57
55
|
}))
|
58
56
|
end
|
59
57
|
|
58
|
+
#
|
59
|
+
# Helper method to create a valid PathPaymentOp, wrapped
|
60
|
+
# in the necessary XDR structs to be included within a
|
61
|
+
# transactions `operations` array.
|
62
|
+
#
|
63
|
+
# @see Stellar::Currency
|
64
|
+
#
|
65
|
+
# @param [Hash] attributes the attributes to create the operation with
|
66
|
+
# @option attributes [Stellar::KeyPair] :destination the receiver of the payment
|
67
|
+
# @option attributes [Array] :amount the amount to pay
|
68
|
+
# @option attributes [Array] :with the source currency and maximum allowed source amount to pay with
|
69
|
+
# @option attributes [Array<Stellar::Currency>] :path the payment path to use
|
70
|
+
#
|
71
|
+
# @return [Stellar::Operation] the built operation, containing a
|
72
|
+
# Stellar::PaymentOp body
|
73
|
+
def self.path_payment(attributes={})
|
74
|
+
destination = attributes[:destination]
|
75
|
+
currency, amount = extract_amount(attributes[:amount])
|
76
|
+
send_currency, send_max = extract_amount(attributes[:with])
|
77
|
+
path = (attributes[:path] || []).map{|p| Stellar::Currency.send(*p)}
|
78
|
+
|
79
|
+
raise ArgumentError unless destination.is_a?(KeyPair)
|
80
|
+
|
81
|
+
op = PathPaymentOp.new
|
82
|
+
op.send_currency = send_currency
|
83
|
+
op.send_max = send_max
|
84
|
+
op.destination = destination.public_key
|
85
|
+
op.dest_currency = currency
|
86
|
+
op.dest_amount = amount
|
87
|
+
op.path = path
|
88
|
+
|
89
|
+
return make(attributes.merge({
|
90
|
+
body:[:path_payment, op]
|
91
|
+
}))
|
92
|
+
end
|
60
93
|
|
61
94
|
def self.create_account(attributes={})
|
62
95
|
destination = attributes[:destination]
|
@@ -73,16 +106,16 @@ module Stellar
|
|
73
106
|
}))
|
74
107
|
end
|
75
108
|
|
76
|
-
#
|
109
|
+
#
|
77
110
|
# Helper method to create a valid ChangeTrustOp, wrapped
|
78
|
-
# in the necessary XDR structs to be included within a
|
111
|
+
# in the necessary XDR structs to be included within a
|
79
112
|
# transactions `operations` array.
|
80
|
-
#
|
113
|
+
#
|
81
114
|
# @param [Hash] attributes the attributes to create the operation with
|
82
115
|
# @option attributes [Stellar::Currrency] :line the currency to trust
|
83
116
|
# @option attributes [Fixnum] :limit the maximum amount to trust
|
84
|
-
#
|
85
|
-
# @return [Stellar::Operation] the built operation, containing a
|
117
|
+
#
|
118
|
+
# @return [Stellar::Operation] the built operation, containing a
|
86
119
|
# Stellar::ChangeTrustOp body
|
87
120
|
def self.change_trust(attributes={})
|
88
121
|
line = Currency.send(*attributes[:line])
|
@@ -105,31 +138,31 @@ module Stellar
|
|
105
138
|
price = Price.from_f(attributes[:price])
|
106
139
|
|
107
140
|
op = CreateOfferOp.new({
|
108
|
-
taker_pays: taker_pays,
|
141
|
+
taker_pays: taker_pays,
|
109
142
|
taker_gets: taker_gets,
|
110
143
|
amount: amount,
|
111
144
|
price: price,
|
112
145
|
offer_id: offer_id
|
113
146
|
})
|
114
|
-
|
147
|
+
|
115
148
|
return make(attributes.merge({
|
116
149
|
body:[:create_offer, op]
|
117
150
|
}))
|
118
151
|
end
|
119
152
|
|
120
|
-
#
|
153
|
+
#
|
121
154
|
# Helper method to create a valid SetOptionsOp, wrapped
|
122
|
-
# in the necessary XDR structs to be included within a
|
155
|
+
# in the necessary XDR structs to be included within a
|
123
156
|
# transactions `operations` array.
|
124
|
-
#
|
157
|
+
#
|
125
158
|
# @param [Hash] attributes the attributes to create the operation with
|
126
159
|
# @option attributes [Stellar::KeyPair] :inflation_dest
|
127
160
|
# @option attributes [Array<Stellar::AccountFlags>] :set flags to set
|
128
161
|
# @option attributes [Array<Stellar::AccountFlags>] :clear flags to clear
|
129
162
|
# @option attributes [String] :thresholds
|
130
163
|
# @option attributes [Stellar::Signer] :signer
|
131
|
-
#
|
132
|
-
# @return [Stellar::Operation] the built operation, containing a
|
164
|
+
#
|
165
|
+
# @return [Stellar::Operation] the built operation, containing a
|
133
166
|
# Stellar::SetOptionsOp body
|
134
167
|
def self.set_options(attributes={})
|
135
168
|
op = SetOptionsOp.new()
|
@@ -145,35 +178,35 @@ module Stellar
|
|
145
178
|
op.inflation_dest = inflation_dest.public_key
|
146
179
|
end
|
147
180
|
|
148
|
-
|
181
|
+
|
149
182
|
return make(attributes.merge({
|
150
183
|
body:[:set_options, op]
|
151
184
|
}))
|
152
185
|
end
|
153
186
|
|
154
|
-
#
|
187
|
+
#
|
155
188
|
# Helper method to create a valid AllowTrustOp, wrapped
|
156
|
-
# in the necessary XDR structs to be included within a
|
189
|
+
# in the necessary XDR structs to be included within a
|
157
190
|
# transactions `operations` array.
|
158
|
-
#
|
191
|
+
#
|
159
192
|
# @param [Hash] attributes the attributes to create the operation with
|
160
193
|
# @option attributes [Stellar::KeyPair] :trustor
|
161
194
|
# @option attributes [Stellar::Currency] :currency
|
162
|
-
#
|
163
|
-
# @return [Stellar::Operation] the built operation, containing a
|
195
|
+
#
|
196
|
+
# @return [Stellar::Operation] the built operation, containing a
|
164
197
|
# Stellar::AllowTrustOp body
|
165
198
|
def self.allow_trust(attributes={})
|
166
199
|
op = AllowTrustOp.new()
|
167
|
-
|
200
|
+
|
168
201
|
trustor = attributes[:trustor]
|
169
202
|
authorize = attributes[:authorize]
|
170
203
|
currency = Currency.send(*attributes[:currency])
|
171
204
|
|
172
205
|
raise ArgumentError, "Bad :trustor" unless trustor.is_a?(Stellar::KeyPair)
|
173
206
|
raise ArgumentError, "Bad :authorize" unless authorize == !!authorize # check boolean
|
174
|
-
raise ArgumentError, "Bad :currency" unless currency.type == Stellar::CurrencyType.
|
207
|
+
raise ArgumentError, "Bad :currency" unless currency.type == Stellar::CurrencyType.alphanum
|
175
208
|
|
176
|
-
atc = AllowTrustOp::Currency.new(:
|
209
|
+
atc = AllowTrustOp::Currency.new(:alphanum, currency.code)
|
177
210
|
|
178
211
|
op.trustor = trustor.public_key
|
179
212
|
op.authorize = authorize
|
@@ -184,12 +217,12 @@ module Stellar
|
|
184
217
|
}))
|
185
218
|
end
|
186
219
|
|
187
|
-
#
|
220
|
+
#
|
188
221
|
# Helper method to create an account merge operation
|
189
|
-
#
|
222
|
+
#
|
190
223
|
# @param [Hash] attributes the attributes to create the operation with
|
191
224
|
# @option attributes [Stellar::KeyPair] :destination
|
192
|
-
#
|
225
|
+
#
|
193
226
|
# @return [Stellar::Operation] the built operation
|
194
227
|
def self.account_merge(attributes={})
|
195
228
|
destination = attributes[:destination]
|
@@ -202,12 +235,12 @@ module Stellar
|
|
202
235
|
}))
|
203
236
|
end
|
204
237
|
|
205
|
-
#
|
238
|
+
#
|
206
239
|
# Helper method to create an inflation operation
|
207
|
-
#
|
240
|
+
#
|
208
241
|
# @param [Hash] attributes the attributes to create the operation with
|
209
242
|
# @option attributes [Integer] :sequence
|
210
|
-
#
|
243
|
+
#
|
211
244
|
# @return [Stellar::Operation] the built operation
|
212
245
|
def self.inflation(attributes={})
|
213
246
|
sequence = attributes[:sequence]
|
@@ -219,5 +252,13 @@ module Stellar
|
|
219
252
|
body:[:inflation, sequence]
|
220
253
|
}))
|
221
254
|
end
|
255
|
+
|
256
|
+
private
|
257
|
+
def self.extract_amount(a)
|
258
|
+
amount = a.last
|
259
|
+
currency = Stellar::Currency.send(*a[0...-1])
|
260
|
+
|
261
|
+
return currency, amount
|
262
|
+
end
|
222
263
|
end
|
223
|
-
end
|
264
|
+
end
|
data/lib/stellar/transaction.rb
CHANGED
@@ -1,65 +1,71 @@
|
|
1
1
|
module Stellar
|
2
2
|
class Transaction
|
3
3
|
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# @see Stellar::Operation.payment
|
6
6
|
def self.payment(attributes={})
|
7
7
|
make :payment, attributes
|
8
8
|
end
|
9
9
|
|
10
|
-
#
|
10
|
+
#
|
11
|
+
# @see Stellar::Operation.path_payment
|
12
|
+
def self.path_payment(attributes={})
|
13
|
+
make :path_payment, attributes
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
11
17
|
# @see Stellar::Operation.create_account
|
12
18
|
def self.create_account(attributes={})
|
13
19
|
make :create_account, attributes
|
14
20
|
end
|
15
21
|
|
16
|
-
#
|
22
|
+
#
|
17
23
|
# @see Stellar::Operation.change_trust
|
18
24
|
def self.change_trust(attributes={})
|
19
25
|
make :change_trust, attributes
|
20
26
|
end
|
21
27
|
|
22
|
-
#
|
28
|
+
#
|
23
29
|
# @see Stellar::Operation.create_offer
|
24
30
|
def self.create_offer(attributes={})
|
25
31
|
make :create_offer, attributes
|
26
32
|
end
|
27
33
|
|
28
|
-
#
|
34
|
+
#
|
29
35
|
# @see Stellar::Operation.set_options
|
30
36
|
def self.set_options(attributes={})
|
31
37
|
make :set_options, attributes
|
32
38
|
end
|
33
39
|
|
34
|
-
#
|
40
|
+
#
|
35
41
|
# @see Stellar::Operation.allow_trust
|
36
42
|
def self.allow_trust(attributes={})
|
37
43
|
make :allow_trust, attributes
|
38
44
|
end
|
39
|
-
|
40
|
-
#
|
45
|
+
|
46
|
+
#
|
41
47
|
# @see Stellar::Operation.account_merge
|
42
48
|
def self.account_merge(attributes={})
|
43
49
|
make :account_merge, attributes
|
44
50
|
end
|
45
|
-
|
46
|
-
#
|
51
|
+
|
52
|
+
#
|
47
53
|
# @see Stellar::Operation.inflation
|
48
54
|
def self.inflation(attributes={})
|
49
55
|
make :inflation, attributes
|
50
56
|
end
|
51
57
|
|
52
|
-
#
|
58
|
+
#
|
53
59
|
# Helper method to create a transaction with a single
|
54
60
|
# operation of the provided type. See class methods
|
55
|
-
# on Stellar::Operation for available values for
|
61
|
+
# on Stellar::Operation for available values for
|
56
62
|
# operation_type.
|
57
|
-
#
|
63
|
+
#
|
58
64
|
# @see Stellar::Operation
|
59
|
-
#
|
65
|
+
#
|
60
66
|
# @param operation_type [Symbol] the operation to use
|
61
67
|
# @param attributes={} [Hash] attributes to use for both the transaction and the operation
|
62
|
-
#
|
68
|
+
#
|
63
69
|
# @return [Stellar::Transaction] the resulting transaction
|
64
70
|
def self.make(operation_type, attributes={})
|
65
71
|
for_account(attributes).tap do |result|
|
@@ -68,20 +74,20 @@ module Stellar
|
|
68
74
|
end
|
69
75
|
|
70
76
|
|
71
|
-
#
|
72
|
-
# Helper method to create the skeleton of a transaction.
|
77
|
+
#
|
78
|
+
# Helper method to create the skeleton of a transaction.
|
73
79
|
# The resulting transaction will have its source account,
|
74
|
-
# sequence, fee, min ledger and max ledger set.
|
75
|
-
#
|
76
|
-
#
|
80
|
+
# sequence, fee, min ledger and max ledger set.
|
81
|
+
#
|
82
|
+
#
|
77
83
|
# @param attributes={} [type] [description]
|
78
|
-
#
|
84
|
+
#
|
79
85
|
# @return [Stellar::Transaction] the resulting skeleton
|
80
86
|
def self.for_account(attributes={})
|
81
87
|
account = attributes[:account]
|
82
88
|
sequence = attributes[:sequence]
|
83
89
|
fee = attributes[:fee]
|
84
|
-
|
90
|
+
|
85
91
|
raise ArgumentError, "Bad :account" unless account.is_a?(KeyPair) && account.sign?
|
86
92
|
raise ArgumentError, "Bad :sequence #{sequence}" unless sequence.is_a?(Integer)
|
87
93
|
raise ArgumentError, "Bad :fee #{sequence}" if fee.present? && !fee.is_a?(Integer)
|
@@ -108,7 +114,7 @@ module Stellar
|
|
108
114
|
|
109
115
|
def to_envelope(*key_pairs)
|
110
116
|
signatures = key_pairs.map(&method(:sign_decorated))
|
111
|
-
|
117
|
+
|
112
118
|
TransactionEnvelope.new({
|
113
119
|
:signatures => signatures,
|
114
120
|
:tx => self
|
@@ -122,12 +128,12 @@ module Stellar
|
|
122
128
|
end
|
123
129
|
|
124
130
|
|
125
|
-
#
|
131
|
+
#
|
126
132
|
# Extracts the operations from this single transaction,
|
127
133
|
# setting the source account on the extracted operations.
|
128
|
-
#
|
134
|
+
#
|
129
135
|
# Useful for merging transactions.
|
130
|
-
#
|
136
|
+
#
|
131
137
|
# @return [Array<Operation>] the operations
|
132
138
|
def to_operations
|
133
139
|
cloned = Marshal.load Marshal.dump(operations)
|
@@ -142,4 +148,4 @@ module Stellar
|
|
142
148
|
self.memo ||= Memo.new(:memo_none)
|
143
149
|
end
|
144
150
|
end
|
145
|
-
end
|
151
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stellar-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Fleckenstein
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xdr
|
@@ -299,7 +299,6 @@ files:
|
|
299
299
|
- lib/stellar/currency.rb
|
300
300
|
- lib/stellar/key_pair.rb
|
301
301
|
- lib/stellar/operation.rb
|
302
|
-
- lib/stellar/payment_op.rb
|
303
302
|
- lib/stellar/price.rb
|
304
303
|
- lib/stellar/transaction.rb
|
305
304
|
- lib/stellar/transaction_envelope.rb
|
data/lib/stellar/payment_op.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
module Stellar
|
2
|
-
class PaymentOp
|
3
|
-
|
4
|
-
def self.native(amount)
|
5
|
-
currency = Stellar::Currency.native
|
6
|
-
with_currency(currency).tap do |result|
|
7
|
-
result.amount = amount
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.iso4217(code, issuer, amount)
|
12
|
-
currency = Stellar::Currency.iso4217(code, issuer)
|
13
|
-
with_currency(currency).tap do |result|
|
14
|
-
result.amount = amount
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.with_currency(currency)
|
19
|
-
new.tap do |result|
|
20
|
-
result.currency = currency
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def apply_defaults
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|