Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WILL NOT BE MERGED] try to fix circular import #40

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion multiversx_sdk/converters/transactions_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ def transaction_to_dictionary(self, transaction: ITransaction) -> Dict[str, Any]
"options": transaction.options,
"guardian": transaction.guardian,
"signature": self._value_to_hex_or_empty(transaction.signature),
"guardianSignature": self._value_to_hex_or_empty(transaction.guardian_signature)
"guardianSignature": self._value_to_hex_or_empty(transaction.guardian_signature),
"relayer": transaction.relayer,
"innerTransactions": [self.transaction_to_dictionary(inner_tx) for inner_tx in transaction.inner_transactions],
}

def dictionary_to_transaction(self, dictionary: Dict[str, Any]) -> Transaction:
Expand Down
7 changes: 6 additions & 1 deletion multiversx_sdk/core/interfaces.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Optional, Protocol
from typing import Optional, Protocol, Sequence


class IAddress(Protocol):
Expand All @@ -25,6 +25,11 @@ class ITransaction(Protocol):
guardian: str
signature: bytes
guardian_signature: bytes
relayer: str

@property
def inner_transactions(self) -> Sequence["ITransaction"]:
...


class IMessage(Protocol):
Expand Down
8 changes: 6 additions & 2 deletions multiversx_sdk/core/transaction.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Optional
from typing import Optional, Sequence

from multiversx_sdk.core.constants import (TRANSACTION_MIN_GAS_PRICE,
TRANSACTION_OPTIONS_DEFAULT,
Expand All @@ -21,7 +21,9 @@ def __init__(self,
options: Optional[int] = None,
guardian: Optional[str] = None,
signature: Optional[bytes] = None,
guardian_signature: Optional[bytes] = None) -> None:
guardian_signature: Optional[bytes] = None,
relayer: Optional[str] = None,
inner_transactions: Optional[Sequence["Transaction"]] = None) -> None:
self.chain_id = chain_id
self.sender = sender
self.receiver = receiver
Expand All @@ -41,3 +43,5 @@ def __init__(self,

self.guardian = guardian or ""
self.guardian_signature = guardian_signature or bytes()
self.relayer = relayer or ""
self.inner_transactions = inner_transactions or []
10 changes: 10 additions & 0 deletions multiversx_sdk/core/transaction_computer.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ def _ensure_fields(self, transaction: ITransaction) -> None:
raise BadUsageError(f"Non-empty transaction options requires transaction version >= {MIN_TRANSACTION_VERSION_THAT_SUPPORTS_OPTIONS}")

def _to_dictionary(self, transaction: ITransaction) -> Dict[str, Any]:
from multiversx_sdk.converters.transactions_converter import \
TransactionsConverter
dictionary: Dict[str, Any] = OrderedDict()
dictionary["nonce"] = transaction.nonce
dictionary["value"] = str(transaction.value)
Expand Down Expand Up @@ -122,6 +124,14 @@ def _to_dictionary(self, transaction: ITransaction) -> Dict[str, Any]:
if transaction.guardian:
dictionary["guardian"] = transaction.guardian

if transaction.relayer:
dictionary["relayer"] = transaction.relayer

if len(transaction.inner_transactions):
converter = TransactionsConverter()
dictionary["innerTransactions"] = [converter.transaction_to_dictionary(tx) for tx in transaction.inner_transactions]
# dictionary["innerTransactions"] = "lalalla"

return dictionary

def _dict_to_json(self, dictionary: Dict[str, Any]) -> bytes:
Expand Down
35 changes: 34 additions & 1 deletion multiversx_sdk/core/transaction_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import pytest

from multiversx_sdk.converters.transactions_converter import \
TransactionsConverter
from multiversx_sdk.core.constants import \
MIN_TRANSACTION_VERSION_THAT_SUPPORTS_OPTIONS
from multiversx_sdk.core.errors import BadUsageError, NotEnoughGasError
Expand Down Expand Up @@ -145,7 +147,6 @@ def test_compute_transaction_fee_with_data_field(self):
assert computed_gas == 6005000

def test_compute_transaction_with_guardian_fields(self):

sender_secret_key_hex = "3964a58b0debd802f67239c30aa2b3a75fff1842c203587cb590d03d20e32415"
sender_secret_key = UserSecretKey(bytes.fromhex(sender_secret_key_hex))

Expand Down Expand Up @@ -345,3 +346,35 @@ def test_compute_bytes_for_verifying_transaction_signed_by_hash(self):

assert is_signed_by_alice == True
assert is_signed_by_bob == False

def test_inner_txs(self):
sender_secret_key_hex = "3964a58b0debd802f67239c30aa2b3a75fff1842c203587cb590d03d20e32415"
sender_secret_key = UserSecretKey(bytes.fromhex(sender_secret_key_hex))

transaction = Transaction(
sender="erd1fp4zaxvyc8jh99vauwns99kvs9tn0k6cwrr0zpyz2jvyurcepuhsfzvlar",
receiver="erd1qyu5wthldzr8wx5c9ucg8kjagg0jfs53s8nr3zpz3hypefsdd8ssycr6th",
gas_limit=139000,
gas_price=1000000000,
chain_id="D",
nonce=2,
value=1000000000000000000,
data=b"this is a test transaction",
version=2,
options=2,
guardian="erd1nn8apn09vmf72l7kzr3nd90rr5r2q74he7hseghs3v68c5p7ud2qhhwf96",
guardian_signature=bytes.fromhex("487150c26d38a01fe19fbe26dac20ec2b42ec3abf5763a47a508e62bcd6ad3437c4d404684442e864a1dbad446dc0f852889a09f0650b5fdb55f4ee18147920d")
)
transaction.signature = sender_secret_key.sign(self.transaction_computer.compute_bytes_for_signing(transaction))

relayed = Transaction(
sender="erd1k2s324ww2g0yj38qn2ch2jwctdy8mnfxep94q9arncc6xecg3xaq6mjse8",
receiver="erd1k2s324ww2g0yj38qn2ch2jwctdy8mnfxep94q9arncc6xecg3xaq6mjse8",
gas_limit=1000000,
chain_id="D",
nonce=11,
inner_transactions=[transaction]
)
relayed.signature = self.carol.secret_key.sign(self.transaction_computer.compute_bytes_for_signing(relayed))
converter = TransactionsConverter()
print(converter.transaction_to_dictionary(relayed))
Loading