stellar-base 0.23.1 → 0.24.0.pre.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 +4 -4
- data/CHANGELOG.md +88 -0
- data/generated/stellar-base-generated.rb +29 -1
- data/generated/stellar/account_entry.rb +3 -13
- data/generated/stellar/account_entry/ext.rb +2 -16
- data/generated/stellar/account_entry_extension_v1.rb +32 -0
- data/generated/stellar/account_entry_extension_v1/ext.rb +28 -0
- data/generated/stellar/account_entry_extension_v2.rb +34 -0
- data/generated/stellar/{account_entry/ext/v1 → account_entry_extension_v2}/ext.rb +8 -12
- data/generated/stellar/account_merge_result_code.rb +3 -1
- data/generated/stellar/begin_sponsoring_future_reserves_op.rb +18 -0
- data/generated/stellar/begin_sponsoring_future_reserves_result.rb +25 -0
- data/generated/stellar/begin_sponsoring_future_reserves_result_code.rb +29 -0
- data/generated/stellar/claim_claimable_balance_op.rb +18 -0
- data/generated/stellar/claim_claimable_balance_result.rb +25 -0
- data/generated/stellar/claim_claimable_balance_result_code.rb +31 -0
- data/generated/stellar/claim_predicate.rb +43 -0
- data/generated/stellar/claim_predicate_type.rb +30 -0
- data/generated/stellar/claimable_balance_entry.rb +44 -0
- data/generated/stellar/claimable_balance_entry/ext.rb +24 -0
- data/generated/stellar/claimable_balance_id.rb +23 -0
- data/generated/stellar/claimable_balance_id_type.rb +20 -0
- data/generated/stellar/claimant.rb +31 -0
- data/generated/stellar/claimant/v0.rb +22 -0
- data/generated/stellar/claimant_type.rb +20 -0
- data/generated/stellar/create_claimable_balance_op.rb +22 -0
- data/generated/stellar/create_claimable_balance_result.rb +27 -0
- data/generated/stellar/create_claimable_balance_result_code.rb +30 -0
- data/generated/stellar/end_sponsoring_future_reserves_result.rb +25 -0
- data/generated/stellar/end_sponsoring_future_reserves_result_code.rb +25 -0
- data/generated/stellar/envelope_type.rb +3 -1
- data/generated/stellar/inner_transaction_result.rb +2 -1
- data/generated/stellar/inner_transaction_result/result.rb +3 -1
- data/generated/stellar/ledger_entry.rb +4 -0
- data/generated/stellar/ledger_entry/data.rb +12 -8
- data/generated/stellar/ledger_entry/ext.rb +4 -0
- data/generated/stellar/ledger_entry_extension_v1.rb +30 -0
- data/generated/stellar/ledger_entry_extension_v1/ext.rb +24 -0
- data/generated/stellar/ledger_entry_type.rb +7 -5
- data/generated/stellar/ledger_key.rb +17 -8
- data/generated/stellar/ledger_key/claimable_balance.rb +20 -0
- data/generated/stellar/operation.rb +10 -0
- data/generated/stellar/operation/body.rb +45 -26
- data/generated/stellar/operation_id.rb +32 -0
- data/generated/stellar/operation_id/id.rb +24 -0
- data/generated/stellar/operation_result.rb +10 -0
- data/generated/stellar/operation_result/tr.rb +48 -28
- data/generated/stellar/operation_result_code.rb +3 -1
- data/generated/stellar/operation_type.rb +25 -15
- data/generated/stellar/path_payment_strict_receive_result.rb +2 -1
- data/generated/stellar/revoke_sponsorship_op.rb +36 -0
- data/generated/stellar/revoke_sponsorship_op/signer.rb +22 -0
- data/generated/stellar/revoke_sponsorship_result.rb +25 -0
- data/generated/stellar/revoke_sponsorship_result_code.rb +31 -0
- data/generated/stellar/revoke_sponsorship_type.rb +22 -0
- data/generated/stellar/transaction_result_code.rb +4 -2
- data/lib/stellar-base.rb +15 -5
- data/lib/stellar/account_flags.rb +1 -1
- data/lib/stellar/{version.rb → base/version.rb} +1 -1
- data/lib/stellar/claim_predicate.rb +198 -0
- data/lib/stellar/compat.rb +2 -11
- data/lib/stellar/dsl.rb +85 -0
- data/lib/stellar/ext/xdr.rb +49 -0
- data/lib/stellar/key_pair.rb +43 -35
- data/lib/stellar/ledger_key.rb +30 -0
- data/lib/stellar/networks.rb +12 -12
- data/lib/stellar/operation.rb +58 -1
- data/lib/stellar/price.rb +11 -2
- data/lib/stellar/transaction.rb +0 -168
- data/lib/stellar/transaction_builder.rb +28 -2
- data/lib/stellar/transaction_envelope.rb +3 -29
- data/lib/stellar/util/strkey.rb +6 -6
- metadata +162 -32
- data/generated/stellar/account_entry/ext/v1.rb +0 -34
- data/lib/stellar/util/continued_fraction.rb +0 -96
data/lib/stellar/compat.rb
CHANGED
@@ -3,17 +3,8 @@ require "active_support/deprecation"
|
|
3
3
|
Stellar::Deprecation ||= ActiveSupport::Deprecation.new("next release", "stellar-base")
|
4
4
|
|
5
5
|
class << Stellar::Operation
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
deprecate deprecator: Stellar::Deprecation,
|
10
|
-
manage_offer: :manage_sell_offer,
|
11
|
-
create_passive_offer: :create_passive_sell_offer
|
12
|
-
end
|
13
|
-
|
14
|
-
class << Stellar::Transaction
|
15
|
-
alias manage_offer manage_sell_offer
|
16
|
-
alias create_passive_offer create_passive_sell_offer
|
6
|
+
alias_method :manage_offer, :manage_sell_offer
|
7
|
+
alias_method :create_passive_offer, :create_passive_sell_offer
|
17
8
|
|
18
9
|
deprecate deprecator: Stellar::Deprecation,
|
19
10
|
manage_offer: :manage_sell_offer,
|
data/lib/stellar/dsl.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
module Stellar
|
2
|
+
module DSL
|
3
|
+
# Constructs a new ClaimPredicate using DSL
|
4
|
+
#
|
5
|
+
# @example fulfilled during [T+5min, T+60min] period, where T refers to claimable balance entry creation time
|
6
|
+
# Stellar::ClaimPredicate { before_relative_time(1.hour) & ~before_relative_time(5.minutes) }
|
7
|
+
#
|
8
|
+
# @example not fulfilled starting from today midnight until tomorrow midnight,
|
9
|
+
# Stellar::ClaimPredicate { before_absolute_time(Date.today.end_of_day) | ~before_absolute_time(Date.tomorrow.end_of_day) }
|
10
|
+
#
|
11
|
+
# @example always fulfilled
|
12
|
+
# Stellar::ClaimPredicate { }
|
13
|
+
def ClaimPredicate(&block)
|
14
|
+
return ClaimPredicate.unconditional unless block
|
15
|
+
ClaimPredicate.compose(&block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def Claimant(destination, &block)
|
19
|
+
Claimant.new(
|
20
|
+
ClaimantType.claimant_type_v0,
|
21
|
+
Claimant::V0.new(
|
22
|
+
destination: KeyPair(destination).account_id,
|
23
|
+
predicate: ClaimPredicate(&block)
|
24
|
+
)
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def Asset(subject = nil)
|
29
|
+
case subject
|
30
|
+
when Asset
|
31
|
+
subject
|
32
|
+
when nil, /^(XLM[-:])?native$/
|
33
|
+
Asset.native
|
34
|
+
when /^([0-9A-Z]{1,4})[-:](G[A-Z0-9]{55})$/
|
35
|
+
Asset.alphanum4($1, KeyPair($2))
|
36
|
+
when /^([0-9A-Z]{5,12})[-:](G[A-Z0-9]{55})$/
|
37
|
+
Asset.alphanum12($1, KeyPair($2))
|
38
|
+
else
|
39
|
+
raise TypeError, "Cannot convert #{subject.inspect} to Stellar::Asset"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Generates Stellar::Keypair from subject, use Stellar::Client.to_keypair as shortcut.
|
44
|
+
# @param subject [String|Stellar::Account|Stellar::PublicKey|Stellar::SignerKey|Stellar::Keypair] subject.
|
45
|
+
# @return [Stellar::Keypair] Stellar::Keypair instance.
|
46
|
+
def KeyPair(subject = nil)
|
47
|
+
case subject
|
48
|
+
when ->(subj) { subj.respond_to?(:to_keypair) }
|
49
|
+
subject.to_keypair
|
50
|
+
when /G[A-Z0-9]{55}/
|
51
|
+
KeyPair.from_address(subject)
|
52
|
+
when /S[A-Z0-9]{55}/
|
53
|
+
KeyPair.from_seed(subject)
|
54
|
+
when PublicKey
|
55
|
+
KeyPair.from_public_key(subject.value)
|
56
|
+
when SignerKey
|
57
|
+
KeyPair.from_raw_seed(subject.value)
|
58
|
+
when nil
|
59
|
+
KeyPair.random
|
60
|
+
else
|
61
|
+
raise TypeError, "cannot convert #{subject.inspect} to Stellar::KeyPair"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Provides conversion from different input types into the SignerKey to use in ManageData operation.
|
66
|
+
# @param input [String|zStellar::Account|Stellar::PublicKey|Stellar::SignerKey|Stellar::Keypair] subject.
|
67
|
+
# @return [Stellar::SignerKey] Stellar::Keypair instance.
|
68
|
+
def SignerKey(input = nil)
|
69
|
+
case input
|
70
|
+
when Transaction
|
71
|
+
SignerKey.pre_auth_tx(input.hash)
|
72
|
+
when /^[0-9A-Za-z+\/=]{44}$/
|
73
|
+
SignerKey.hash_x(Stellar::Convert.from_base64(input))
|
74
|
+
when /^[0-9a-f]{64}$/
|
75
|
+
SignerKey.hash_x(Stellar::Convert.from_hex(input))
|
76
|
+
when /^.{32}$/
|
77
|
+
SignerKey.hash_x(input)
|
78
|
+
else
|
79
|
+
SignerKey.ed25519(KeyPair(input))
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
extend DSL
|
85
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "active_support/core_ext/string/inflections"
|
2
|
+
require "xdr"
|
3
|
+
|
4
|
+
# For every member of XDR::Enum define constant on the corresponding enum type class.
|
5
|
+
# Constant name is a member name stripped of the common prefix with enum type name.
|
6
|
+
XDR::DSL::Enum.redefine_method(:seal) do
|
7
|
+
names = [members.keys.first, name.demodulize.underscore + "_"].join(" ")
|
8
|
+
common_prefix = /\A(.*_).* \1.*\Z/.match(names)&.values_at(1)&.first
|
9
|
+
members.each do |name, value|
|
10
|
+
unless common_prefix.nil?
|
11
|
+
full_name, name = [name, name.delete_prefix(common_prefix)]
|
12
|
+
singleton_class.alias_method(name, full_name)
|
13
|
+
end
|
14
|
+
const_set(name.upcase, value)
|
15
|
+
end
|
16
|
+
self.sealed = true
|
17
|
+
end
|
18
|
+
|
19
|
+
XDR::DSL::Union.redefine_method(:switch) do |switch, arm = nil|
|
20
|
+
raise ArgumentError, "`switch_on` not defined yet" if switch_type.nil?
|
21
|
+
|
22
|
+
switch = normalize_switch_declaration(switch)
|
23
|
+
self.switches = switches.merge(switch => arm)
|
24
|
+
|
25
|
+
unless arm.nil?
|
26
|
+
define_singleton_method(arm) do |*args, **kwargs|
|
27
|
+
value_type = arms[arm]
|
28
|
+
value = if value_type.valid?(args.first)
|
29
|
+
args.first
|
30
|
+
elsif value_type.ancestors.include?(XDR::Struct)
|
31
|
+
value_type.new(kwargs)
|
32
|
+
elsif value_type.ancestors.include?(XDR::Union)
|
33
|
+
value_type.new(*args[0..1])
|
34
|
+
else
|
35
|
+
args.first
|
36
|
+
end
|
37
|
+
new(switch, value)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# XDR::Union generates an attribute method for each `arm`, but lacks the
|
43
|
+
# actual `attribute(attr)` method those generated methods delegate to.
|
44
|
+
# We follow the semantics of the bang variant `XDR::Union#attribute!` method,
|
45
|
+
# except that calls to `raise` are replaced with early returns of nil.
|
46
|
+
XDR::Union.define_method(:attribute) do |attr|
|
47
|
+
return unless @arm.to_s == attr
|
48
|
+
get
|
49
|
+
end
|
data/lib/stellar/key_pair.rb
CHANGED
@@ -1,40 +1,44 @@
|
|
1
1
|
module Stellar
|
2
2
|
class KeyPair
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
3
|
+
module FactoryMethods
|
4
|
+
def from_seed(seed)
|
5
|
+
seed_bytes = Util::StrKey.check_decode(:seed, seed)
|
6
|
+
from_raw_seed seed_bytes
|
7
|
+
end
|
8
|
+
|
9
|
+
def from_raw_seed(seed_bytes)
|
10
|
+
secret_key = RbNaCl::SigningKey.new(seed_bytes)
|
11
|
+
public_key = secret_key.verify_key
|
12
|
+
new(public_key, secret_key)
|
13
|
+
end
|
14
|
+
|
15
|
+
def from_public_key(pk_bytes)
|
16
|
+
public_key = RbNaCl::VerifyKey.new(pk_bytes)
|
17
|
+
new(public_key)
|
18
|
+
end
|
19
|
+
|
20
|
+
def from_address(address)
|
21
|
+
pk_bytes = Util::StrKey.check_decode(:account_id, address)
|
22
|
+
from_public_key(pk_bytes)
|
23
|
+
end
|
24
|
+
|
25
|
+
def random
|
26
|
+
secret_key = RbNaCl::SigningKey.generate
|
27
|
+
public_key = secret_key.verify_key
|
28
|
+
new(public_key, secret_key)
|
29
|
+
end
|
30
|
+
|
31
|
+
def from_network_passphrase(passphrase)
|
32
|
+
network_id = Digest::SHA256.digest(passphrase)
|
33
|
+
from_raw_seed network_id
|
34
|
+
end
|
35
|
+
|
36
|
+
def master
|
37
|
+
from_raw_seed(Stellar.current_network_id)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
extend FactoryMethods
|
38
42
|
|
39
43
|
def initialize(public_key, secret_key = nil)
|
40
44
|
@public_key = public_key
|
@@ -115,5 +119,9 @@ module Stellar
|
|
115
119
|
rescue RbNaCl::BadSignatureError
|
116
120
|
false
|
117
121
|
end
|
122
|
+
|
123
|
+
def to_keypair
|
124
|
+
self
|
125
|
+
end
|
118
126
|
end
|
119
127
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "stellar/convert"
|
2
|
+
require "stellar/dsl"
|
3
|
+
|
4
|
+
module Stellar
|
5
|
+
class LedgerKey
|
6
|
+
class << self
|
7
|
+
def switch_for_arm(name)
|
8
|
+
(@switch_by_arm ||= switches.invert).fetch(name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def from(account_id:, **options)
|
12
|
+
field, value = options.first
|
13
|
+
case field
|
14
|
+
when nil
|
15
|
+
account(account_id: Stellar.KeyPair(account_id).account_id)
|
16
|
+
when :balance_id
|
17
|
+
claimable_balance(balance_id: ClaimableBalanceID.v0(Stellar::Convert.from_hex(value.to_s)))
|
18
|
+
when :offer_id
|
19
|
+
offer(seller_id: account_id, offer_id: Integer(value))
|
20
|
+
when :data_name
|
21
|
+
data(account_id: account_id, data_name: value.to_s)
|
22
|
+
when :asset
|
23
|
+
trust_line(account_id: account_id, asset: Stellar.Asset(value))
|
24
|
+
else
|
25
|
+
raise ArgumentError, "unknown option #{field} (not in :asset, :offer_id, :data_name, :balance_id)"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/stellar/networks.rb
CHANGED
@@ -12,18 +12,18 @@ module Stellar
|
|
12
12
|
# methods of specifying a network if you need two threads in the same process to communicate with
|
13
13
|
# different networks
|
14
14
|
#
|
15
|
-
# @see Stellar.default_network
|
16
15
|
# @see Stellar.on_network
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
mattr_accessor :default_network, default: Networks::TESTNET
|
17
|
+
|
18
|
+
# Stellar network passphrase selected for current thread
|
19
|
+
#
|
20
|
+
# @see Stellar.current_network
|
21
|
+
# @see Stellar.on_network
|
22
|
+
thread_mattr_accessor :network
|
20
23
|
|
21
|
-
# Returns the passphrase for the currently-
|
22
|
-
# or Stellar.on_network
|
24
|
+
# Returns the passphrase for the network currently active per-thread with a fallback to `Stellar.default_network`
|
23
25
|
def self.current_network
|
24
|
-
|
25
|
-
@default_network ||
|
26
|
-
Stellar::Networks::TESTNET
|
26
|
+
network.presence || default_network
|
27
27
|
end
|
28
28
|
|
29
29
|
# Returns the id for the currently configured network, suitable for use in generating
|
@@ -34,10 +34,10 @@ module Stellar
|
|
34
34
|
|
35
35
|
# Executes the provided block in the context of the provided network.
|
36
36
|
def self.on_network(passphrase, &block)
|
37
|
-
old =
|
38
|
-
|
37
|
+
old = network
|
38
|
+
self.network = passphrase
|
39
39
|
block.call
|
40
40
|
ensure
|
41
|
-
|
41
|
+
self.network = old
|
42
42
|
end
|
43
43
|
end
|
data/lib/stellar/operation.rb
CHANGED
@@ -168,7 +168,6 @@ module Stellar
|
|
168
168
|
}))
|
169
169
|
end
|
170
170
|
|
171
|
-
#
|
172
171
|
# Helper method to create a valid ChangeTrustOp, wrapped
|
173
172
|
# in the necessary XDR structs to be included within a
|
174
173
|
# transactions `operations` array.
|
@@ -200,6 +199,64 @@ module Stellar
|
|
200
199
|
}))
|
201
200
|
end
|
202
201
|
|
202
|
+
# Helper method to create a valid CreateClaimableBalanceOp, ready to be used
|
203
|
+
# within a transactions `operations` array.
|
204
|
+
#
|
205
|
+
# @see Stellar::DSL::Claimant
|
206
|
+
# @see https://github.com/astroband/ruby-stellar-sdk/tree/master/base/examples/claimable_balances.rb
|
207
|
+
#
|
208
|
+
# @param asset [Asset] the asset to transfer to a claimable balance
|
209
|
+
# @param amount [Fixnum] the amount of `asset` to put into a claimable balance
|
210
|
+
# @param claimants [Array<Claimant>] accounts authorized to claim the balance in the future
|
211
|
+
#
|
212
|
+
# @return [Operation] the built operation
|
213
|
+
def create_claimable_balance(asset:, amount:, claimants:, **attributes)
|
214
|
+
op = CreateClaimableBalanceOp.new(asset: asset, amount: amount, claimants: claimants)
|
215
|
+
|
216
|
+
make(attributes.merge(body: [:create_claimable_balance, op]))
|
217
|
+
end
|
218
|
+
|
219
|
+
# Helper method to create a valid CreateClaimableBalanceOp, ready to be used
|
220
|
+
# within a transactions `operations` array.
|
221
|
+
#
|
222
|
+
# @see Stellar::DSL::Claimant
|
223
|
+
# @see https://github.com/astroband/ruby-stellar-sdk/tree/master/base/examples/claimable_balances.rb
|
224
|
+
#
|
225
|
+
# @param balance_id [ClaimableBalanceID] unique ID of claimable balance
|
226
|
+
#
|
227
|
+
# @return [Operation] the built operation, containing a Stellar::ChangeTrustOp body
|
228
|
+
def claim_claimable_balance(balance_id:, **attributes)
|
229
|
+
op = ClaimClaimableBalanceOp.new(balance_id: balance_id)
|
230
|
+
|
231
|
+
make(attributes.merge(body: [:claim_claimable_balance, op]))
|
232
|
+
end
|
233
|
+
|
234
|
+
def begin_sponsoring_future_reserves(sponsored:, **attributes)
|
235
|
+
op = BeginSponsoringFutureReservesOp.new(
|
236
|
+
sponsored_id: Stellar.KeyPair(sponsored).account_id
|
237
|
+
)
|
238
|
+
|
239
|
+
make(attributes.merge(body: [:begin_sponsoring_future_reserves, op]))
|
240
|
+
end
|
241
|
+
|
242
|
+
def end_sponsoring_future_reserves(**attributes)
|
243
|
+
make(attributes.merge(body: [:end_sponsoring_future_reserves]))
|
244
|
+
end
|
245
|
+
|
246
|
+
# @param sponsored [#to_keypair] owner of sponsored entry
|
247
|
+
def revoke_sponsorship(sponsored:, **attributes)
|
248
|
+
key_fields = attributes.slice(:offer_id, :data_name, :balance_id, :asset, :signer)
|
249
|
+
raise ArgumentError, "conflicting attributes: #{key_fields.keys.join(", ")}" if key_fields.size > 1
|
250
|
+
account_id = Stellar.KeyPair(sponsored).account_id
|
251
|
+
key, value = key_fields.first
|
252
|
+
op = if key == :signer
|
253
|
+
RevokeSponsorshipOp.signer(account_id: account_id, signer_key: Stellar.SignerKey(value))
|
254
|
+
else
|
255
|
+
RevokeSponsorshipOp.ledger_key(LedgerKey.from(account_id: account_id, **key_fields))
|
256
|
+
end
|
257
|
+
make(attributes.merge(body: [:revoke_sponsorship, op]))
|
258
|
+
end
|
259
|
+
|
203
260
|
def manage_sell_offer(attributes = {})
|
204
261
|
buying = attributes[:buying]
|
205
262
|
if buying.is_a?(Array)
|
data/lib/stellar/price.rb
CHANGED
@@ -4,7 +4,12 @@ module Stellar
|
|
4
4
|
MAX_PRECISION = (2**31) - 1
|
5
5
|
|
6
6
|
def self.from_f(number)
|
7
|
-
best_r =
|
7
|
+
best_r = number.to_r.rationalize(1.0e-7)
|
8
|
+
|
9
|
+
if best_r.numerator > MAX_PRECISION || best_r.denominator > MAX_PRECISION
|
10
|
+
raise ArgumentError("Couldn't find price approximation")
|
11
|
+
end
|
12
|
+
|
8
13
|
new({
|
9
14
|
n: best_r.numerator,
|
10
15
|
d: best_r.denominator
|
@@ -15,8 +20,12 @@ module Stellar
|
|
15
20
|
self.class.new(n: d, d: n)
|
16
21
|
end
|
17
22
|
|
23
|
+
def to_d
|
24
|
+
n.to_d / d
|
25
|
+
end
|
26
|
+
|
18
27
|
def to_f
|
19
|
-
n / d
|
28
|
+
n.to_f / d
|
20
29
|
end
|
21
30
|
|
22
31
|
def to_s
|
data/lib/stellar/transaction.rb
CHANGED
@@ -2,174 +2,6 @@ module Stellar
|
|
2
2
|
class Transaction
|
3
3
|
include Stellar::Concerns::Transaction
|
4
4
|
|
5
|
-
class << self
|
6
|
-
#
|
7
|
-
# @see Stellar::Operation.payment
|
8
|
-
def payment(attributes = {})
|
9
|
-
make :payment, attributes
|
10
|
-
end
|
11
|
-
|
12
|
-
#
|
13
|
-
# @see Stellar::Operation.path_payment
|
14
|
-
def path_payment(attributes = {})
|
15
|
-
make :path_payment, attributes
|
16
|
-
end
|
17
|
-
|
18
|
-
#
|
19
|
-
# @see Stellar::Operation.path_payment_strict_receive
|
20
|
-
def path_payment_strict_receive(attributes = {})
|
21
|
-
make :path_payment_strict_receive, attributes
|
22
|
-
end
|
23
|
-
|
24
|
-
#
|
25
|
-
# @see Stellar::Operation.path_payment_strict_send
|
26
|
-
def path_payment_strict_send(attributes = {})
|
27
|
-
make :path_payment_strict_send, attributes
|
28
|
-
end
|
29
|
-
|
30
|
-
#
|
31
|
-
# @see Stellar::Operation.create_account
|
32
|
-
def create_account(attributes = {})
|
33
|
-
make :create_account, attributes
|
34
|
-
end
|
35
|
-
|
36
|
-
#
|
37
|
-
# @see Stellar::Operation.change_trust
|
38
|
-
def change_trust(attributes = {})
|
39
|
-
make :change_trust, attributes
|
40
|
-
end
|
41
|
-
|
42
|
-
#
|
43
|
-
# @see Stellar::Operation.manage_sell_offer
|
44
|
-
def manage_sell_offer(attributes = {})
|
45
|
-
make :manage_sell_offer, attributes
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
# @see Stellar::Operation.manage_buy_offer
|
50
|
-
def manage_buy_offer(attributes = {})
|
51
|
-
make :manage_buy_offer, attributes
|
52
|
-
end
|
53
|
-
|
54
|
-
#
|
55
|
-
# @see Stellar::Operation.create_passive_sell_offer
|
56
|
-
def create_passive_sell_offer(attributes = {})
|
57
|
-
make :create_passive_sell_offer, attributes
|
58
|
-
end
|
59
|
-
|
60
|
-
#
|
61
|
-
# @see Stellar::Operation.set_options
|
62
|
-
def set_options(attributes = {})
|
63
|
-
make :set_options, attributes
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# @see Stellar::Operation.allow_trust
|
68
|
-
def allow_trust(attributes = {})
|
69
|
-
make :allow_trust, attributes
|
70
|
-
end
|
71
|
-
|
72
|
-
#
|
73
|
-
# @see Stellar::Operation.account_merge
|
74
|
-
def account_merge(attributes = {})
|
75
|
-
make :account_merge, attributes
|
76
|
-
end
|
77
|
-
|
78
|
-
#
|
79
|
-
# @see Stellar::Operation.inflation
|
80
|
-
def inflation(attributes = {})
|
81
|
-
make :inflation, attributes
|
82
|
-
end
|
83
|
-
|
84
|
-
#
|
85
|
-
# @see Stellar::Operation.manage_data
|
86
|
-
def manage_data(attributes = {})
|
87
|
-
make :manage_data, attributes
|
88
|
-
end
|
89
|
-
|
90
|
-
#
|
91
|
-
# @see Stellar::Operation.manage_data
|
92
|
-
def bump_sequence(attributes = {})
|
93
|
-
make :bump_sequence, attributes
|
94
|
-
end
|
95
|
-
|
96
|
-
#
|
97
|
-
# DEPRECATED
|
98
|
-
#
|
99
|
-
# All methods calling make() have been deprecated in favor of Stellar::TransactionBuilder.
|
100
|
-
# These functions only create single-operation transactions and essentially duplicate the
|
101
|
-
# methods provided by Stellar::Operation. Stellar::TransactionBuilder enables the construction
|
102
|
-
# of multi-operation transactions and mirrors the functionality provided by the Python and
|
103
|
-
# JavaScript SDKs.
|
104
|
-
#
|
105
|
-
# Helper method to create a transaction with a single
|
106
|
-
# operation of the provided type. See class methods
|
107
|
-
# on Stellar::Operation for available values for
|
108
|
-
# operation_type.
|
109
|
-
#
|
110
|
-
# @see Stellar::Operation
|
111
|
-
#
|
112
|
-
# @param operation_type [Symbol] the operation to use
|
113
|
-
# @param attributes={} [Hash] attributes to use for both the transaction and the operation
|
114
|
-
#
|
115
|
-
# @return [Stellar::Transaction] the resulting transaction
|
116
|
-
def make(operation_type, attributes = {})
|
117
|
-
Stellar::Deprecation.warn(
|
118
|
-
"Transaction.#{operation_type} is deprecated. Use Stellar::TransactionBuilder instead."
|
119
|
-
)
|
120
|
-
for_account(attributes).tap do |result|
|
121
|
-
result.operations << Operation.send(operation_type, attributes)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
#
|
126
|
-
# Helper method to create the skeleton of a transaction.
|
127
|
-
# The resulting transaction will have its source account,
|
128
|
-
# sequence, fee, min ledger and max ledger set.
|
129
|
-
#
|
130
|
-
#
|
131
|
-
# @param attributes={} [type] [description]
|
132
|
-
#
|
133
|
-
# @return [Stellar::Transaction] the resulting skeleton
|
134
|
-
def for_account(attributes = {})
|
135
|
-
account = attributes[:account]
|
136
|
-
sequence = attributes[:sequence]
|
137
|
-
fee = attributes[:fee]
|
138
|
-
|
139
|
-
raise ArgumentError, "Bad :account" unless account.is_a?(KeyPair)
|
140
|
-
raise ArgumentError, "Bad :sequence #{sequence}" unless sequence.is_a?(Integer)
|
141
|
-
raise ArgumentError, "Bad :fee #{sequence}" if fee.present? && !fee.is_a?(Integer)
|
142
|
-
|
143
|
-
new.tap do |result|
|
144
|
-
result.seq_num = sequence
|
145
|
-
result.fee = fee
|
146
|
-
result.memo = make_memo(attributes[:memo])
|
147
|
-
result.source_account = account.muxed_account
|
148
|
-
result.apply_defaults
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
private
|
153
|
-
|
154
|
-
def make_memo(memo)
|
155
|
-
case memo
|
156
|
-
when Stellar::Memo
|
157
|
-
memo
|
158
|
-
when nil
|
159
|
-
nil
|
160
|
-
when Integer
|
161
|
-
Memo.new(:memo_id, memo)
|
162
|
-
when String
|
163
|
-
Memo.new(:memo_text, memo)
|
164
|
-
when Array
|
165
|
-
t, val = *memo
|
166
|
-
Memo.new(:"memo_#{t}", val)
|
167
|
-
else
|
168
|
-
raise ArgumentError, "Bad :memo"
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
5
|
def to_v0
|
174
6
|
ed25519 = if source_account.switch == Stellar::CryptoKeyType.key_type_ed25519
|
175
7
|
source_account.ed25519!
|