From 7d14b9787de4d7e8c899195e6e40664691aefb9d Mon Sep 17 00:00:00 2001 From: Ilya Raykker Date: Mon, 11 Nov 2024 16:01:06 +0400 Subject: [PATCH 1/3] More fixes to align with SecretNetwork v1.15 changes --- pyproject.toml | 2 +- secret_sdk/client/lcd/api/tx.py | 1 + secret_sdk/client/lcd/wallet.py | 4 ++-- secret_sdk/core/wasm/msgs.py | 7 ++++--- secret_sdk/util/tx.py | 15 ++++++++++++++- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1ec146c..54b10f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ license = "MIT" packages = [{ include = "secret_sdk" }] readme = "README.md" repository = "https://github.com/stephanegg/secret-sdk-python" -version = "1.8.0" +version = "1.8.1" [tool.poetry.dependencies] aiohttp = "^3.7.3" diff --git a/secret_sdk/client/lcd/api/tx.py b/secret_sdk/client/lcd/api/tx.py index 10024a8..9434301 100644 --- a/secret_sdk/client/lcd/api/tx.py +++ b/secret_sdk/client/lcd/api/tx.py @@ -447,6 +447,7 @@ async def broadcast_adapter(self, tx: Tx, mode: BroadcastMode, options: Broadcas broadcast_result = None tx_encoded = await super()._try_await(self.encode(tx)) if mode == BroadcastMode.BROADCAST_MODE_BLOCK: + raise Exception("BROADCAST_MODE_BLOCK is deprecated. Please use BROADCAST_MODE_SYNC instead") broadcast_result = await BaseAsyncAPI._try_await(self.broadcast(tx_encoded, options)) if mode == BroadcastMode.BROADCAST_MODE_ASYNC: broadcast_result = await BaseAsyncAPI._try_await(self.broadcast_async(tx_encoded, options)) diff --git a/secret_sdk/client/lcd/wallet.py b/secret_sdk/client/lcd/wallet.py index fd73f58..7219bfb 100644 --- a/secret_sdk/client/lcd/wallet.py +++ b/secret_sdk/client/lcd/wallet.py @@ -177,7 +177,7 @@ async def create_and_broadcast_tx( create_tx_options.fee = fee signed_tx = await self.create_and_sign_tx(create_tx_options) - broadcast_mode = broadcast_mode if broadcast_mode else BroadcastMode.BROADCAST_MODE_BLOCK + broadcast_mode = broadcast_mode if broadcast_mode else BroadcastMode.BROADCAST_MODE_SYNC tx = await self.lcd.tx.broadcast_adapter(signed_tx, mode=broadcast_mode) return tx @@ -378,7 +378,7 @@ def create_and_broadcast_tx( create_tx_options.fee = fee signed_tx = self.create_and_sign_tx(create_tx_options) - broadcast_mode = broadcast_mode if broadcast_mode else BroadcastMode.BROADCAST_MODE_BLOCK + broadcast_mode = broadcast_mode if broadcast_mode else BroadcastMode.BROADCAST_MODE_SYNC tx = self.lcd.tx.broadcast_adapter(signed_tx, mode=broadcast_mode) return tx diff --git a/secret_sdk/core/wasm/msgs.py b/secret_sdk/core/wasm/msgs.py index 284bba6..19ee7c1 100755 --- a/secret_sdk/core/wasm/msgs.py +++ b/secret_sdk/core/wasm/msgs.py @@ -83,7 +83,7 @@ def to_amino(self) -> dict: def from_data(cls, data: dict) -> MsgStoreCode: return cls( sender=data["sender"], - wasm_byte_code=data["wasm_byte_code"], + wasm_byte_code=base64.b64decode(data["wasm_byte_code"]), source=data.get("source"), builder=data.get("builder") ) @@ -92,7 +92,7 @@ def to_proto(self) -> MsgStoreCode_pb: self.gzip_wasm() return MsgStoreCode_pb( - sender=address_to_bytes(self.sender), + sender=self.sender, wasm_byte_code=self.wasm_byte_code, source=self.source, builder=self.builder @@ -101,7 +101,7 @@ def to_proto(self) -> MsgStoreCode_pb: @classmethod def from_proto(cls, proto: MsgStoreCode_pb) -> MsgStoreCode: return cls( - sender=AccAddress(bytes_to_address(proto.sender)), + sender=AccAddress(proto.sender), wasm_byte_code=base64.b64encode(proto.wasm_byte_code), source=proto.source, builder=proto.builder @@ -170,6 +170,7 @@ def to_proto(self) -> MsgInstantiateContract_pb: return MsgInstantiateContract_pb( sender=address_to_bytes(self.sender), + sender_address=self.sender, code_id=self.code_id, label=self.label, init_msg=self.init_msg_encrypted, diff --git a/secret_sdk/util/tx.py b/secret_sdk/util/tx.py index 13a224c..9b3783f 100644 --- a/secret_sdk/util/tx.py +++ b/secret_sdk/util/tx.py @@ -14,4 +14,17 @@ def get_value_from_raw_log( for a in e['attributes']: if f'{e["type"]}.{a["key"]}' == key: return str(a['value']) - return '' \ No newline at end of file + return '' + +def get_value_from_events( + events: str, + key: str, +): + if not events: + return '' + + for e in events: + for a in e['attributes']: + if f'{e["type"]}.{a["key"]}' == key: + return str(a['value']) + return '' From b72b1a3756c6cf3d8030dbaf248835d02c3bf477 Mon Sep 17 00:00:00 2001 From: Ilya Raykker Date: Thu, 14 Nov 2024 16:46:43 +0400 Subject: [PATCH 2/3] Update protobufs --- .../secret/compute/v1beta1/__init__.py | 21 +++---------------- .../secret/registration/v1beta1/__init__.py | 12 +---------- 2 files changed, 4 insertions(+), 29 deletions(-) diff --git a/secret_sdk/protobuf/secret/compute/v1beta1/__init__.py b/secret_sdk/protobuf/secret/compute/v1beta1/__init__.py index fb63260..5503f16 100644 --- a/secret_sdk/protobuf/secret/compute/v1beta1/__init__.py +++ b/secret_sdk/protobuf/secret/compute/v1beta1/__init__.py @@ -325,12 +325,8 @@ class Sequence(betterproto.Message): @dataclass(eq=False, repr=False) class MsgStoreCode(betterproto.Message): - sender: str = betterproto.string_field(1) - """ - // sender is the canonical address of the sender bytes sender = 1 [ - (gogoproto.casttype) = "github.com/cosmos/cosmos- - sdk/types.AccAddress" ]; Sender is the actor that signed the messages - """ + sender: bytes = betterproto.bytes_field(1) + """sender is the canonical address of the sender""" wasm_byte_code: bytes = betterproto.bytes_field(2) """WASMByteCode can be raw or gzip compressed""" @@ -356,10 +352,7 @@ class MsgStoreCodeResponse(betterproto.Message): @dataclass(eq=False, repr=False) class MsgInstantiateContract(betterproto.Message): sender: bytes = betterproto.bytes_field(1) - """ - sender is the canonical address of the sender string sender = 1 [ - (cosmos_proto.scalar) = "cosmos.AddressString" ]; - """ + """sender is the canonical address of the sender""" callback_code_hash: str = betterproto.string_field(2) code_id: int = betterproto.uint64_field(3) @@ -377,12 +370,6 @@ class MsgInstantiateContract(betterproto.Message): admin: str = betterproto.string_field(8) """Admin is an optional address that can execute migrations""" - sender_address: str = betterproto.string_field(9) - """ - To get the message signer define sender_address as human adress for sender, - as a work around without the need to modify cosmwasm valiation logic - """ - @dataclass(eq=False, repr=False) class MsgInstantiateContractResponse(betterproto.Message): @@ -419,8 +406,6 @@ class MsgExecuteContract(betterproto.Message): transaction """ - sender_address: str = betterproto.string_field(7) - @dataclass(eq=False, repr=False) class MsgExecuteContractResponse(betterproto.Message): diff --git a/secret_sdk/protobuf/secret/registration/v1beta1/__init__.py b/secret_sdk/protobuf/secret/registration/v1beta1/__init__.py index cf4b1b9..9d19731 100644 --- a/secret_sdk/protobuf/secret/registration/v1beta1/__init__.py +++ b/secret_sdk/protobuf/secret/registration/v1beta1/__init__.py @@ -42,18 +42,8 @@ class RegistrationNodeInfo(betterproto.Message): @dataclass(eq=False, repr=False) class RaAuthenticate(betterproto.Message): - sender: str = betterproto.string_field(1) - """ - bytes sender = 1 [ (gogoproto.casttype) = - "github.com/cosmos/cosmos-sdk/types.AccAddress" ]; - """ - + sender: bytes = betterproto.bytes_field(1) certificate: bytes = betterproto.bytes_field(2) - sender_addr: bytes = betterproto.bytes_field(3) - """ - string sender_address = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" - ]; - """ @dataclass(eq=False, repr=False) From d94c280ed3568463bb32f9ec056960094234fde8 Mon Sep 17 00:00:00 2001 From: Ilya Raykker Date: Thu, 14 Nov 2024 16:51:54 +0400 Subject: [PATCH 3/3] More fixes to align with SecretNetwork v1.15 changes --- secret_sdk/core/wasm/msgs.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/secret_sdk/core/wasm/msgs.py b/secret_sdk/core/wasm/msgs.py index 19ee7c1..5f5beea 100755 --- a/secret_sdk/core/wasm/msgs.py +++ b/secret_sdk/core/wasm/msgs.py @@ -92,7 +92,7 @@ def to_proto(self) -> MsgStoreCode_pb: self.gzip_wasm() return MsgStoreCode_pb( - sender=self.sender, + sender=address_to_bytes(self.sender), wasm_byte_code=self.wasm_byte_code, source=self.source, builder=self.builder @@ -101,7 +101,7 @@ def to_proto(self) -> MsgStoreCode_pb: @classmethod def from_proto(cls, proto: MsgStoreCode_pb) -> MsgStoreCode: return cls( - sender=AccAddress(proto.sender), + sender=AccAddress(bytes_to_address(proto.sender)), wasm_byte_code=base64.b64encode(proto.wasm_byte_code), source=proto.source, builder=proto.builder @@ -170,7 +170,6 @@ def to_proto(self) -> MsgInstantiateContract_pb: return MsgInstantiateContract_pb( sender=address_to_bytes(self.sender), - sender_address=self.sender, code_id=self.code_id, label=self.label, init_msg=self.init_msg_encrypted, @@ -250,7 +249,6 @@ def to_proto(self) -> MsgExecuteContract_pb: return MsgExecuteContract_pb( sender=address_to_bytes(self.sender), - sender_address=self.sender, contract=address_to_bytes(self.contract), msg=self.msg_encrypted, sent_funds=self.sent_funds.to_proto(),