glueby 0.6.4 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/glueby/contract/token.rb +20 -0
- data/lib/glueby/contract/tx_builder.rb +11 -3
- data/lib/glueby/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 165b5d6b9fc1cfae9bb7ba852632a0f099ef356bcb52fe0a9937b2c2d1289b51
|
4
|
+
data.tar.gz: 6d1a3b9cc1c3668a40ce11920af51cb8af8fc9d94163e43eca295a40d48889f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7d6f4cf39f9b2c4580d1360817baa960bf72fe77075a038a7784b2f9191bb0cb9925c27d8b697c5d0a75e0d0bc31d35cfda14e3a88e18da88dba09e38aa5246
|
7
|
+
data.tar.gz: 691dd9cec6eb183f537c70efab553bd9224bea93fe21da6cb8ce2afea14549e74bd02fa8e73dd3518703b6b390f217d0b02ad3d85649b8eea4e6b6583c1fd196
|
@@ -175,6 +175,26 @@ module Glueby
|
|
175
175
|
[color_id, tx]
|
176
176
|
end
|
177
177
|
|
178
|
+
# Send the tokens to multiple wallets
|
179
|
+
#
|
180
|
+
# @param sender [Glueby::Wallet] wallet to send this token
|
181
|
+
# @param receivers [Array<Hash>] array of hash, which keys are :address and :amount
|
182
|
+
# @return [Array<String, tx>] Tuple of color_id and tx object
|
183
|
+
# @raise [InsufficientFunds] if wallet does not have enough TPC to send transaction.
|
184
|
+
# @raise [InsufficientTokens] if wallet does not have enough token to send.
|
185
|
+
# @raise [InvalidAmount] if amount is not positive integer.
|
186
|
+
def multi_transfer!(sender:, receivers:)
|
187
|
+
receivers.each do |r|
|
188
|
+
raise Glueby::Contract::Errors::InvalidAmount unless r[:amount].positive?
|
189
|
+
end
|
190
|
+
funding_tx = create_funding_tx(wallet: sender) if Glueby.configuration.use_utxo_provider?
|
191
|
+
funding_tx = sender.internal_wallet.broadcast(funding_tx) if funding_tx
|
192
|
+
|
193
|
+
tx = create_multi_transfer_tx(funding_tx: funding_tx, color_id: color_id, sender: sender, receivers: receivers)
|
194
|
+
sender.internal_wallet.broadcast(tx)
|
195
|
+
[color_id, tx]
|
196
|
+
end
|
197
|
+
|
178
198
|
# Burn token
|
179
199
|
# If amount is not specified or 0, burn all token associated with the wallet.
|
180
200
|
#
|
@@ -133,15 +133,23 @@ module Glueby
|
|
133
133
|
end
|
134
134
|
|
135
135
|
def create_transfer_tx(funding_tx:nil, color_id:, sender:, receiver_address:, amount:, fee_estimator: FixedFeeEstimator.new)
|
136
|
+
receivers = [{ address: receiver_address, amount: amount }]
|
137
|
+
create_multi_transfer_tx(funding_tx: funding_tx, color_id: color_id, sender: sender, receivers: receivers, fee_estimator: fee_estimator)
|
138
|
+
end
|
139
|
+
|
140
|
+
def create_multi_transfer_tx(funding_tx:nil, color_id:, sender:, receivers:, fee_estimator: FixedFeeEstimator.new)
|
136
141
|
tx = Tapyrus::Tx.new
|
137
142
|
|
143
|
+
amount = receivers.reduce(0) { |sum, r| sum + r[:amount].to_i }
|
138
144
|
utxos = sender.internal_wallet.list_unspent
|
139
145
|
sum_token, outputs = collect_colored_outputs(utxos, color_id, amount)
|
140
146
|
fill_input(tx, outputs)
|
141
147
|
|
142
|
-
|
143
|
-
|
144
|
-
|
148
|
+
receivers.each do |r|
|
149
|
+
receiver_script = Tapyrus::Script.parse_from_addr(r[:address])
|
150
|
+
receiver_colored_script = receiver_script.add_color(color_id)
|
151
|
+
tx.outputs << Tapyrus::TxOut.new(value: r[:amount].to_i, script_pubkey: receiver_colored_script)
|
152
|
+
end
|
145
153
|
|
146
154
|
fill_change_token(tx, sender, sum_token - amount, color_id)
|
147
155
|
|
data/lib/glueby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glueby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- azuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tapyrus
|