symbol-sdk-python 3.1.0__py3-none-any.whl → 3.2.2__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: symbol-sdk-python
3
- Version: 3.1.0
3
+ Version: 3.2.2
4
4
  Summary: Symbol SDK
5
5
  Home-page: https://github.com/symbol/symbol/tree/main/sdk/python
6
6
  License: MIT
@@ -15,9 +15,9 @@ Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Programming Language :: Python :: 3.9
16
16
  Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
- Requires-Dist: cryptography (>=41.0.3,<41.1.0)
18
+ Requires-Dist: cryptography (>=42.0.2,<42.1.0)
19
19
  Requires-Dist: mnemonic (>=0.20,<1.0)
20
- Requires-Dist: pillow (>=10.0.0,<10.1.0)
20
+ Requires-Dist: pillow (>=10.3.0,<10.4.0)
21
21
  Requires-Dist: pynacl (>=1.5.0,<1.6.0)
22
22
  Requires-Dist: pyyaml (>=6.0.1,<6.1.0)
23
23
  Requires-Dist: pyzbar (>=0.1.9,<0.2.0)
@@ -11,13 +11,13 @@ symbolchain/CodeWordsEncoder.py,sha256=YydhdbhxTvjXYUp1OkJj7XjTz3WfKVSGi8VIUzGTT
11
11
  symbolchain/CryptoTypes.py,sha256=9rMQyYF0xBU5W1vo07fgDqfP4dR3E_Hv5Ec1ozKanUs,1844
12
12
  symbolchain/DiceMnemonicGenerator.py,sha256=F8QU90PQzp-qzNqnnxHowVtG_-rNiqWDALSsi-8I_og,1848
13
13
  symbolchain/Network.py,sha256=LCMIkYo5yTlV-8_gqIjOZTSGeCBJuBZ7YisJJ1G36z4,3368
14
- symbolchain/NetworkTimestamp.py,sha256=-hVRRTufRY7Bl257DcR0pkRO5t2RzRVzdQEPomrH_Q0,1594
14
+ symbolchain/NetworkTimestamp.py,sha256=M3T2HFYJT5v9B_tkGn2FkjW6C9hueXmdTjyWWSr9rXw,1595
15
15
  symbolchain/NodeDescriptorRepository.py,sha256=DVqhj_D6KWgaYiJC3jKv2ne-AJTvpJrKruhiRmGgtQE,1019
16
16
  symbolchain/Ordered.py,sha256=--tQ_aZpXhZYcsRLgMjUNHPYlAH7BMfuss2CSxMvNhY,397
17
17
  symbolchain/PrivateKeyStorage.py,sha256=dACQnqY1nDtNbfItdrG1iyqbnNnEv8G_sntDCD5crs8,1606
18
18
  symbolchain/QrSignatureStorage.py,sha256=-KM2QdzkBwOrydxyTLttdDBcZ4vk0O-gwZ51PWdwEDQ,1348
19
19
  symbolchain/QrStorage.py,sha256=ch1XsJ-zkZ27hYd_I_ZfChuIyp-k41R3tbTb8LHy6Ik,1494
20
- symbolchain/RuleBasedTransactionFactory.py,sha256=0y5F-AlT2YmP9pFBxdAlSXnZizKIPbyGi8LroXxUa9o,4992
20
+ symbolchain/RuleBasedTransactionFactory.py,sha256=a07brGtzujd3I_DDAiQmprgh4a-hoEET2SjMGX-Pphk,5101
21
21
  symbolchain/SharedKey.py,sha256=cnVwHLznU7RKcqhxDcLc9QfRwSHI9Fm9tzanSjsnQsQ,593
22
22
  symbolchain/TransactionDescriptorProcessor.py,sha256=XeEuWs8EFGKV8SBDm_tG9KWMjWMsvL8G4PHJrTl57uE,1806
23
23
  symbolchain/Transforms.py,sha256=NtSWiq3ntvylwq1VoQ4S1OIeNnVOBekWDK-Vf2uo-ZI,226
@@ -25,30 +25,30 @@ symbolchain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  symbolchain/external/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  symbolchain/external/ed25519.py,sha256=xpq-UOQ3CNCZp4V2uaHsWeyEfXezCfWe44NKsecZCqU,7833
27
27
  symbolchain/facade/BatchOperations.py,sha256=SQR6fXTi1mI7H7ubJsqYEabWQzzVXhbD8BkzgIpoCII,2983
