44import pytest
55
66from plenum .common .exceptions import (RequestNackedException ,
7- RequestRejectedException )
7+ RequestRejectedException ,
8+ PoolLedgerTimeoutException )
89from plenum .common .txn_util import get_seq_no
910from sovtoken .test .conftest import build_wallets_from_data
11+ from sovtoken .constants import ADDRESS , AMOUNT , SEQNO
12+
13+
14+ TOKENAMT = int (1e8 )
15+ BILLION = int (1e9 )
1016
1117
1218@pytest .fixture
@@ -31,19 +37,19 @@ def test_trustee_invalid_minting(helpers, addresses):
3137 """
3238 [address1 , address2 , * _ ] = addresses
3339
34- outputs = [{"address" : address1 , "amount" : - 20 }, {"address" : address2 , "amount" : 100 }]
40+ outputs = [{ADDRESS : address1 , AMOUNT : - 20 }, {ADDRESS : address2 , AMOUNT : 100 }]
3541 with pytest .raises (RequestNackedException ):
3642 helpers .general .do_mint (outputs )
3743
38- outputs = [{"address" : address1 , "amount" : "100" }, {"address" : address2 , "amount" : 100 }]
44+ outputs = [{ADDRESS : address1 , AMOUNT : "100" }, {ADDRESS : address2 , AMOUNT : 100 }]
3945 with pytest .raises (RequestNackedException ):
4046 helpers .general .do_mint (outputs )
4147
42- outputs = [{"address" : address1 , "amount" : 0 }, {"address" : address2 , "amount" : 100 }]
48+ outputs = [{ADDRESS : address1 , AMOUNT : 0 }, {ADDRESS : address2 , AMOUNT : 100 }]
4349 with pytest .raises (RequestNackedException ):
4450 helpers .general .do_mint (outputs )
4551
46- outputs = [{"address" : address1 , "amount" : 20.5 }, {"address" : address2 , "amount" : 100 }]
52+ outputs = [{ADDRESS : address1 , AMOUNT : 20.5 }, {ADDRESS : address2 , AMOUNT : 100 }]
4753 with pytest .raises (RequestNackedException ):
4854 helpers .general .do_mint (outputs )
4955
@@ -54,7 +60,7 @@ def test_non_trustee_minting(helpers, steward_wallets, addresses):
5460 Non trustees (stewards in this case) should not be able to mint new tokens
5561 """
5662 [address1 , address2 , * _ ] = addresses
57- outputs = [{"address" : address1 , "amount" : 100 }, {"address" : address2 , "amount" : 60 }]
63+ outputs = [{ADDRESS : address1 , AMOUNT : 100 }, {ADDRESS : address2 , AMOUNT : 60 }]
5864 request = helpers .request .mint (outputs )
5965 request .signatures = {}
6066 request = helpers .wallet .sign_request (request , steward_wallets )
@@ -72,7 +78,7 @@ def test_less_than_min_trustee_minting(helpers, addresses):
7278 hence the txn fails
7379 """
7480 [address1 , address2 , * _ ] = addresses
75- outputs = [{"address" : address1 , "amount" : 100 }, {"address" : address2 , "amount" : 60 }]
81+ outputs = [{ADDRESS : address1 , AMOUNT : 100 }, {ADDRESS : address2 , AMOUNT : 60 }]
7682 request = helpers .request .mint (outputs )
7783 # Remove one signature.
7884 request .signatures .popitem ()
@@ -83,7 +89,7 @@ def test_less_than_min_trustee_minting(helpers, addresses):
8389def test_stewards_with_trustees (helpers , addresses , steward_wallets ):
8490 [address1 , address2 , * _ ] = addresses
8591
86- outputs = [{"address" : address1 , "amount" : 1000 }, {"address" : address2 , "amount" : 1000 }]
92+ outputs = [{ADDRESS : address1 , AMOUNT : 1000 }, {ADDRESS : address2 , AMOUNT : 1000 }]
8793 request = helpers .request .mint (outputs )
8894 # Remove 1 Trustees' signature, assumption is that there were exactly the number of trustees required
8995 request .signatures .popitem ()
@@ -102,15 +108,15 @@ def test_non_existant_did_with_trustees(
102108 [address1 , address2 , * _ ] = addresses
103109 signing_wallets = wallets_non_existant_dids [0 :1 ]
104110
105- outputs = [{"address" : address1 , "amount" : 1000 }, {"address" : address2 , "amount" : 1000 }]
111+ outputs = [{ADDRESS : address1 , AMOUNT : 1000 }, {ADDRESS : address2 , AMOUNT : 1000 }]
106112 request = helpers .request .mint (outputs )
107113 request = helpers .wallet .sign_request (request , signing_wallets )
108114
109115
110116def test_non_existant_dids (helpers , addresses , wallets_non_existant_dids ):
111117 [address1 , address2 , * _ ] = addresses
112118
113- outputs = [{"address" : address1 , "amount" : 1000 }, {"address" : address2 , "amount" : 1000 }]
119+ outputs = [{ADDRESS : address1 , AMOUNT : 1000 }, {ADDRESS : address2 , AMOUNT : 1000 }]
114120 request = helpers .request .mint (outputs )
115121
116122 request .signatures = {}
@@ -125,7 +131,7 @@ def test_repeat_trustee(helpers, addresses):
125131 Should not be possible to use the same trustee more than once
126132 """
127133 [address1 , address2 , * _ ] = addresses
128- outputs = [{"address" : address1 , "amount" : 100 }, {"address" : address2 , "amount" : 60 }]
134+ outputs = [{ADDRESS : address1 , AMOUNT : 100 }, {ADDRESS : address2 , AMOUNT : 60 }]
129135 request = helpers .request .mint (outputs )
130136 request .signatures .popitem ()
131137 (did , sig ) = request .signatures .popitem ()
@@ -141,10 +147,10 @@ def test_trustee_valid_minting(helpers, addresses):
141147 and seller_address
142148 """
143149 [address1 , address2 , * _ ] = addresses
144- total_mint = 1000000000000000000
145- sf_master_gets = 600000000000000000
150+ total_mint = 10 * BILLION * TOKENAMT
151+ sf_master_gets = 6 * BILLION * TOKENAMT
146152 remaining = total_mint - sf_master_gets
147- outputs = [{"address" : address1 , "amount" : sf_master_gets }, {"address" : address2 , "amount" : remaining }]
153+ outputs = [{ADDRESS : address1 , AMOUNT : sf_master_gets }, {ADDRESS : address2 , AMOUNT : remaining }]
148154 result = helpers .general .do_mint (outputs )
149155 mint_seq_no = get_seq_no (result )
150156
@@ -153,15 +159,15 @@ def test_trustee_valid_minting(helpers, addresses):
153159 address2_utxos
154160 ] = helpers .general .get_utxo_addresses ([address1 , address2 ])
155161
156- assert address1_utxos == [{"address" : address1 , "seqNo" : mint_seq_no , "amount" : sf_master_gets }]
157- assert address2_utxos == [{"address" : address2 , "seqNo" : mint_seq_no , "amount" : remaining }]
162+ assert address1_utxos == [{ADDRESS : address1 , SEQNO : mint_seq_no , AMOUNT : sf_master_gets }]
163+ assert address2_utxos == [{ADDRESS : address2 , SEQNO : mint_seq_no , AMOUNT : remaining }]
158164
159165
160166def test_two_mints_to_same_address (addresses , helpers ):
161167
162- outputs = [{"address" : address , "amount" : 100 } for address in addresses ]
168+ outputs = [{ADDRESS : address , AMOUNT : 100 } for address in addresses ]
163169 first_mint_result = helpers .general .do_mint (outputs )
164- outputs = [{"address" : address , "amount" : 200 } for address in addresses ]
170+ outputs = [{ADDRESS : address , AMOUNT : 200 } for address in addresses ]
165171 second_mint_result = helpers .general .do_mint (outputs )
166172 first_mint_seq_no = get_seq_no (first_mint_result )
167173 second_mint_seq_no = get_seq_no (second_mint_result )
@@ -179,22 +185,49 @@ def test_two_mints_to_same_address(addresses, helpers):
179185 assert first_mint_seq_no != second_mint_seq_no
180186
181187 assert address1_utxos == [
182- {"address" : address1 , "seqNo" : first_mint_seq_no , "amount" : 100 },
183- {"address" : address1 , "seqNo" : second_mint_seq_no , "amount" : 200 },
188+ {ADDRESS : address1 , SEQNO : first_mint_seq_no , AMOUNT : 100 },
189+ {ADDRESS : address1 , SEQNO : second_mint_seq_no , AMOUNT : 200 },
184190 ]
185191 assert address2_utxos == [
186- {"address" : address2 , "seqNo" : first_mint_seq_no , "amount" : 100 },
187- {"address" : address2 , "seqNo" : second_mint_seq_no , "amount" : 200 },
192+ {ADDRESS : address2 , SEQNO : first_mint_seq_no , AMOUNT : 100 },
193+ {ADDRESS : address2 , SEQNO : second_mint_seq_no , AMOUNT : 200 },
188194 ]
189195 assert address3_utxos == [
190- {"address" : address3 , "seqNo" : first_mint_seq_no , "amount" : 100 },
191- {"address" : address3 , "seqNo" : second_mint_seq_no , "amount" : 200 },
196+ {ADDRESS : address3 , SEQNO : first_mint_seq_no , AMOUNT : 100 },
197+ {ADDRESS : address3 , SEQNO : second_mint_seq_no , AMOUNT : 200 },
192198 ]
193199 assert address4_utxos == [
194- {"address" : address4 , "seqNo" : first_mint_seq_no , "amount" : 100 },
195- {"address" : address4 , "seqNo" : second_mint_seq_no , "amount" : 200 },
200+ {ADDRESS : address4 , SEQNO : first_mint_seq_no , AMOUNT : 100 },
201+ {ADDRESS : address4 , SEQNO : second_mint_seq_no , AMOUNT : 200 },
196202 ]
197203 assert address5_utxos == [
198- {"address" : address5 , "seqNo" : first_mint_seq_no , "amount" : 100 },
199- {"address" : address5 , "seqNo" : second_mint_seq_no , "amount" : 200 },
204+ {ADDRESS : address5 , SEQNO : first_mint_seq_no , AMOUNT : 100 },
205+ {ADDRESS : address5 , SEQNO : second_mint_seq_no , AMOUNT : 200 },
200206 ]
207+
208+
209+ def test_different_mint_amounts (helpers ):
210+
211+ i64 = 9223372036854775807
212+
213+ def assert_valid_minting (helpers , amount ):
214+ address = helpers .wallet .create_address ()
215+ outputs = [{ADDRESS : address , AMOUNT : amount }]
216+ result = helpers .general .do_mint (outputs )
217+ utxos = helpers .general .get_utxo_addresses ([address ])[0 ]
218+
219+ expected = {ADDRESS : address , SEQNO : get_seq_no (result ), AMOUNT : amount }
220+ matches = [utxo for utxo in utxos if utxo is expected ]
221+
222+ # 1 sovatom
223+ assert_valid_minting (helpers , 1 )
224+
225+ # 10 billion tokens
226+ assert_valid_minting (helpers , 10 * BILLION * TOKENAMT )
227+
228+ # i64 max sovatoms.
229+ assert_valid_minting (helpers , i64 )
230+
231+ # ujson has a limit at deserializing i64.
232+ with pytest .raises (PoolLedgerTimeoutException ):
233+ assert_valid_minting (helpers , i64 + 1 )
0 commit comments