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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6877f3e66751e7afe2e3bb9b82b776489df9281ef54b6cef8cce24b3b6fc2dbc
4
- data.tar.gz: e9e374d15c91a169467bd426d20950b2cabd346c98707663361a1d066923f7bf
3
+ metadata.gz: 3dbd17eb78f3b0b8853297b72190f0fb99e8d08ea37dec85a7f22934553c3dd1
4
+ data.tar.gz: fa78d3852ff2c4b3dcdb323e9e358cc985288fb079e5bd48966996afae61bc22
5
5
  SHA512:
6
- metadata.gz: c4e6e7b14b51a6dbf28bf204553e87e1f55077fbd469e7740a4797dcece99b8b6170b391721b557b8b8908c0f5c6edb17f4a956d3f94a2242e9b77a1c7e26230
7
- data.tar.gz: b24018bee5cdb71635d6f9628af349c1b89122197833df47b102ecb7db0405652a0c5ec94eeec5a047b887bc05a588ba758ce100d75a8f7e156dff97ba877b22
6
+ metadata.gz: 0aa664b427cc4e10634f6b04e4d790c7f7322ca73d302631076bca0caf1cef85a0864b0567565bdc393a545e4f8e9eb3b73ea0785b8bf7adea459f7e02cd6a5b
7
+ data.tar.gz: 1aa481155b51d35d6aa95d3bbaf16bd81c57d80ba707e64f53959bc2870f16e3d041bfc0d6e659e0d749fb57da78c4e9ebc9ef007b1db6065dc51300e59bd451
@@ -22,5 +22,5 @@ GNU Lesser General Public License for more details.
22
22
  =end
23
23
 
24
24
  module TonSdkRubySmc
25
- VERSION = "0.0.11"
25
+ VERSION = "0.0.12"
26
26
  end
@@ -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
- # .store_uint((Time.now.to_i + timeout).to_s, 64)
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 }).each { |key, value| { key: key, value: value } }
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
@@ -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.11
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-02-12 00:00:00.000000000 Z
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