Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
hive-ruby
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
hive
hive-ruby
Commits
abb11b11
Commit
abb11b11
authored
6 years ago
by
Anthony Martin
Browse files
Options
Downloads
Patches
Plain Diff
added option to use condenser_api for broadcast, defaults appbase
parent
0229b73e
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
lib/steem/broadcast.rb
+53
-28
53 additions, 28 deletions
lib/steem/broadcast.rb
lib/steem/transaction_builder.rb
+105
-41
105 additions, 41 deletions
lib/steem/transaction_builder.rb
lib/steem/type/amount.rb
+48
-8
48 additions, 8 deletions
lib/steem/type/amount.rb
with
206 additions
and
77 deletions
lib/steem/broadcast.rb
+
53
−
28
View file @
abb11b11
...
...
@@ -32,7 +32,7 @@ module Steem
class
Broadcast
extend
Retriable
DEFAULT_MAX_ACCEPTED_PAYOUT
=
Type
::
Amount
.
new
(
[
"
1000000000
"
,
3
,
"
@@000000013
"
]
)
DEFAULT_MAX_ACCEPTED_PAYOUT
=
Type
::
Amount
.
new
(
amount:
'
1000000000
'
,
precision:
3
,
nai:
'
@@000000013
'
)
# This operation is used to cast a vote on a post/comment.
#
...
...
@@ -174,9 +174,9 @@ module Steem
}]]
max_accepted_payout
=
if
params
.
keys
.
include?
:max_accepted_payout
Type
::
Amount
.
to_nia
(
params
[
:max_accepted_payout
])
normalize_amount
(
options
.
merge
amount:
params
[
:max_accepted_payout
])
else
DEFAULT_MAX_ACCEPTED_PAYOUT
.
to_nia
normalize_amount
(
options
.
merge
amount:
DEFAULT_MAX_ACCEPTED_PAYOUT
)
end
allow_votes
=
if
params
.
keys
.
include?
:allow_votes
...
...
@@ -274,7 +274,7 @@ module Steem
params
=
options
[
:params
]
check_required_fields
(
params
,
*
required_fields
)
params
[
:amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:amount
])
params
[
:amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:amount
])
ops
=
[[
:transfer
,
params
]]
...
...
@@ -310,7 +310,7 @@ module Steem
params
=
options
[
:params
]
check_required_fields
(
params
,
*
required_fields
)
params
[
:amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:amount
])
params
[
:amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:amount
])
ops
=
[[
:transfer_to_vesting
,
params
]]
...
...
@@ -336,7 +336,7 @@ module Steem
params
=
options
[
:params
]
check_required_fields
(
params
,
*
required_fields
)
params
[
:vesting_shares
]
=
Type
::
Amount
.
to_nia
(
params
[
:vesting_shares
])
params
[
:vesting_shares
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:vesting_shares
])
ops
=
[[
:withdraw_vesting
,
params
]]
...
...
@@ -363,8 +363,8 @@ module Steem
params
=
options
[
:params
]
check_required_fields
(
params
,
*
required_fields
)
params
[
:amount_to_sell
]
=
Type
::
Amount
.
to_nia
(
params
[
:amount_to_sell
])
params
[
:min_to_receive
]
=
Type
::
Amount
.
to_nia
(
params
[
:min_to_receive
])
params
[
:amount_to_sell
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:amount_to_sell
])
params
[
:min_to_receive
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:min_to_receive
])
if
!!
params
[
:expiration
]
params
[
:expiration
]
=
Time
.
parse
(
params
[
:expiration
].
to_s
)
...
...
@@ -414,8 +414,8 @@ module Steem
exchange_rate
=
params
[
:exchange_rate
]
rescue
nil
||
{}
base
=
exchange_rate
[
:base
]
quote
=
exchange_rate
[
:quote
]
params
[
:exchange_rate
][
:base
]
=
Type
::
Amount
.
to_nia
(
base
)
params
[
:exchange_rate
][
:quote
]
=
Type
::
Amount
.
to_nia
(
quote
)
params
[
:exchange_rate
][
:base
]
=
normalize_amount
(
options
.
merge
amount:
base
)
params
[
:exchange_rate
][
:quote
]
=
normalize_amount
(
options
.
merge
amount:
quote
)
ops
=
[[
:feed_publish
,
params
]]
...
...
@@ -438,7 +438,7 @@ module Steem
params
=
options
[
:params
]
check_required_fields
(
params
,
*
required_fields
)
params
[
:amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:amount
])
params
[
:amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:amount
])
ops
=
[[
:convert
,
params
]]
...
...
@@ -502,7 +502,7 @@ module Steem
check_required_fields
(
params
,
*
required_fields
)
params
[
:fee
]
=
Type
::
Amount
.
to_nia
(
params
[
:fee
])
params
[
:fee
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:fee
])
ops
=
[[
:account_create
,
params
]]
...
...
@@ -603,8 +603,8 @@ module Steem
check_required_fields
(
params
,
*
required_fields
)
account_creation_fee
=
params
[
:props
][
:account_creation_fee
]
rescue
nil
params
[
:props
][
:account_creation_fee
]
=
Type
::
Amount
.
to_nia
(
account_creation_fee
)
params
[
:fee
]
=
Type
::
Amount
.
to_nia
(
params
[
:fee
])
params
[
:props
][
:account_creation_fee
]
=
normalize_amount
(
options
.
merge
amount:
account_creation_fee
)
params
[
:fee
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:fee
])
ops
=
[[
:witness_update
,
params
]]
...
...
@@ -844,9 +844,9 @@ module Steem
check_required_fields
(
params
,
*
required_fields
)
params
[
:sbd_amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:sbd_amount
])
params
[
:steem_amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:steem_amount
])
params
[
:fee
]
=
Type
::
Amount
.
to_nia
(
params
[
:fee
])
params
[
:sbd_amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:sbd_amount
])
params
[
:steem_amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:steem_amount
])
params
[
:fee
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:fee
])
params
[
:ratification_deadline
]
=
Time
.
parse
(
params
[
:ratification_deadline
].
to_s
)
params
[
:ratification_deadline
]
=
params
[
:ratification_deadline
].
strftime
(
'%Y-%m-%dT%H:%M:%S'
)
...
...
@@ -905,8 +905,8 @@ module Steem
params
=
options
[
:params
]
check_required_fields
(
params
,
*
required_fields
)
params
[
:sbd_amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:sbd_amount
])
params
[
:steem_amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:steem_amount
])
params
[
:sbd_amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:sbd_amount
])
params
[
:steem_amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:steem_amount
])
ops
=
[[
:escrow_release
,
params
]]
...
...
@@ -954,7 +954,7 @@ module Steem
check_required_fields
(
params
,
*
required_fields
)
params
[
:memo
]
||=
''
params
[
:amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:amount
])
params
[
:amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:amount
])
ops
=
[[
:transfer_to_savings
,
params
]]
...
...
@@ -977,7 +977,7 @@ module Steem
check_required_fields
(
params
,
*
required_fields
)
params
[
:memo
]
||=
''
params
[
:amount
]
=
Type
::
Amount
.
to_nia
(
params
[
:amount
])
params
[
:amount
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:amount
])
ops
=
[[
:transfer_from_savings
,
params
]]
...
...
@@ -1039,7 +1039,7 @@ module Steem
params
=
options
[
:params
]
check_required_fields
(
params
,
*
required_fields
)
params
[
:vesting_shares
]
=
Type
::
Amount
.
to_nia
(
params
[
:vesting_shares
])
params
[
:vesting_shares
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:vesting_shares
])
ops
=
[[
:delegate_vesting_shares
,
params
]]
process
(
options
.
merge
(
ops:
ops
),
&
block
)
...
...
@@ -1075,8 +1075,8 @@ module Steem
check_required_fields
(
params
,
*
required_fields
)
params
[
:fee
]
=
Type
::
Amount
.
to_nia
(
params
[
:fee
])
params
[
:delegation
]
=
Type
::
Amount
.
to_nia
(
params
[
:delegation
])
params
[
:fee
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:fee
])
params
[
:delegation
]
=
normalize_amount
(
options
.
merge
amount:
params
[
:delegation
])
params
[
:extensions
]
||=
[]
ops
=
[[
:account_create_with_delegation
,
params
]]
...
...
@@ -1097,9 +1097,17 @@ module Steem
trx
=
tx
.
transaction
response
=
if
!!
options
[
:pretend
]
database_api
(
options
).
verify_authority
(
trx:
trx
)
if
!!
options
[
:app_base
]
||
!!
options
[
:app_base
]
database_api
(
options
).
verify_authority
(
trx:
trx
)
else
database_api
(
options
).
verify_authority
(
trx
)
end
else
network_broadcast_api
(
options
).
broadcast_transaction_synchronous
(
trx:
trx
)
if
!!
options
[
:app_base
]
||
!!
options
[
:app_base
]
network_broadcast_api
(
options
).
broadcast_transaction
(
trx:
trx
)
else
network_broadcast_api
(
options
).
broadcast_transaction_synchronous
(
trx
)
end
end
break
...
...
@@ -1120,13 +1128,30 @@ module Steem
end
private
# @private
def
self
.
normalize_amount
(
options
)
if
options
[
:app_base
].
nil?
||
!!
options
[
:app_base
]
Type
::
Amount
.
to_h
(
options
[
:amount
])
else
Type
::
Amount
.
to_s
(
options
[
:amount
])
end
end
# @privats
def
self
.
database_api
(
options
)
options
[
:database_api
]
||=
Steem
::
DatabaseApi
.
new
(
options
)
options
[
:database_api
]
||=
if
options
[
:app_base
].
nil?
||
!!
options
[
:app_base
]
Steem
::
DatabaseApi
.
new
(
options
)
else
Steem
::
CondenserApi
.
new
(
options
)
end
end
# @private
def
self
.
network_broadcast_api
(
options
)
options
[
:network_broadcast_api
]
||=
Steem
::
NetworkBroadcastApi
.
new
(
options
)
options
[
:network_broadcast_api
]
||=
if
options
[
:app_base
].
nil?
||
!!
options
[
:app_base
]
Steem
::
NetworkBroadcaseApi
.
new
(
options
)
else
Steem
::
CondenserApi
.
new
(
options
)
end
end
# @private
...
...
This diff is collapsed.
Click to expand it.
lib/steem/transaction_builder.rb
+
105
−
41
View file @
abb11b11
...
...
@@ -26,13 +26,25 @@ module Steem
include
ChainConfig
include
Utils
attr_accessor
:database_api
,
:block_api
,
:expiration
,
:operations
attr_accessor
:app_base
,
:database_api
,
:block_api
,
:expiration
,
:operations
attr_writer
:wif
attr_reader
:signed
alias
app_base?
app_base
def
initialize
(
options
=
{})
@database_api
=
options
[
:database_api
]
||
Steem
::
DatabaseApi
.
new
(
options
)
@block_api
=
options
[
:block_api
]
||
Steem
::
BlockApi
.
new
(
options
)
@app_base
=
options
[
:app_base
].
nil?
||
!!
options
[
:app_base
]
@database_api
=
options
[
:database_api
]
@block_api
=
options
[
:block_api
]
if
app_base?
@database_api
||=
Steem
::
DatabaseApi
.
new
(
options
)
@block_api
||=
Steem
::
BlockApi
.
new
(
options
)
else
@database_api
||=
Steem
::
CondenserApi
.
new
(
options
)
@block_api
||=
Steem
::
CondenserApi
.
new
(
options
)
end
@wif
=
[
options
[
:wif
]].
flatten
@signed
=
false
...
...
@@ -114,9 +126,18 @@ module Steem
catch
:prepare_header
do
;
begin
@database_api
.
get_dynamic_global_properties
do
|
properties
|
block_number
=
properties
.
last_irreversible_block_num
block_header_args
=
if
app_base?
{
block_num:
block_number
}
else
block_number
end
@block_api
.
get_block_header
(
block_num:
block_number
)
do
|
result
|
header
=
result
.
header
@block_api
.
get_block_header
(
block_header_args
)
do
|
result
|
header
=
if
app_base?
result
.
header
else
result
end
@ref_block_num
=
(
block_number
-
1
)
&
0xFFFF
@ref_block_prefix
=
unhexlify
(
header
.
previous
[
8
..-
1
]).
unpack
(
'V*'
)[
0
]
...
...
@@ -138,7 +159,7 @@ module Steem
# Sets operations all at once, then prepares.
def
operations
=
(
operations
)
@operations
=
operations
@operations
=
operations
.
map
{
|
op
|
normalize_operation
(
op
)
}
prepare
@operations
end
...
...
@@ -167,34 +188,8 @@ module Steem
# @return {TransactionBuilder}
def
put
(
type
,
op
=
nil
)
@expiration
=
nil
## Saving this for later. This block, or something like it, might replace
## API broadcast operation structure.
# case type
# when Symbol, String
# type_value = "#{type}_operation"
# @operations << {type: type_value, value: op}
# when Hash
# type_value = "#{type.keys.first}_operation"
# @operations << {type: type_value, value: type.values.first}
# when Array
# type_value = "#{type[0]}_operation"
# @operations << {type: type_value, value: type[1]}
# else
# # don't know what to do with it, skipped
# end
case
type
when
Symbol
then
@operations
<<
[
type
,
op
]
when
String
then
@operations
<<
[
type
.
to_sym
,
op
]
when
Hash
then
@operations
<<
[
type
.
keys
.
first
.
to_sym
,
type
.
values
.
first
]
when
Array
then
@operations
<<
type
else
# don't know what to do with it, skipped
end
@operations
<<
normalize_operation
(
type
,
op
)
prepare
self
end
...
...
@@ -240,8 +235,20 @@ module Steem
unless
@signed
catch
:serialize
do
;
begin
@database_api
.
get_transaction_hex
(
trx:
trx
)
do
|
result
|
hex
=
@chain_id
+
result
.
hex
[
0
..-
4
]
# Why do we have to chop the last two bytes?
transaction_hex_args
=
if
app_base?
{
trx:
trx
}
else
trx
end
@database_api
.
get_transaction_hex
(
transaction_hex_args
)
do
|
result
|
hex
=
if
app_base?
result
.
hex
else
result
end
hex
=
@chain_id
+
hex
[
0
..-
4
]
# Why do we have to chop the last two bytes?
digest
=
unhexlify
(
hex
)
digest_hex
=
Digest
::
SHA256
.
digest
(
digest
)
private_keys
=
@wif
.
map
{
|
wif
|
Bitcoin
::
Key
.
from_base58
wif
}
...
...
@@ -283,8 +290,18 @@ module Steem
# @return [Array] All public keys that could possibly sign for a given transaction.
def
potential_signatures
@database_api
.
get_potential_signatures
(
trx:
transaction
)
do
|
result
|
result
[
:keys
]
potential_signatures_args
=
if
app_base?
{
trx:
transaction
}
else
transaction
end
@database_api
.
get_potential_signatures
(
potential_signatures_args
)
do
|
result
|
if
app_base?
result
[
:keys
]
else
result
end
end
end
...
...
@@ -294,15 +311,35 @@ module Steem
#
# @return [Array] The minimal subset of public keys that should add signatures to the transaction.
def
required_signatures
@database_api
.
get_required_signatures
(
trx:
transaction
)
do
|
result
|
result
[
:keys
]
required_signatures_args
=
if
app_base?
{
trx:
transaction
}
else
[
transaction
,
[]]
end
@database_api
.
get_required_signatures
(
*
required_signatures_args
)
do
|
result
|
if
app_base?
result
[
:keys
]
else
result
end
end
end
# @return [Boolean] True if the transaction has all of the required signatures.
def
valid?
@database_api
.
verify_authority
(
trx:
transaction
)
do
|
result
|
result
.
valid
verify_authority_args
=
if
app_base?
{
trx:
transaction
}
else
transaction
end
@database_api
.
verify_authority
(
verify_authority_args
)
do
|
result
|
if
app_base?
result
.
valid
else
result
end
end
end
private
...
...
@@ -318,5 +355,32 @@ module Steem
((
sig
[
33
]
&
0x80
)
!=
0
)
)
end
def
normalize_operation
(
type
,
op
=
nil
)
if
app_base?
case
type
when
Symbol
,
String
type_value
=
"
#{
type
}
_operation"
{
type:
type_value
,
value:
op
}
when
Hash
type_value
=
"
#{
type
.
keys
.
first
}
_operation"
{
type:
type_value
,
value:
type
.
values
.
first
}
when
Array
type_value
=
"
#{
type
[
0
]
}
_operation"
{
type:
type_value
,
value:
type
[
1
]}
else
raise
Steem
::
ArgumentError
,
"Don't know what to do with operation type
#{
type
.
class
}
:
#{
type
}
(
#{
op
}
)"
end
else
case
type
when
Symbol
then
[
type
,
op
]
when
String
then
[
type
.
to_sym
,
op
]
when
Hash
then
[
type
.
keys
.
first
.
to_sym
,
type
.
values
.
first
]
when
Array
then
type
else
raise
Steem
::
ArgumentError
,
"Don't know what to do with operation type
#{
type
.
class
}
:
#{
type
}
(
#{
op
}
)"
end
end
end
end
end
This diff is collapsed.
Click to expand it.
lib/steem/type/amount.rb
+
48
−
8
View file @
abb11b11
...
...
@@ -3,8 +3,10 @@ module Steem
# See: https://github.com/xeroc/piston-lib/blob/34a7525cee119ec9b24a99577ede2d54466fca0e/steembase/operations.py
class
Amount
<
BaseType
def
self
.
to_nia
(
amount
)
new
(
amount
).
to_nia
attr_reader
:amount
,
:precision
,
:nai
,
:asset
def
self
.
to_h
(
amount
)
new
(
amount
).
to_h
end
def
self
.
to_s
(
amount
)
...
...
@@ -16,15 +18,33 @@ module Steem
case
value
when
Array
a
,
p
,
t
=
value
@asset
=
case
t
@amount
,
@precision
,
@nai
=
value
@asset
=
case
@nai
when
'@@000000013'
then
'SBD'
when
'@@000000021'
then
'STEEM'
when
'@@000000037'
then
'VESTS'
else
;
raise
TypeError
,
"Asset
#{
@asset
}
unknown."
else
;
raise
TypeError
,
"Asset
#{
@nai
}
unknown."
end
@amount
=
"%.
#{
@precision
}
f"
%
(
@amount
.
to_f
/
10
**
@precision
)
when
Hash
@amount
,
@precision
,
@nai
=
value
.
map
do
|
k
,
v
|
v
if
%i(amount precision nai)
.
include?
k
.
to_sym
end
.
compact
@asset
=
case
@nai
when
'@@000000013'
then
'SBD'
when
'@@000000021'
then
'STEEM'
when
'@@000000037'
then
'VESTS'
else
;
raise
TypeError
,
"Asset
#{
@nai
}
unknown."
end
@precision
=
p
@amount
=
"%.
#{
p
}
f"
%
(
a
.
to_f
/
10
**
p
)
@amount
=
"%.
#{
@precision
}
f"
%
(
@amount
.
to_f
/
10
**
@precision
)
when
Amount
@precision
=
value
.
precision
@nai
=
value
.
nai
@asset
=
value
.
asset
@amount
=
value
.
amount
else
@amount
,
@asset
=
value
.
strip
.
split
(
' '
)
rescue
[
''
,
''
]
@precision
=
case
@asset
...
...
@@ -45,7 +65,7 @@ module Steem
asset
end
def
to_
ni
a
def
to_a
case
@asset
when
'STEEM'
then
[(
@amount
.
to_f
*
1000
).
to_i
.
to_s
,
3
,
'@@000000021'
]
when
'VESTS'
then
[(
@amount
.
to_f
*
1000000
).
to_i
.
to_s
,
6
,
'@@000000037'
]
...
...
@@ -53,6 +73,26 @@ module Steem
end
end
def
to_h
case
@asset
when
'STEEM'
then
{
amount:
(
@amount
.
to_f
*
1000
).
to_i
.
to_s
,
precision:
3
,
nai:
'@@000000021'
}
when
'VESTS'
then
{
amount:
(
@amount
.
to_f
*
1000000
).
to_i
.
to_s
,
precision:
6
,
nai:
'@@000000037'
}
when
'SBD'
then
{
amount:
(
@amount
.
to_f
*
1000
).
to_i
.
to_s
,
precision:
3
,
nai:
'@@000000013'
}
end
end
def
to_s
"
#{
@amount
}
#{
@asset
}
"
end
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment