mirror of https://github.com/nucypher/nucypher.git
Moves global airdrop to Testerchains init.
parent
184b3c6e34
commit
2670982d00
4
Pipfile
4
Pipfile
|
@ -34,6 +34,10 @@ appdirs = "*"
|
||||||
codecov = "*"
|
codecov = "*"
|
||||||
py-solc = "*"
|
py-solc = "*"
|
||||||
ipdb = "*"
|
ipdb = "*"
|
||||||
|
ethereum = "*"
|
||||||
|
py-evm = "*"
|
||||||
|
eth-tester = "==0.1.0b23"
|
||||||
|
py-geth = "*"
|
||||||
|
|
||||||
[pipenv]
|
[pipenv]
|
||||||
allow_prereleases = true
|
allow_prereleases = true
|
||||||
|
|
|
@ -16,7 +16,7 @@ class TheBlockchain(ABC):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_network = NotImplemented
|
_network = NotImplemented
|
||||||
_default_timeout = NotImplemented
|
_default_timeout = 120
|
||||||
__instance = None
|
__instance = None
|
||||||
|
|
||||||
test_chains = ('tester', )
|
test_chains = ('tester', )
|
||||||
|
@ -35,7 +35,7 @@ class TheBlockchain(ABC):
|
||||||
http://populus.readthedocs.io/en/latest/chain.wait.html
|
http://populus.readthedocs.io/en/latest/chain.wait.html
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Singleton
|
# Singleton #
|
||||||
if TheBlockchain.__instance is not None:
|
if TheBlockchain.__instance is not None:
|
||||||
message = '{} is already running on {}. Use .get() to retrieve'.format(self.__class__.__name__,
|
message = '{} is already running on {}. Use .get() to retrieve'.format(self.__class__.__name__,
|
||||||
self._network)
|
self._network)
|
||||||
|
@ -77,6 +77,17 @@ class TesterBlockchain(TheBlockchain):
|
||||||
"""Transient, in-memory, local, private chain"""
|
"""Transient, in-memory, local, private chain"""
|
||||||
|
|
||||||
_network = 'tester'
|
_network = 'tester'
|
||||||
|
__default_nodes = 9
|
||||||
|
__insecure_passphrase = 'this-is-not-a-secure-password'
|
||||||
|
|
||||||
|
def __init__(self, nodes: int=__default_nodes, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.__node_addresses = list()
|
||||||
|
for _ in range(nodes):
|
||||||
|
address = self.provider.w3.personal.newAccount(self.__insecure_passphrase)
|
||||||
|
self.provider.w3.personal.unlockAccount(address, self.__insecure_passphrase)
|
||||||
|
self.__node_addresses.append(address)
|
||||||
|
self.__global_airdrop(amount=1000000)
|
||||||
|
|
||||||
def wait_time(self, hours=None, seconds=None):
|
def wait_time(self, hours=None, seconds=None):
|
||||||
"""Wait the specified number of wait_hours by comparing block timestamps."""
|
"""Wait the specified number of wait_hours by comparing block timestamps."""
|
||||||
|
@ -105,28 +116,24 @@ class TesterBlockchain(TheBlockchain):
|
||||||
miners.append(miner)
|
miners.append(miner)
|
||||||
|
|
||||||
if random_amount is True:
|
if random_amount is True:
|
||||||
amount = (10 + random.randrange(9000)) * miner_agent._deployer._M
|
min_stake = miner_agent._min_allowed_locked #TODO
|
||||||
|
max_stake = miner_agent._max_allowed_locked
|
||||||
|
amount = random.randint(min_stake, max_stake)
|
||||||
else:
|
else:
|
||||||
amount = miner.token_balance() // 2 # stake half
|
amount = miner.token_balance() // 2 # stake half
|
||||||
miner.stake(amount=amount, locktime=locktime, auto_switch_lock=True)
|
miner.stake(amount=amount, locktime=locktime, auto_switch_lock=True)
|
||||||
|
|
||||||
return miners
|
return miners
|
||||||
|
|
||||||
def _global_airdrop(self, token_agent, amount: int):
|
def __global_airdrop(self, amount: int) -> None:
|
||||||
"""Airdrops from creator address to all other addresses!"""
|
"""Airdrops from creator address to all other addresses!"""
|
||||||
|
coinbase, *addresses = self.provider.w3.eth.accounts
|
||||||
|
|
||||||
_creator, *addresses = self.provider.w3.eth.accounts
|
for address in addresses:
|
||||||
|
tx = {'to': address,
|
||||||
def txs():
|
'from': coinbase,
|
||||||
for address in addresses:
|
'value': amount}
|
||||||
txhash = token_agent.transact({'from': token_agent.origin}).transfer(address, amount)
|
_txhash = self.provider.w3.eth.sendTransaction(tx)
|
||||||
yield txhash
|
|
||||||
|
|
||||||
receipts = list()
|
|
||||||
for tx in txs(): # One at a time
|
|
||||||
receipt = self.wait_for_receipt(tx)
|
|
||||||
receipts.append(receipt)
|
|
||||||
return receipts
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ class NuCypherMinerConfig:
|
||||||
_min_release_periods = 30 # 720 Hours minimum
|
_min_release_periods = 30 # 720 Hours minimum
|
||||||
__max_minting_periods = 365 # Maximum number of periods
|
__max_minting_periods = 365 # Maximum number of periods
|
||||||
|
|
||||||
__min_allowed_locked = 15000 * NuCypherTokenConfig._M
|
_min_allowed_locked = 15000 * NuCypherTokenConfig._M
|
||||||
__max_allowed_locked = int(4e6) * NuCypherTokenConfig._M
|
_max_allowed_locked = int(4e6) * NuCypherTokenConfig._M
|
||||||
|
|
||||||
_null_addr = '0x' + '0' * 40
|
_null_addr = '0x' + '0' * 40
|
||||||
__remaining_supply = NuCypherTokenConfig._remaining_supply
|
__remaining_supply = NuCypherTokenConfig._remaining_supply
|
||||||
|
@ -27,8 +27,8 @@ class NuCypherMinerConfig:
|
||||||
__max_minting_periods,
|
__max_minting_periods,
|
||||||
__max_minting_periods,
|
__max_minting_periods,
|
||||||
_min_release_periods,
|
_min_release_periods,
|
||||||
__min_allowed_locked,
|
_min_allowed_locked,
|
||||||
__max_allowed_locked
|
_max_allowed_locked
|
||||||
]
|
]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
Loading…
Reference in New Issue