28
- symbolchain/facade/NemFacade.py,sha256=7XUvMY1KMts08XDdLyuuElFq8GbLNt0SQwHfAS4rh0I,2801
29
- symbolchain/facade/SymbolFacade.py,sha256=kE8tCR6WpWSMMuhOfPXhB0coQuzHYcI2-aOHF1XqWFk,4940
28
+ symbolchain/facade/NemFacade.py,sha256=oOvU8hJRNjZAFaoETueyw_R0K-S6AvlNV3pB7ltVOfY,4166
29
+ symbolchain/facade/SymbolFacade.py,sha256=Yz7hIGanNY8iFLeIelRB8-M44gmlvbdc0pB_ouGkNg0,6527
30
30
  symbolchain/facade/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  symbolchain/impl/CipherHelpers.py,sha256=KSYH95oie-PxFfGAYfnqHOC1RWIrdxC7Vp6Go-o469Q,2152
32
32
  symbolchain/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- symbolchain/nc/__init__.py,sha256=eq2TLynI3PuP7JWJoquJlnqaWn20VztjtLsF0sbX3m8,178770
33
+ symbolchain/nc/__init__.py,sha256=vosYIQt3McpoGpspAl3YoV3_vrpNO-ddiTDmyqk0u-c,106403
34
34
  symbolchain/nem/KeyPair.py,sha256=34VwU7EdroB0nnzTCdTEUAK_DMrcDYzo3JKdniXQMG4,3712
35
- symbolchain/nem/MessageEncoder.py,sha256=U8-X7MczTj-XRvCx1YHXmK389oyf0OLAu7WEBf3gpfc,2583
35
+ symbolchain/nem/MessageEncoder.py,sha256=EGm4mtmyXUXQb-R49Xmrl3w40ye_LbZQ8r5aJusH0WE,2699
36
36
  symbolchain/nem/Network.py,sha256=vD7YEqJHyUPK14UAGBT29cX9Cjvq1uHDfeiYudaxgAw,1746
37
37
  symbolchain/nem/SharedKey.py,sha256=owBUV_XNo1wCby0b4Amz1Bl6uzTeQmiSFy7UcWFo00I,1094
38
- symbolchain/nem/TransactionFactory.py,sha256=k-qyXHa7lL9jrfNrtXCrRVzl2Qv3BuMoTXU7AKYvQow,4017
38
+ symbolchain/nem/TransactionFactory.py,sha256=IaKsLdTmW8ZU9s5kaUcaGl7P91awR8BMDfX_zWTAO04,4170
39
39
  symbolchain/nem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- symbolchain/ripemd160.py,sha256=rq9A2ohillUGcxM4x31eFxXcfLUi-O3sHK8ff4j1XAI,378
41
- symbolchain/sc/__init__.py,sha256=gTSb0ciah9VBvmcMrXCzCxgun-0CgutfrIwDylQDG5I,477679
40
+ symbolchain/ripemd160.py,sha256=u2uv8wJY5FY8tll_EfiGE5o65Ri6E-8HbynvJUPBJa8,429
41
+ symbolchain/sc/__init__.py,sha256=axRbsZf_j33DLTJ2TvIKg6aAxVG5xo1I2w51lzO2h9M,286967
42
42
  symbolchain/symbol/IdGenerator.py,sha256=4CWW5EekbmULDDukscs73ZFN_U179hAacK3luL7Q0TA,1696
43
43
  symbolchain/symbol/KeyPair.py,sha256=CkQh7oOeVRbjKewTfln0t1PZckcTuIXb2roY1zZjVrc,1506
44
44
  symbolchain/symbol/Merkle.py,sha256=FrCwnveXEoXEx7xFP4UC_htjAVuVeUNbvnh8YDdy3z0,7243
