mixin_bot 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mixin_bot/api/inscription.rb +6 -0
- data/lib/mixin_bot/api/legacy_transfer.rb +2 -2
- data/lib/mixin_bot/api/payment.rb +1 -1
- data/lib/mixin_bot/api/pin.rb +1 -1
- data/lib/mixin_bot/api/rpc.rb +1 -1
- data/lib/mixin_bot/api/transaction.rb +1 -1
- data/lib/mixin_bot/api/transfer.rb +13 -3
- data/lib/mixin_bot/api/user.rb +4 -4
- data/lib/mixin_bot/utils/address.rb +8 -8
- data/lib/mixin_bot/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2162191a7068afafb913aa9b898c7915c133b732c25b785c1ec8cbf672fd3edd
|
4
|
+
data.tar.gz: 31303c5e3c9dfb3759c943c63d74a67f7efb7a9cbdfbee9a823ba6f7dc7c6ab2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9cef773f5bde48f7d1697b5be99251ec6b4d2dcd5dd15c1d9b7aa60d90089a3476f8b696b5f9e7c93acbbf464d35583519b51d7fdff70cd842c9a97d7a4b2100
|
7
|
+
data.tar.gz: 2a16d609f841f1f2c0b85b217254e5368e042e0e2dc78817f7bee89774e90b12f674c8b3c67c4c73644ef02ff8f2a616109cd0659f63e8bed128cae50431152d
|
@@ -15,6 +15,12 @@ module MixinBot
|
|
15
15
|
client.get path
|
16
16
|
end
|
17
17
|
|
18
|
+
def collection_collectibles(hash, offset: 0)
|
19
|
+
path = "/safe/inscriptions/collections/#{hash}/items"
|
20
|
+
|
21
|
+
client.get path, offset:
|
22
|
+
end
|
23
|
+
|
18
24
|
def collectibles(members: [], access_token: nil)
|
19
25
|
unspent_outputs = safe_outputs(state: :unspent, members:, access_token:)['data']
|
20
26
|
unspent_outputs.select { |output| output['inscription_hash'].present? }
|
@@ -4,7 +4,7 @@ module MixinBot
|
|
4
4
|
class API
|
5
5
|
module LegacyTransfer
|
6
6
|
TRANSFER_ARGUMENTS = %i[asset_id opponent_id amount].freeze
|
7
|
-
def
|
7
|
+
def create_legacy_transfer(pin, **kwargs)
|
8
8
|
raise ArgumentError, "#{TRANSFER_ARGUMENTS.join(', ')} are needed for create transfer" unless TRANSFER_ARGUMENTS.all? { |param| kwargs.keys.include? param }
|
9
9
|
|
10
10
|
asset_id = kwargs[:asset_id]
|
@@ -33,7 +33,7 @@ module MixinBot
|
|
33
33
|
client.post path, **payload
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
36
|
+
def legacy_transfer(trace_id, access_token: nil)
|
37
37
|
path = format('/transfers/trace/%<trace_id>s', trace_id:)
|
38
38
|
client.get path, access_token:
|
39
39
|
end
|
@@ -11,7 +11,7 @@ module MixinBot
|
|
11
11
|
memo = kwargs[:memo] || ''
|
12
12
|
trace_id = kwargs[:trace_id] || SecureRandom.uuid
|
13
13
|
|
14
|
-
mix_address = MixinBot.utils.build_mix_address(members
|
14
|
+
mix_address = MixinBot.utils.build_mix_address(members:, threshold:)
|
15
15
|
|
16
16
|
"https://mixin.one/pay/#{mix_address}?amount=#{amount}&asset=#{asset_id}&memo=#{memo}&trace=#{trace_id}"
|
17
17
|
end
|
data/lib/mixin_bot/api/pin.rb
CHANGED
@@ -30,7 +30,7 @@ module MixinBot
|
|
30
30
|
|
31
31
|
# https://developers.mixin.one/api/alpha-mixin-network/create-pin/
|
32
32
|
def update_pin(pin:, old_pin: nil)
|
33
|
-
old_pin ||= MixinBot.config.pin
|
33
|
+
# old_pin ||= MixinBot.config.pin
|
34
34
|
raise ArgumentError, 'invalid old pin' if old_pin.present? && old_pin.length != 6
|
35
35
|
|
36
36
|
path = '/pin/update'
|
data/lib/mixin_bot/api/rpc.rb
CHANGED
@@ -269,7 +269,7 @@ module MixinBot
|
|
269
269
|
|
270
270
|
receivers = kwargs[:receivers].presence || [config.app_id]
|
271
271
|
receivers_threshold = kwargs[:receivers_threshold] || receivers.length
|
272
|
-
recipient = MixinBot.utils.build_mix_address(receivers, receivers_threshold)
|
272
|
+
recipient = MixinBot.utils.build_mix_address(members: receivers, threshold: receivers_threshold)
|
273
273
|
|
274
274
|
content = kwargs[:content]
|
275
275
|
collection_hash = kwargs[:collection_hash]
|
@@ -15,8 +15,17 @@ module MixinBot
|
|
15
15
|
# spend_key: string / nil,
|
16
16
|
# }
|
17
17
|
def create_safe_transfer(**kwargs)
|
18
|
-
|
19
|
-
raise ArgumentError, '
|
18
|
+
utxos = kwargs[:utxos]
|
19
|
+
raise ArgumentError, 'utxos must be array' if utxos.present? && !utxos.is_a?(Array)
|
20
|
+
|
21
|
+
asset_id =
|
22
|
+
if utxos.present?
|
23
|
+
utxos.first['asset_id']
|
24
|
+
else
|
25
|
+
kwargs[:asset_id]
|
26
|
+
end
|
27
|
+
|
28
|
+
raise ArgumentError, 'utxos or asset_id required' if utxos.blank? && asset_id.blank?
|
20
29
|
|
21
30
|
amount = kwargs[:amount]&.to_d
|
22
31
|
raise ArgumentError, 'amount required' if amount.blank?
|
@@ -29,7 +38,7 @@ module MixinBot
|
|
29
38
|
memo = kwargs[:memo] || ''
|
30
39
|
|
31
40
|
# step 1: select inputs
|
32
|
-
utxos
|
41
|
+
utxos ||= build_utxos(asset_id:, amount:)
|
33
42
|
|
34
43
|
# step 2: build transaction
|
35
44
|
tx = build_safe_transaction(
|
@@ -61,6 +70,7 @@ module MixinBot
|
|
61
70
|
signed_raw
|
62
71
|
)
|
63
72
|
end
|
73
|
+
alias create_transfer create_safe_transfer
|
64
74
|
|
65
75
|
def build_utxos(asset_id:, amount:)
|
66
76
|
outputs = safe_outputs(state: 'unspent', asset: asset_id, limit: 500)['data'].sort_by { |o| o['amount'].to_d }
|
data/lib/mixin_bot/api/user.rb
CHANGED
@@ -49,9 +49,9 @@ module MixinBot
|
|
49
49
|
keystore = {
|
50
50
|
app_id: user['data']['user_id'],
|
51
51
|
session_id: user['data']['session_id'],
|
52
|
-
private_key
|
53
|
-
|
54
|
-
spend_key:
|
52
|
+
session_private_key: private_key,
|
53
|
+
server_public_key: user['data']['pin_token_base64'],
|
54
|
+
spend_key:
|
55
55
|
}
|
56
56
|
user_api = MixinBot::API.new(**keystore)
|
57
57
|
|
@@ -60,7 +60,7 @@ module MixinBot
|
|
60
60
|
# wait for tip pin update in server
|
61
61
|
sleep 1
|
62
62
|
|
63
|
-
user_api.safe_register spend_key
|
63
|
+
user_api.safe_register keystore[:spend_key]
|
64
64
|
|
65
65
|
keystore
|
66
66
|
end
|
@@ -31,7 +31,7 @@ module MixinBot
|
|
31
31
|
payload
|
32
32
|
end
|
33
33
|
|
34
|
-
def build_mix_address(members
|
34
|
+
def build_mix_address(members:, threshold:)
|
35
35
|
raise ArgumentError, 'members should be an array' unless members.is_a? Array
|
36
36
|
raise ArgumentError, 'members should not be empty' if members.empty?
|
37
37
|
raise ArgumentError, 'members length should less than 256' if members.length > 255
|
@@ -61,24 +61,24 @@ module MixinBot
|
|
61
61
|
|
62
62
|
data = address[MIX_ADDRESS_PREFIX.length..]
|
63
63
|
data = Base58.base58_to_binary data, :bitcoin
|
64
|
-
raise ArgumentError, 'invalid address' if data.length < 3 + 16 + 4
|
64
|
+
raise ArgumentError, 'invalid address, length invalid' if data.length < 3 + 16 + 4
|
65
65
|
|
66
66
|
msg = data[...-4]
|
67
67
|
checksum = SHA3::Digest::SHA256.digest((MIX_ADDRESS_PREFIX + msg))[0...4]
|
68
68
|
|
69
|
-
raise ArgumentError, 'invalid address' unless checksum[0...4] == data[-4..]
|
69
|
+
raise ArgumentError, 'invalid address, checksum invalid' unless checksum[0...4] == data[-4..]
|
70
70
|
|
71
71
|
version = data[0].ord
|
72
|
-
raise ArgumentError, 'invalid address' unless version == MIX_ADDRESS_VERSION
|
72
|
+
raise ArgumentError, 'invalid address, version invalid' unless version == MIX_ADDRESS_VERSION
|
73
73
|
|
74
74
|
threshold = data[1].ord
|
75
75
|
members_count = data[2].ord
|
76
76
|
|
77
|
-
if data[3
|
78
|
-
members = data[3
|
77
|
+
if data[3...-4].length == members_count * 16
|
78
|
+
members = data[3...-4].chars.each_slice(16).map(&:join)
|
79
79
|
members = members.map(&->(member) { MixinBot::UUID.new(raw: member).unpacked })
|
80
80
|
else
|
81
|
-
members = data[3
|
81
|
+
members = data[3...-4].chars.each_slice(64).map(&:join)
|
82
82
|
members = members.map(&->(member) { build_main_address(member) })
|
83
83
|
end
|
84
84
|
|
@@ -100,7 +100,7 @@ module MixinBot
|
|
100
100
|
members:,
|
101
101
|
threshold:,
|
102
102
|
amount:,
|
103
|
-
mix_address: build_mix_address(members
|
103
|
+
mix_address: build_mix_address(members:, threshold:)
|
104
104
|
}
|
105
105
|
end
|
106
106
|
|
data/lib/mixin_bot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixin_bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- an-lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -321,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
321
321
|
- !ruby/object:Gem::Version
|
322
322
|
version: '0'
|
323
323
|
requirements: []
|
324
|
-
rubygems_version: 3.5.
|
324
|
+
rubygems_version: 3.5.10
|
325
325
|
signing_key:
|
326
326
|
specification_version: 4
|
327
327
|
summary: A Ruby SDK for Mixin Nexwork
|