ton-sdk-ruby-smc 0.0.11 → 0.0.12
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/lib/ton-sdk-ruby-smc/version.rb +1 -1
- data/lib/ton-sdk-ruby-smc/wallets/highload_wallet_v2.rb +160 -0
- data/lib/ton-sdk-ruby-smc/wallets/pwv2.rb +1 -2
- data/lib/ton-sdk-ruby-smc/wallets/wallet_v3.rb +0 -2
- data/lib/ton-sdk-ruby-smc/wallets/wallet_v4.rb +2 -1
- data/lib/ton-sdk-ruby-smc.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dbd17eb78f3b0b8853297b72190f0fb99e8d08ea37dec85a7f22934553c3dd1
|
4
|
+
data.tar.gz: fa78d3852ff2c4b3dcdb323e9e358cc985288fb079e5bd48966996afae61bc22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0aa664b427cc4e10634f6b04e4d790c7f7322ca73d302631076bca0caf1cef85a0864b0567565bdc393a545e4f8e9eb3b73ea0785b8bf7adea459f7e02cd6a5b
|
7
|
+
data.tar.gz: 1aa481155b51d35d6aa95d3bbaf16bd81c57d80ba707e64f53959bc2870f16e3d041bfc0d6e659e0d749fb57da78c4e9ebc9ef007b1db6065dc51300e59bd451
|
@@ -0,0 +1,160 @@
|
|
1
|
+
=begin
|
2
|
+
ton-sdk-ruby-smc – commonly used tvm contracts ruby package
|
3
|
+
|
4
|
+
Copyright (C) 2023 Oleh Hudeichuk
|
5
|
+
|
6
|
+
This file is part of ton-sdk-ruby-smc.
|
7
|
+
|
8
|
+
ton-sdk-ruby-smc is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU Lesser General Public License as
|
10
|
+
published by the Free Software Foundation, either version 3 of
|
11
|
+
the License, or (at your option) any later version.
|
12
|
+
|
13
|
+
ton-sdk-ruby-smc is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU Lesser General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU Lesser General Public License
|
19
|
+
along with ton-sdk-ruby-smc. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
|
21
|
+
|
22
|
+
=end
|
23
|
+
|
24
|
+
=begin
|
25
|
+
The source code and LICENSE of the "HighloadWalletV2":
|
26
|
+
https://github.com/ton-blockchain/ton
|
27
|
+
|
28
|
+
"HIGHLOADWALLET_V2_CODE = ..." is a compiled version (byte code) of
|
29
|
+
the "HighloadWalletV2" in the bag of cells
|
30
|
+
serialization in hexadecimal representation.
|
31
|
+
|
32
|
+
code cell hash(sha256): 9494d1cc8edf12f05671a1a9ba09921096eb50811e1924ec65c3c629fbb80812
|
33
|
+
|
34
|
+
Respect the rights of open source software. Thanks!
|
35
|
+
If you notice copyright violation, please create an issue.
|
36
|
+
https://github.com/nerzh/ton-sdk-ruby-smc/issues
|
37
|
+
=end
|
38
|
+
|
39
|
+
require 'date'
|
40
|
+
|
41
|
+
module TonSdkRubySmc
|
42
|
+
include TonSdkRuby
|
43
|
+
|
44
|
+
class HighloadWalletV2Transfer
|
45
|
+
include TonSdkRuby
|
46
|
+
extend TonSdkRuby
|
47
|
+
extend TonSdkRubySmc
|
48
|
+
|
49
|
+
attr_accessor :destination, :bounce, :value, :mode, :body, :init
|
50
|
+
|
51
|
+
def initialize(destination, bounce, value, mode, body = nil, init = nil)
|
52
|
+
@destination = destination # Address
|
53
|
+
@bounce = bounce # Boolean
|
54
|
+
@value = value # Coins
|
55
|
+
@mode = mode # Integer
|
56
|
+
@body = body # Cell
|
57
|
+
@init = init # StateInit
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class HighloadWalletV2
|
62
|
+
include TonSdkRuby
|
63
|
+
extend TonSdkRuby
|
64
|
+
extend TonSdkRubySmc
|
65
|
+
|
66
|
+
HIGHLOADWALLET_V2_CODE = "B5EE9C724101090100E5000114FF00F4A413F4BCF2C80B010201200203020148040501EAF28308D71820D31FD33FF823AA1F5320B9F263ED44D0D31FD33FD3FFF404D153608040F40E6FA131F2605173BAF2A207F901541087F910F2A302F404D1F8007F8E16218010F4786FA5209802D307D43001FB009132E201B3E65B8325A1C840348040F4438AE63101C8CB1F13CB3FCBFFF400C9ED54080004D03002012006070017BD9CE76A26869AF98EB85FFC0041BE5F976A268698F98E99FE9FF98FA0268A91040207A0737D098C92DBFC95DD1F140034208040F4966FA56C122094305303B9DE2093333601926C21E2B39F9E545A"
|
67
|
+
|
68
|
+
attr_accessor :code, :pubkey, :init, :address, :sub_wallet_id
|
69
|
+
|
70
|
+
def initialize(pubkey, workchain = 0, sub_wallet_id = 0)
|
71
|
+
@pubkey = pubkey
|
72
|
+
@sub_wallet_id = sub_wallet_id
|
73
|
+
@code = deserialize(hex_to_bytes(HIGHLOADWALLET_V2_CODE)).first
|
74
|
+
@init = build_state_init
|
75
|
+
@address = Address.new("#{workchain}:#{init.cell.hash}")
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.generate_query_id(timeout, random_id = nil)
|
79
|
+
now = Time.now.to_i
|
80
|
+
random = random_id || rand(0..(2**32 - 1))
|
81
|
+
(now + timeout) << 32 | random
|
82
|
+
end
|
83
|
+
|
84
|
+
def build_transfer(transfers, private_key, is_init = false, timeout = 60, query_id = nil)
|
85
|
+
raise "Transfers must be an [WalletV4Transfer]" unless transfers.size > 0 && transfers.first.is_a?(HighloadWalletV2Transfer)
|
86
|
+
raise "HighloadWallet v2 can handle only 254 transfers at once" unless (transfers.size <= 254 && transfers.size > 0)
|
87
|
+
|
88
|
+
query_id ||= HighloadWalletV2.generate_query_id(timeout)
|
89
|
+
body = Builder.new
|
90
|
+
.store_uint(sub_wallet_id, 32)
|
91
|
+
.store_uint(query_id, 64)
|
92
|
+
|
93
|
+
dict = HashmapE.new(16, {
|
94
|
+
serializers: {
|
95
|
+
key: ->(number) {
|
96
|
+
Builder.new.store_int(number, 16).bits
|
97
|
+
},
|
98
|
+
value: ->(transfer) {
|
99
|
+
internal_message = Message.new(
|
100
|
+
MessageOptions.new(
|
101
|
+
info: CommonMsgInfo.new(
|
102
|
+
IntMsgInfo.new(
|
103
|
+
dest: transfer.destination,
|
104
|
+
bounce: transfer.bounce,
|
105
|
+
value: transfer.value,
|
106
|
+
)
|
107
|
+
),
|
108
|
+
body: transfer.body,
|
109
|
+
init: transfer.init,
|
110
|
+
)
|
111
|
+
)
|
112
|
+
|
113
|
+
Builder.new
|
114
|
+
.store_uint(transfer.mode, 8)
|
115
|
+
.store_ref(internal_message.cell)
|
116
|
+
.cell
|
117
|
+
}
|
118
|
+
}
|
119
|
+
})
|
120
|
+
|
121
|
+
transfers.each_with_index do |transfer, index|
|
122
|
+
dict.set(index, transfer)
|
123
|
+
end
|
124
|
+
|
125
|
+
body.store_dict(dict)
|
126
|
+
signature = sign_cell(body.cell, private_key)
|
127
|
+
|
128
|
+
message_body = Builder.new
|
129
|
+
.store_bytes(signature.unpack('C*'))
|
130
|
+
.store_slice(body.cell.parse)
|
131
|
+
|
132
|
+
state_init = is_init ? init : nil
|
133
|
+
|
134
|
+
Message.new(
|
135
|
+
MessageOptions.new(
|
136
|
+
info: CommonMsgInfo.new(
|
137
|
+
ExtInMsgInfo.new(
|
138
|
+
dest: address
|
139
|
+
)
|
140
|
+
),
|
141
|
+
body: message_body.cell,
|
142
|
+
init: state_init
|
143
|
+
)
|
144
|
+
)
|
145
|
+
end
|
146
|
+
|
147
|
+
private
|
148
|
+
|
149
|
+
def build_state_init
|
150
|
+
data = Builder.new
|
151
|
+
data.store_uint(sub_wallet_id, 32)
|
152
|
+
data.store_uint(0, 64)
|
153
|
+
data.store_bytes(hex_to_bytes(pubkey))
|
154
|
+
data.store_dict(HashmapE.new(16))
|
155
|
+
|
156
|
+
options = StateInitOptions.new(code: code, data: data.cell)
|
157
|
+
TonSdkRuby::StateInit.new(options)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -109,8 +109,7 @@ module TonSdkRubySmc
|
|
109
109
|
outlist = OutList.new(OutListOptions.new(actions: actions))
|
110
110
|
|
111
111
|
msg_inner = Builder.new
|
112
|
-
|
113
|
-
.store_uint((1000 + timeout).to_s, 64)
|
112
|
+
.store_uint((Time.now.to_i + timeout).to_s, 64)
|
114
113
|
.store_uint(seqno.to_s, 16)
|
115
114
|
.store_ref(outlist.cell)
|
116
115
|
.cell
|
@@ -93,7 +93,6 @@ module TonSdkRubySmc
|
|
93
93
|
transfers.each do |t|
|
94
94
|
info = CommonMsgInfo.new(
|
95
95
|
IntMsgInfo.new(
|
96
|
-
tag: "int_msg_info",
|
97
96
|
dest: t.destination,
|
98
97
|
bounce: t.bounce,
|
99
98
|
value: t.value,
|
@@ -120,7 +119,6 @@ module TonSdkRubySmc
|
|
120
119
|
|
121
120
|
info = CommonMsgInfo.new(
|
122
121
|
ExtInMsgInfo.new(
|
123
|
-
tag: 'ext_in_msg_info',
|
124
122
|
dest: address
|
125
123
|
)
|
126
124
|
)
|
@@ -89,7 +89,8 @@ module TonSdkRubySmc
|
|
89
89
|
sub_wallet_id: storage_slice.load_uint(32),
|
90
90
|
pubkey: storage_slice.load_bytes(32),
|
91
91
|
plugins_list: storage_slice
|
92
|
-
.load_dict(8 + 256, { deserializers: deserializers })
|
92
|
+
.load_dict(8 + 256, { deserializers: deserializers })
|
93
|
+
.each { |key, value| { key: key, value: value } }
|
93
94
|
.map { |item| item[:key] },
|
94
95
|
}
|
95
96
|
end
|
data/lib/ton-sdk-ruby-smc.rb
CHANGED
@@ -31,6 +31,7 @@ require_relative './ton-sdk-ruby-smc/helpers/helpers'
|
|
31
31
|
require_relative './ton-sdk-ruby-smc/tokens/jetton'
|
32
32
|
require_relative './ton-sdk-ruby-smc/tokens/nft'
|
33
33
|
require_relative './ton-sdk-ruby-smc/tokens/metadata'
|
34
|
+
require_relative './ton-sdk-ruby-smc/wallets/highload_wallet_v2'
|
34
35
|
|
35
36
|
|
36
37
|
module TonSdkRubySmc
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ton-sdk-ruby-smc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nerzh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ton-sdk-ruby
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/ton-sdk-ruby-smc/tokens/metadata.rb
|
97
97
|
- lib/ton-sdk-ruby-smc/tokens/nft.rb
|
98
98
|
- lib/ton-sdk-ruby-smc/version.rb
|
99
|
+
- lib/ton-sdk-ruby-smc/wallets/highload_wallet_v2.rb
|
99
100
|
- lib/ton-sdk-ruby-smc/wallets/pwv2.rb
|
100
101
|
- lib/ton-sdk-ruby-smc/wallets/wallet_v3.rb
|
101
102
|
- lib/ton-sdk-ruby-smc/wallets/wallet_v4.rb
|