45
- symbolchain/symbol/MessageEncoder.py,sha256=A2KX8MxhCMYaxnEnKY0HyVGgB9cjAUiF3FMgDWfXMxk,3766
46
- symbolchain/symbol/Metadata.py,sha256=pBpBo0XmC4I7cjBqGVtdu2Blpey32l_1dZyTYsbmMyA,567
47
- symbolchain/symbol/Network.py,sha256=fKYKYl9gm3cRUcTJA7LxxT3LGQgxb_TUNDVH8rRHR_c,2229
45
+ symbolchain/symbol/MessageEncoder.py,sha256=X4io7OTEJOgy9LtDCzInm4QQFVbNWpkJnba6-S5vrkI,3882
46
+ symbolchain/symbol/Metadata.py,sha256=8DpgwTFy8IYxjNRmT_NBSn3WBhU9z2xlWvsMIh7GgwU,884
47
+ symbolchain/symbol/Network.py,sha256=CFFEFEByLDF-KFD2As5dgj-1MIuKmec5T_yfoxNDHkQ,2933
48
48
  symbolchain/symbol/SharedKey.py,sha256=Bg1qYW_iMNYKtokep5S1m9b7GfywM5OGaCrVUdt01JU,334
49
- symbolchain/symbol/TransactionFactory.py,sha256=HB7rTP57kFlxj8tWZRSChhKh6UN8IUDATdiCtRwGMYQ,3624
49
+ symbolchain/symbol/TransactionFactory.py,sha256=65N6UHDwrzNyHnpxkw-RmjuC32Znto1B9TH5OgcD1Oo,3957
50
50
  symbolchain/symbol/VotingKeysGenerator.py,sha256=tuJ6yl2CqqQ9uupAw3z-GJIW20WOsblcLQb2_fPUCDE,1686
51
51
  symbolchain/symbol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- symbol_sdk_python-3.1.0.dist-info/METADATA,sha256=5hH6fS4SuzboQIKZq7mq4Zgr05UA0QOm0I5tfHbTE8Q,5584
53
- symbol_sdk_python-3.1.0.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
54
- symbol_sdk_python-3.1.0.dist-info/RECORD,,
52
+ symbol_sdk_python-3.2.2.dist-info/METADATA,sha256=H3eZti6Yn4oq90_uE111bCzAPZkgrfnU2VWN9f1Spzg,5584
53
+ symbol_sdk_python-3.2.2.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
54
+ symbol_sdk_python-3.2.2.dist-info/RECORD,,
@@ -50,4 +50,4 @@ class NetworkTimestampDatetimeConverter:
50
50
  if reference_datetime < self.epoch:
51
51
  raise ValueError('timestamp cannot be before epoch')
52
52
 
53
- return (reference_datetime - self.epoch) / datetime.timedelta(**{self.time_units: 1})
53
+ return (reference_datetime - self.epoch) // datetime.timedelta(**{self.time_units: 1})
@@ -71,6 +71,7 @@ class RuleBasedTransactionFactory:
71
71
  """Creates flag type parser."""
72
72
  flags_class = self._get_module_class(name)
73
73
  string_to_enum = dict(map(lambda key: (key.name.lower(), key), flags_class))
74
+ string_to_enum['none'] = flags_class(0) # automatically add none => 0 mapping (required for python 3.11+)
74
75
 
75
76
  def parser(flags):
76
77
  if isinstance(flags, str):
@@ -1,12 +1,46 @@
1
+ from datetime import datetime, timezone
2
+
1
3
  import sha3
2
4
 
3
5
  from ..CryptoTypes import Hash256, PrivateKey, PublicKey
4
6
  from ..nem.KeyPair import KeyPair, Verifier
7
+ from ..nem.MessageEncoder import MessageEncoder
5
8
  from ..nem.Network import Address, Network
6
9
  from ..nem.SharedKey import SharedKey
7
10
  from ..nem.TransactionFactory import TransactionFactory
8
11
  from ..Network import NetworkLocator
9
12
 
13
+ # region NemPublicAccount / NemAccount
14
+
15
+
16
+ class NemPublicAccount:
17
+ """NEM public account."""
18
+
19
+ def __init__(self, facade, public_key):
20
+ """Creates a NEM public account."""
21
+ self._facade = facade
22
+ self.public_key = public_key
23
+ self.address = self._facade.network.public_key_to_address(self.public_key)
24
+
25
+
26
+ class NemAccount(NemPublicAccount):
27
+ """NEM account."""
28
+
29
+ def __init__(self, facade, key_pair):
30
+ """Creates a NEM account."""
31
+ super().__init__(facade, key_pair.public_key)
32
+ self.key_pair = key_pair
33
+
34
+ def message_encoder(self):
35
+ """Creates a message encoder that can be used for encrypting and encoding messages between two parties."""
36
+ return MessageEncoder(self.key_pair)
37
+
38
+ def sign_transaction(self, transaction):
39
+ """Signs a NEM transaction."""
40
+ return self._facade.sign_transaction(self.key_pair, transaction)
41
+
42
+ # endregion
43
+
10
44
 
