trident_assistant 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f164a9116aa89a445553f7af742157ac0da7670dc436c8235508ff5e4a8030be
|
4
|
+
data.tar.gz: e0602539c1087780a03b543c90da70afbae5aced33373eb50339575a733f97e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c3292e2f06b569a50357d64e0d8811218cdb1911e0c2eb544560c25e64a698f02b758f59a149cad1c5b9d0705bc952b73aaff1c77360ef83379a9217a69f6f2
|
7
|
+
data.tar.gz: ed3f043aa8ec27ee9931d41f2becaa031588d208c7a7b142c29db028380939d4a220319b5768a4cb2a912c0051bbae2c1e9ff4601d5f87cec1a4a1d5d1f25bcd
|
@@ -9,7 +9,7 @@ module TridentAssistant
|
|
9
9
|
|
10
10
|
def deposit(collection, token)
|
11
11
|
token_id = MixinBot::Utils::Nfo.new(collection: collection, token: token).unique_token_id
|
12
|
-
collectible =
|
12
|
+
collectible = find_collectible(:unspent, token_id)
|
13
13
|
raise "Unauthorized" if collectible.blank?
|
14
14
|
|
15
15
|
nfo = MixinBot::Utils::Nfo.new(extra: "deposit".unpack1("H*")).encode.hex
|
@@ -36,8 +36,8 @@ module TridentAssistant
|
|
36
36
|
|
37
37
|
def airdrop(collection, token, **kwargs)
|
38
38
|
token_id = MixinBot::Utils::Nfo.new(collection: collection, token: token).unique_token_id
|
39
|
-
collectible =
|
40
|
-
collectible ||=
|
39
|
+
collectible = find_collectible(:unspent, token_id)
|
40
|
+
collectible ||= find_collectible(:signed, token_id)
|
41
41
|
raise "Cannot find collectible in wallet" if collectible.blank?
|
42
42
|
|
43
43
|
memo =
|
@@ -58,8 +58,8 @@ module TridentAssistant
|
|
58
58
|
|
59
59
|
def transfer(collection, token, recipient, **_kwargs)
|
60
60
|
token_id = MixinBot::Utils::Nfo.new(collection: collection, token: token).unique_token_id
|
61
|
-
collectible =
|
62
|
-
collectible ||=
|
61
|
+
collectible = find_collectible(:unspent, token_id)
|
62
|
+
collectible ||= find_collectible(:signed, token_id)
|
63
63
|
raise "Cannot find collectible in wallet" if collectible.blank?
|
64
64
|
|
65
65
|
memo = "TRANSFER"
|
@@ -75,23 +75,38 @@ module TridentAssistant
|
|
75
75
|
|
76
76
|
private
|
77
77
|
|
78
|
+
def find_collectible(state, token_id)
|
79
|
+
limit = 500
|
80
|
+
offset = ""
|
81
|
+
|
82
|
+
loop do
|
83
|
+
r = mixin_bot.collectibles(state: state, limit: limit, offset: offset)["data"]
|
84
|
+
puts "offset: #{offset}, loaded #{r.size} collectibles"
|
85
|
+
collectible = r.find(&->(c) { c["token_id"] == token_id })
|
86
|
+
break collectible if collectible.present?
|
87
|
+
|
88
|
+
break if r.size < 500
|
89
|
+
|
90
|
+
offset = r.last["updated_at"]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
78
94
|
def _transfer_nft(collectible, nfo, **kwargs)
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
mixin_bot.send_raw_transaction sign["raw_transaction"]
|
95
|
+
if collectible["state"] == "signed"
|
96
|
+
mixin_bot.send_raw_transaction collectible["signed_tx"]
|
97
|
+
else
|
98
|
+
raw = mixin_bot.build_collectible_transaction(
|
99
|
+
collectible: collectible,
|
100
|
+
receivers: kwargs[:receivers],
|
101
|
+
receivers_threshold: kwargs[:threshold],
|
102
|
+
nfo: nfo
|
103
|
+
)
|
104
|
+
tx = mixin_bot.sign_raw_transaction raw
|
105
|
+
|
106
|
+
request = mixin_bot.create_sign_collectible_request tx
|
107
|
+
sign = mixin_bot.sign_collectible_request request["request_id"], keystore[:pin]
|
108
|
+
mixin_bot.send_raw_transaction sign["raw_transaction"]
|
109
|
+
end
|
95
110
|
end
|
96
111
|
end
|
97
112
|
end
|
@@ -11,7 +11,7 @@ module TridentAssistant
|
|
11
11
|
desc: "keystore or keystore.json file of Mixin bot"
|
12
12
|
option :keystore, type: :string, aliases: "k", required: true, desc: "keystore or keystore.json file of Mixin bot"
|
13
13
|
def index
|
14
|
-
r = api.mixin_bot.collectibles state: options[:state]
|
14
|
+
r = api.mixin_bot.collectibles state: options[:state], limit: 500
|
15
15
|
|
16
16
|
log r["data"]
|
17
17
|
end
|
@@ -87,7 +87,18 @@ module TridentAssistant
|
|
87
87
|
log UI.fmt("{{v}} airdrop receiver_id: #{receiver_id}")
|
88
88
|
log UI.fmt("{{v}} airdrop start_at: #{start_at}")
|
89
89
|
|
90
|
-
|
90
|
+
attempt = 0
|
91
|
+
r =
|
92
|
+
begin
|
93
|
+
attempt += 1
|
94
|
+
api.airdrop metadata.collection["id"], metadata.token["id"], receiver_id: receiver_id, start_at: start_at
|
95
|
+
rescue Errno::ECONNRESET, OpenSSL::SSL::SSLError, MixinBot::HttpError => e
|
96
|
+
log UI.fmt("{{x}} #{e.inspect}")
|
97
|
+
log UI.fmt("Retrying #{attempt} times...")
|
98
|
+
sleep 0.5
|
99
|
+
retry
|
100
|
+
end
|
101
|
+
|
91
102
|
log r["data"]
|
92
103
|
data["_airdrop"] ||= {}
|
93
104
|
data["_airdrop"]["hash"] = r["data"]["hash"]
|
@@ -26,9 +26,20 @@ module TridentAssistant
|
|
26
26
|
files.each do |file|
|
27
27
|
log "-" * 80
|
28
28
|
log UI.fmt("{{v}} found #{file}")
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
attempt = 0
|
30
|
+
success =
|
31
|
+
begin
|
32
|
+
attempt += 1
|
33
|
+
_mint file
|
34
|
+
rescue Errno::ECONNRESET, OpenSSL::SSL::SSLError, MixinBot::HttpError, TridentAssistant::Client::HttpError,
|
35
|
+
TridentAssistant::Client::RequestError, MixinBot::RequestError => e
|
36
|
+
log UI.fmt("{{x}} #{e.inspect}")
|
37
|
+
log UI.fmt("Retrying #{attempt} times...")
|
38
|
+
sleep 0.5
|
39
|
+
retry
|
40
|
+
end
|
41
|
+
minted.push(file) if success
|
42
|
+
rescue TridentAssistant::Utils::Metadata::InvalidFormatError, JSON::ParserError, RuntimeError => e
|
32
43
|
log UI.fmt("{{x}} #{file} failed: #{e.inspect}")
|
33
44
|
next
|
34
45
|
end
|
@@ -76,33 +87,28 @@ module TridentAssistant
|
|
76
87
|
memo = api.mixin_bot.nft_memo metadata.collection[:id], metadata.token[:id].to_i, metadata.metahash
|
77
88
|
|
78
89
|
data["_mint"]["trace_id"] = trace_id
|
79
|
-
|
90
|
+
begin
|
80
91
|
payment =
|
81
|
-
|
82
|
-
api.
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
)
|
93
|
-
rescue MixinBot::InsufficientPoolError, MixinBot::HttpError => e
|
94
|
-
log UI.fmt("{{x}} #{e.inspect}")
|
95
|
-
log "Retrying to pay..."
|
96
|
-
sleep 1
|
97
|
-
nil
|
98
|
-
end
|
99
|
-
|
100
|
-
next if payment.blank? || payment["errors"].present?
|
92
|
+
api.mixin_bot.create_multisig_transaction(
|
93
|
+
api.keystore[:pin],
|
94
|
+
{
|
95
|
+
asset_id: TridentAssistant::Utils::MINT_ASSET_ID,
|
96
|
+
trace_id: trace_id,
|
97
|
+
amount: TridentAssistant::Utils::MINT_AMOUNT,
|
98
|
+
memo: memo,
|
99
|
+
receivers: TridentAssistant::Utils::NFO_MTG[:members],
|
100
|
+
threshold: TridentAssistant::Utils::NFO_MTG[:threshold]
|
101
|
+
}
|
102
|
+
)
|
101
103
|
|
102
104
|
log UI.fmt("{{v}} NFT mint payment paid: #{payment["data"]}")
|
103
105
|
data["_mint"]["token_id"] = token_id
|
104
106
|
log UI.fmt("{{v}} NFT successfully minted")
|
105
|
-
|
107
|
+
rescue MixinBot::InsufficientPoolError, MixinBot::HttpError => e
|
108
|
+
log UI.fmt("{{x}} #{e.inspect}")
|
109
|
+
log "Retrying to pay..."
|
110
|
+
sleep 1
|
111
|
+
retry
|
106
112
|
end
|
107
113
|
|
108
114
|
data.dig("_mint", "token_id").present?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trident_assistant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- an-lee
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixin_bot
|