stellar-base 0.0.9 → 0.0.10
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/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
|