11
45
  class NemFacade:
12
46
  """Facade used to interact with NEM blockchain."""
@@ -40,6 +74,18 @@ class NemFacade:
40
74
  PublicKey: 'public_key'
41
75
  }
42
76
 
77
+ def now(self):
78
+ """Creates a network timestamp representing the current time."""
79
+ return self.network.from_datetime(datetime.now(timezone.utc))
80
+
81
+ def create_public_account(self, public_key):
82
+ """Creates a NEM public account from a public key."""
83
+ return NemPublicAccount(self, public_key)
84
+
85
+ def create_account(self, private_key):
86
+ """Creates a NEM account from a private key."""
87
+ return NemAccount(self, KeyPair(private_key))
88
+
43
89
  @staticmethod
44
90
  def hash_transaction(transaction):
45
91
  """Hashes a NEM transaction."""
@@ -1,10 +1,12 @@
1
1
  import hashlib
2
+ from datetime import datetime, timezone
2
3
 
3
4
  from .. import sc
4
5
  from ..CryptoTypes import Hash256, PublicKey, Signature
5
6
  from ..Network import NetworkLocator
6
7
  from ..symbol.KeyPair import KeyPair, Verifier
7
8
  from ..symbol.Merkle import MerkleHashBuilder
9
+ from ..symbol.MessageEncoder import MessageEncoder
8
10
  from ..symbol.Network import Address, Network
9
11
  from ..symbol.SharedKey import SharedKey
10
12
  from ..symbol.TransactionFactory import TransactionFactory
@@ -25,6 +27,41 @@ AGGREGATE_HASHED_SIZE = sum(field[1] for field in [
25
27
  ])
26
28
 
27
29
 
30
+ # region SymbolPublicAccount / SymbolAccount
31
+
32
+ class SymbolPublicAccount:
33
+ """Symbol public account."""
34
+
35
+ def __init__(self, facade, public_key):
36
+ """Creates a Symbol public account."""
37
+ self._facade = facade
38
+ self.public_key = public_key
39
+ self.address = self._facade.network.public_key_to_address(self.public_key)
40
+
41
+
42
+ class SymbolAccount(SymbolPublicAccount):
43
+ """Symbol account."""
44
+
45
+ def __init__(self, facade, key_pair):
46
+ """Creates a Symbol account."""
47
+ super().__init__(facade, key_pair.public_key)
48
+ self.key_pair = key_pair
49
+
50
+ def message_encoder(self):
51
+ """Creates a message encoder that can be used for encrypting and encoding messages between two parties."""
52
+ return MessageEncoder(self.key_pair)
53
+
54
+ def sign_transaction(self, transaction):
55
+ """Signs a Symbol transaction."""
56
+ return self._facade.sign_transaction(self.key_pair, transaction)
57
+
58
+ def cosign_transaction(self, transaction, detached=False):
59
+ """Cosigns a Symbol transaction."""
60
+ return self._facade.cosign_transaction(self.key_pair, transaction, detached)
61
+
62
+ # endregion
63
+
64
+
28
65
  class SymbolFacade:
29
66
  """Facade used to interact with Symbol blockchain."""
30
67
 
@@ -58,6 +95,18 @@ class SymbolFacade:
58
95
  PublicKey: 'public_key',
59
96
  }
60
97
 
98
+ def now(self):
99
+ """Creates a network timestamp representing the current time."""
100
+ return self.network.from_datetime(datetime.now(timezone.utc))
101
+
102
+ def create_public_account(self, public_key):
103
+ """Creates a Symbol public account from a public key."""
104
+ return SymbolPublicAccount(self, public_key)
105
+
106
+ def create_account(self, private_key):
107
+ """Creates a Symbol account from a private key."""
108
+ return SymbolAccount(self, KeyPair(private_key))
109
+
61
110
  def hash_transaction(self, transaction):
62
111
  """Hashes a Symbol transaction."""
63
112
  hasher = hashlib.sha3_256()