From fb03db6838f62534d8932787aa43b2970fab33cd Mon Sep 17 00:00:00 2001 From: b4cksl4sh Date: Mon, 16 Sep 2024 13:16:22 +0300 Subject: [PATCH 1/3] fixed state init --- tonsdk/contract/__init__.py | 5 +++-- tonsdk/contract/wallet/__init__.py | 5 +---- tonsdk/contract/wallet/_wallet_contract.py | 1 + tonsdk/contract/wallet/_wallet_contract_v4.py | 2 +- tonsdk/utils/__init__.py | 5 +---- tonsdk/utils/_utils.py | 9 --------- 6 files changed, 7 insertions(+), 20 deletions(-) diff --git a/tonsdk/contract/__init__.py b/tonsdk/contract/__init__.py index ef5b325..4474697 100644 --- a/tonsdk/contract/__init__.py +++ b/tonsdk/contract/__init__.py @@ -41,7 +41,9 @@ def create_code_cell(self): return self.options["code"] def create_data_cell(self): - return Cell() + if "data" not in self.options or self.options["data"] is None: + raise Exception("Contract: options.data is not defined") + return self.options["data"] def create_init_external_message(self): create_state_init = self.create_state_init() @@ -140,4 +142,3 @@ def __create_state_init(self, code, data, library=None, split_depth=None, tickto if library: state_init.refs.append(library) return state_init - diff --git a/tonsdk/contract/wallet/__init__.py b/tonsdk/contract/wallet/__init__.py index 5472d6f..9b58968 100644 --- a/tonsdk/contract/wallet/__init__.py +++ b/tonsdk/contract/wallet/__init__.py @@ -7,7 +7,6 @@ from ._wallet_contract_v3 import WalletV3ContractR1, WalletV3ContractR2 from ._wallet_contract_v4 import WalletV4ContractR1, WalletV4ContractR2 from ._highload_wallet_contract import HighloadWalletV2Contract -from ._highload_wallet_contract_v3 import HighloadWalletV3Contract from ._multisig_wallet_contract import MultiSigWallet, MultiSigOrder, MultiSigOrderBuilder from ...crypto import mnemonic_new, mnemonic_to_wallet_key, mnemonic_is_valid from ...crypto.exceptions import InvalidMnemonicsError @@ -21,7 +20,6 @@ class WalletVersionEnum(str, Enum): v4r1 = 'v4r1' v4r2 = 'v4r2' hv2 = 'hv2' - hv3 = 'hv3' class Wallets: @@ -33,8 +31,7 @@ class Wallets: WalletVersionEnum.v3r2: WalletV3ContractR2, WalletVersionEnum.v4r1: WalletV4ContractR1, WalletVersionEnum.v4r2: WalletV4ContractR2, - WalletVersionEnum.hv2: HighloadWalletV2Contract, - WalletVersionEnum.hv3: HighloadWalletV3Contract + WalletVersionEnum.hv2: HighloadWalletV2Contract } @classmethod diff --git a/tonsdk/contract/wallet/_wallet_contract.py b/tonsdk/contract/wallet/_wallet_contract.py index 4dfc67a..3cec915 100644 --- a/tonsdk/contract/wallet/_wallet_contract.py +++ b/tonsdk/contract/wallet/_wallet_contract.py @@ -81,6 +81,7 @@ def create_external_message(self, signing_message, seqno, dummy_signature=False) data = deploy["data"] self_address = self.address + header = Contract.create_external_message_header(self_address) result_message = Contract.create_common_msg_info( header, state_init, body) diff --git a/tonsdk/contract/wallet/_wallet_contract_v4.py b/tonsdk/contract/wallet/_wallet_contract_v4.py index 5e52377..8c143c6 100644 --- a/tonsdk/contract/wallet/_wallet_contract_v4.py +++ b/tonsdk/contract/wallet/_wallet_contract_v4.py @@ -22,7 +22,7 @@ def create_signing_message(self, seqno=None, without_op=False): message.bits.write_bit(1) else: timestamp = int(time.time()) # get timestamp in seconds - message.bits.write_uint(timestamp + 60, 32) + message.bits.write_uint(timestamp + 5 * 60, 32) message.bits.write_uint(seqno, 32) diff --git a/tonsdk/utils/__init__.py b/tonsdk/utils/__init__.py index 1f05df8..03a0abd 100644 --- a/tonsdk/utils/__init__.py +++ b/tonsdk/utils/__init__.py @@ -3,8 +3,7 @@ from ._exceptions import InvalidAddressError from ._utils import concat_bytes, move_to_end, tree_walk, crc32c, \ crc16, read_n_bytes_uint_from_array, compare_bytes, sign_message, b64str_to_bytes, \ - b64str_to_hex, bytes_to_b64str, check_timeout -from ._highload_query_id import HighloadQueryId + b64str_to_hex, bytes_to_b64str __all__ = [ 'Address', @@ -21,10 +20,8 @@ 'b64str_to_bytes', 'b64str_to_hex', 'bytes_to_b64str', - 'check_timeout', 'to_nano', 'from_nano', 'TonCurrencyEnum', - 'HighloadQueryId', ] diff --git a/tonsdk/utils/_utils.py b/tonsdk/utils/_utils.py index c7472ac..c9414a6 100644 --- a/tonsdk/utils/_utils.py +++ b/tonsdk/utils/_utils.py @@ -142,12 +142,3 @@ def b64str_to_hex(b64str): def bytes_to_b64str(bytes_arr): return codecs.decode(codecs.encode( bytes_arr, "base64"), 'utf-8').replace("\n", '') - - -def check_timeout(seconds): - if not seconds: - raise ValueError("invalid timeout") - if seconds < 60 * 10: - raise ValueError("minimum timeout 10 minute") - if seconds > 60 * 60 * 24 * 30: - raise ValueError("maximum timeout 30 days") From d7d3b5bd163ec338795d229bfbb4d5666883f62b Mon Sep 17 00:00:00 2001 From: b4cksl4sh Date: Mon, 16 Sep 2024 13:28:16 +0300 Subject: [PATCH 2/3] added HighloadV3 from official github --- tonsdk/contract/__init__.py | 5 ++--- tonsdk/contract/wallet/__init__.py | 5 ++++- tonsdk/contract/wallet/_wallet_contract.py | 1 - tonsdk/contract/wallet/_wallet_contract_v4.py | 2 +- tonsdk/utils/__init__.py | 5 ++++- tonsdk/utils/_utils.py | 9 +++++++++ 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/tonsdk/contract/__init__.py b/tonsdk/contract/__init__.py index 4474697..ef5b325 100644 --- a/tonsdk/contract/__init__.py +++ b/tonsdk/contract/__init__.py @@ -41,9 +41,7 @@ def create_code_cell(self): return self.options["code"] def create_data_cell(self): - if "data" not in self.options or self.options["data"] is None: - raise Exception("Contract: options.data is not defined") - return self.options["data"] + return Cell() def create_init_external_message(self): create_state_init = self.create_state_init() @@ -142,3 +140,4 @@ def __create_state_init(self, code, data, library=None, split_depth=None, tickto if library: state_init.refs.append(library) return state_init + diff --git a/tonsdk/contract/wallet/__init__.py b/tonsdk/contract/wallet/__init__.py index 9b58968..5472d6f 100644 --- a/tonsdk/contract/wallet/__init__.py +++ b/tonsdk/contract/wallet/__init__.py @@ -7,6 +7,7 @@ from ._wallet_contract_v3 import WalletV3ContractR1, WalletV3ContractR2 from ._wallet_contract_v4 import WalletV4ContractR1, WalletV4ContractR2 from ._highload_wallet_contract import HighloadWalletV2Contract +from ._highload_wallet_contract_v3 import HighloadWalletV3Contract from ._multisig_wallet_contract import MultiSigWallet, MultiSigOrder, MultiSigOrderBuilder from ...crypto import mnemonic_new, mnemonic_to_wallet_key, mnemonic_is_valid from ...crypto.exceptions import InvalidMnemonicsError @@ -20,6 +21,7 @@ class WalletVersionEnum(str, Enum): v4r1 = 'v4r1' v4r2 = 'v4r2' hv2 = 'hv2' + hv3 = 'hv3' class Wallets: @@ -31,7 +33,8 @@ class Wallets: WalletVersionEnum.v3r2: WalletV3ContractR2, WalletVersionEnum.v4r1: WalletV4ContractR1, WalletVersionEnum.v4r2: WalletV4ContractR2, - WalletVersionEnum.hv2: HighloadWalletV2Contract + WalletVersionEnum.hv2: HighloadWalletV2Contract, + WalletVersionEnum.hv3: HighloadWalletV3Contract } @classmethod diff --git a/tonsdk/contract/wallet/_wallet_contract.py b/tonsdk/contract/wallet/_wallet_contract.py index 3cec915..4dfc67a 100644 --- a/tonsdk/contract/wallet/_wallet_contract.py +++ b/tonsdk/contract/wallet/_wallet_contract.py @@ -81,7 +81,6 @@ def create_external_message(self, signing_message, seqno, dummy_signature=False) data = deploy["data"] self_address = self.address - header = Contract.create_external_message_header(self_address) result_message = Contract.create_common_msg_info( header, state_init, body) diff --git a/tonsdk/contract/wallet/_wallet_contract_v4.py b/tonsdk/contract/wallet/_wallet_contract_v4.py index 8c143c6..5e52377 100644 --- a/tonsdk/contract/wallet/_wallet_contract_v4.py +++ b/tonsdk/contract/wallet/_wallet_contract_v4.py @@ -22,7 +22,7 @@ def create_signing_message(self, seqno=None, without_op=False): message.bits.write_bit(1) else: timestamp = int(time.time()) # get timestamp in seconds - message.bits.write_uint(timestamp + 5 * 60, 32) + message.bits.write_uint(timestamp + 60, 32) message.bits.write_uint(seqno, 32) diff --git a/tonsdk/utils/__init__.py b/tonsdk/utils/__init__.py index 03a0abd..1f05df8 100644 --- a/tonsdk/utils/__init__.py +++ b/tonsdk/utils/__init__.py @@ -3,7 +3,8 @@ from ._exceptions import InvalidAddressError from ._utils import concat_bytes, move_to_end, tree_walk, crc32c, \ crc16, read_n_bytes_uint_from_array, compare_bytes, sign_message, b64str_to_bytes, \ - b64str_to_hex, bytes_to_b64str + b64str_to_hex, bytes_to_b64str, check_timeout +from ._highload_query_id import HighloadQueryId __all__ = [ 'Address', @@ -20,8 +21,10 @@ 'b64str_to_bytes', 'b64str_to_hex', 'bytes_to_b64str', + 'check_timeout', 'to_nano', 'from_nano', 'TonCurrencyEnum', + 'HighloadQueryId', ] diff --git a/tonsdk/utils/_utils.py b/tonsdk/utils/_utils.py index c9414a6..c7472ac 100644 --- a/tonsdk/utils/_utils.py +++ b/tonsdk/utils/_utils.py @@ -142,3 +142,12 @@ def b64str_to_hex(b64str): def bytes_to_b64str(bytes_arr): return codecs.decode(codecs.encode( bytes_arr, "base64"), 'utf-8').replace("\n", '') + + +def check_timeout(seconds): + if not seconds: + raise ValueError("invalid timeout") + if seconds < 60 * 10: + raise ValueError("minimum timeout 10 minute") + if seconds > 60 * 60 * 24 * 30: + raise ValueError("maximum timeout 30 days") From 1962603b9d0266b4460d5b3239ec3eec3dd04139 Mon Sep 17 00:00:00 2001 From: b4cksl4sh Date: Mon, 16 Sep 2024 13:29:39 +0300 Subject: [PATCH 3/3] Fixed state init in new version --- tonsdk/contract/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tonsdk/contract/__init__.py b/tonsdk/contract/__init__.py index ef5b325..abc1271 100644 --- a/tonsdk/contract/__init__.py +++ b/tonsdk/contract/__init__.py @@ -41,7 +41,9 @@ def create_code_cell(self): return self.options["code"] def create_data_cell(self): - return Cell() + if "data" not in self.options or self.options["data"] is None: + raise Exception("Contract: options.data is not defined") + return self.options["data"] def create_init_external_message(self): create_state_init = self.create_state_init()