mirror of https://github.com/nucypher/nucypher.git
Make accomodations for geth managed wallets (#1117) in TransactingPower.
parent
be4661ec1f
commit
118262a9f4
|
@ -26,7 +26,6 @@ import maya
|
|||
from constant_sorrow.constants import (
|
||||
CONTRACT_NOT_DEPLOYED,
|
||||
NO_DEPLOYER_ADDRESS,
|
||||
NO_STAKING_DEVICE,
|
||||
WORKER_NOT_RUNNING
|
||||
)
|
||||
from eth_tester.exceptions import TransactionFailed
|
||||
|
@ -141,7 +140,6 @@ class Deployer(NucypherTokenActor):
|
|||
def __init__(self,
|
||||
blockchain: BlockchainInterface,
|
||||
deployer_address: str = None,
|
||||
device = NO_STAKING_DEVICE,
|
||||
client_password: str = None,
|
||||
bare: bool = True
|
||||
) -> None:
|
||||
|
@ -162,8 +160,7 @@ class Deployer(NucypherTokenActor):
|
|||
|
||||
blockchain.transacting_power = TransactingPower(blockchain=blockchain,
|
||||
account=deployer_address,
|
||||
password=client_password,
|
||||
device=device)
|
||||
password=client_password)
|
||||
blockchain.transacting_power.activate()
|
||||
self.log = Logger("Deployment-Actor")
|
||||
|
||||
|
|
|
@ -80,6 +80,7 @@ class Character(Learner):
|
|||
keyring_root: str = None,
|
||||
crypto_power: CryptoPower = None,
|
||||
crypto_power_ups: List[CryptoPowerUp] = None,
|
||||
additional_powers: List[CryptoPower] = None,
|
||||
*args, **kwargs
|
||||
) -> None:
|
||||
|
||||
|
|
|
@ -28,8 +28,7 @@ import requests
|
|||
from bytestring_splitter import BytestringKwargifier, BytestringSplittingError
|
||||
from bytestring_splitter import BytestringSplitter, VariableLengthBytestring
|
||||
from constant_sorrow import constants
|
||||
from constant_sorrow.constants import INCLUDED_IN_BYTESTRING, PUBLIC_ONLY, FEDERATED_POLICY, STRANGER_ALICE, \
|
||||
NO_STAKING_DEVICE
|
||||
from constant_sorrow.constants import INCLUDED_IN_BYTESTRING, PUBLIC_ONLY, FEDERATED_POLICY, STRANGER_ALICE
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurve
|
||||
from cryptography.hazmat.primitives.serialization import Encoding
|
||||
|
@ -90,7 +89,6 @@ class Alice(Character, PolicyAuthor):
|
|||
network_middleware=None,
|
||||
controller=True,
|
||||
policy_agent=None,
|
||||
device = NO_STAKING_DEVICE,
|
||||
client_password: str = None,
|
||||
*args, **kwargs) -> None:
|
||||
|
||||
|
@ -122,9 +120,9 @@ class Alice(Character, PolicyAuthor):
|
|||
|
||||
if is_me and not federated_only: # TODO: #289
|
||||
transacting_power = TransactingPower(account=self.checksum_address,
|
||||
device=device,
|
||||
password=client_password,
|
||||
blockchain=self.blockchain)
|
||||
self._crypto_power.consume_power_up(transacting_power, password=client_password)
|
||||
self._crypto_power.consume_power_up(transacting_power)
|
||||
|
||||
PolicyAuthor.__init__(self,
|
||||
blockchain=self.blockchain,
|
||||
|
@ -844,8 +842,6 @@ class Ursula(Teacher, Character, Worker):
|
|||
checksum_address: str = None, # Staker address
|
||||
worker_address: str = None,
|
||||
stake_tracker: StakeTracker = None,
|
||||
staking_agent: StakingEscrowAgent = None,
|
||||
device = NO_STAKING_DEVICE,
|
||||
client_password: str = None,
|
||||
|
||||
# Character
|
||||
|
@ -895,8 +891,10 @@ class Ursula(Teacher, Character, Worker):
|
|||
if not federated_only:
|
||||
|
||||
# Access staking node via node's transacting keys
|
||||
transacting_power = TransactingPower(account=worker_address, device=device, blockchain=self.blockchain)
|
||||
self._crypto_power.consume_power_up(transacting_power, client_password)
|
||||
transacting_power = TransactingPower(account=worker_address,
|
||||
password=client_password,
|
||||
blockchain=self.blockchain)
|
||||
self._crypto_power.consume_power_up(transacting_power)
|
||||
|
||||
# Use blockchain power to substantiate stamp
|
||||
self.substantiate_stamp(client_password=password)
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
import click
|
||||
from constant_sorrow.constants import NO_BLOCKCHAIN_CONNECTION
|
||||
|
||||
from nucypher.blockchain.eth.interfaces import BlockchainInterface
|
||||
from nucypher.blockchain.eth.registry import EthereumContractRegistry
|
||||
from nucypher.characters.banners import ALICE_BANNER
|
||||
from nucypher.cli import actions, painting, types
|
||||
from nucypher.cli.actions import get_password
|
||||
from nucypher.cli.config import nucypher_click_config
|
||||
from nucypher.cli.types import NETWORK_PORT, EXISTING_READABLE_FILE, EIP55_CHECKSUM_ADDRESS
|
||||
from nucypher.config.characters import AliceConfiguration
|
||||
from nucypher.crypto.powers import TransactingPower
|
||||
|
||||
|
||||
@click.command()
|
||||
|
@ -24,6 +27,7 @@ from nucypher.config.characters import AliceConfiguration
|
|||
@click.option('--config-file', help="Path to configuration file", type=EXISTING_READABLE_FILE)
|
||||
@click.option('--provider-uri', help="Blockchain provider's URI", type=click.STRING)
|
||||
@click.option('--sync/--no-sync', default=True)
|
||||
@click.option('--device/--no-device', default=False)
|
||||
@click.option('--geth', '-G', help="Run using the built-in geth node", is_flag=True)
|
||||
@click.option('--poa', help="Inject POA middleware", is_flag=True, default=None)
|
||||
@click.option('--no-registry', help="Skip importing the default contract registry", is_flag=True)
|
||||
|
@ -68,6 +72,7 @@ def alice(click_config,
|
|||
poa,
|
||||
no_registry,
|
||||
registry_filepath,
|
||||
device,
|
||||
|
||||
# Alice
|
||||
bob_encrypting_key,
|
||||
|
@ -79,7 +84,7 @@ def alice(click_config,
|
|||
rate,
|
||||
duration,
|
||||
expiration,
|
||||
message_kit
|
||||
message_kit,
|
||||
|
||||
):
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ from nucypher.cli.config import nucypher_click_config
|
|||
from nucypher.cli.types import NETWORK_PORT, EXISTING_READABLE_FILE, EIP55_CHECKSUM_ADDRESS
|
||||
from nucypher.config.characters import FelixConfiguration
|
||||
from nucypher.config.constants import DEFAULT_CONFIG_ROOT
|
||||
from nucypher.crypto.powers import TransactingPower
|
||||
|
||||
|
||||
@click.command()
|
||||
|
@ -118,6 +119,11 @@ def felix(click_config,
|
|||
f"Check the filepath or run 'nucypher felix init' to create a new system configuration.")
|
||||
raise click.Abort
|
||||
|
||||
transacting_power = TransactingPower(account=felix_config.checksum_address,
|
||||
device=False,
|
||||
password=get_password(confirm=False),
|
||||
blockchain=felix_config.blockchain)
|
||||
|
||||
try:
|
||||
|
||||
# Connect to Blockchain
|
||||
|
@ -134,7 +140,9 @@ def felix(click_config,
|
|||
network_middleware=click_config.middleware)
|
||||
|
||||
# Produce Felix
|
||||
FELIX = felix_config.produce(domains=network, known_nodes=teacher_nodes)
|
||||
FELIX = felix_config.produce(domains=network,
|
||||
known_nodes=teacher_nodes,
|
||||
additional_power=[transacting_power])
|
||||
FELIX.make_web_app() # attach web application, but dont start service
|
||||
|
||||
except Exception as e:
|
||||
|
|
|
@ -18,16 +18,13 @@ along with nucypher. If not, see <https://www.gnu.org/licenses/>.
|
|||
|
||||
|
||||
import click
|
||||
import socket
|
||||
|
||||
from constant_sorrow.constants import NO_BLOCKCHAIN_CONNECTION
|
||||
from twisted.internet import stdio
|
||||
|
||||
from nucypher.blockchain.eth.clients import NuCypherGethDevnetProcess, NuCypherGethGoerliProcess
|
||||
from nucypher.blockchain.eth.token import NU
|
||||
from nucypher.characters.banners import URSULA_BANNER
|
||||
from nucypher.cli import actions, painting
|
||||
from nucypher.cli.actions import UnknownIPAddress, get_password
|
||||
from nucypher.cli.actions import get_password
|
||||
from nucypher.cli.config import nucypher_click_config
|
||||
from nucypher.cli.processes import UrsulaCommandProtocol
|
||||
from nucypher.cli.types import (
|
||||
|
@ -36,8 +33,7 @@ from nucypher.cli.types import (
|
|||
EXISTING_READABLE_FILE,
|
||||
STAKE_DURATION,
|
||||
STAKE_EXTENSION,
|
||||
STAKE_VALUE,
|
||||
IPV4_ADDRESS)
|
||||
STAKE_VALUE)
|
||||
from nucypher.config.characters import UrsulaConfiguration
|
||||
from nucypher.utilities.sandbox.constants import (
|
||||
TEMPORARY_DOMAIN,
|
||||
|
@ -66,6 +62,7 @@ from nucypher.utilities.sandbox.constants import (
|
|||
@click.option('--config-file', help="Path to configuration file", type=EXISTING_READABLE_FILE)
|
||||
@click.option('--poa', help="Inject POA middleware", is_flag=True, default=None)
|
||||
@click.option('--sync/--no-sync', default=True)
|
||||
@click.option('--device/--no-device', default=False)
|
||||
@click.option('--geth', '-G', help="Run using the built-in geth node", is_flag=True)
|
||||
@click.option('--provider-uri', help="Blockchain provider's URI", type=click.STRING)
|
||||
@click.option('--no-registry', help="Skip importing the default contract registry", is_flag=True)
|
||||
|
@ -105,6 +102,7 @@ def ursula(click_config,
|
|||
list_,
|
||||
divide,
|
||||
sync,
|
||||
device,
|
||||
interactive,
|
||||
|
||||
) -> None:
|
||||
|
@ -244,7 +242,6 @@ def ursula(click_config,
|
|||
raise click.BadOptionUsage(option_name='--dev', message=message)
|
||||
return actions.destroy_configuration(character_config=ursula_config, force=force)
|
||||
|
||||
|
||||
#
|
||||
# Make Ursula
|
||||
#
|
||||
|
|
|
@ -19,7 +19,6 @@ import time
|
|||
|
||||
import click
|
||||
import maya
|
||||
from constant_sorrow.constants import NO_STAKING_DEVICE
|
||||
|
||||
from nucypher.blockchain.eth.actors import Deployer
|
||||
from nucypher.blockchain.eth.agents import NucypherTokenAgent
|
||||
|
@ -42,6 +41,7 @@ from nucypher.config.constants import DEFAULT_CONFIG_ROOT
|
|||
@click.option('--provider-uri', help="Blockchain provider's URI", type=click.STRING)
|
||||
@click.option('--geth', '-G', help="Run using the built-in geth node", is_flag=True)
|
||||
@click.option('--sync/--no-sync', default=True)
|
||||
@click.option('--device/--no-device', default=True)
|
||||
@click.option('--enode', help="An ethereum bootnode enode address to start learning from", type=click.STRING)
|
||||
@click.option('--config-root', help="Custom configuration directory", type=click.Path())
|
||||
@click.option('--contract-name', help="Deploy a single contract by name", type=click.STRING)
|
||||
|
@ -70,6 +70,7 @@ def deploy(click_config,
|
|||
recipient_address,
|
||||
config_root,
|
||||
sync,
|
||||
device,
|
||||
force):
|
||||
"""Manage contract and registry deployment"""
|
||||
|
||||
|
@ -100,7 +101,6 @@ def deploy(click_config,
|
|||
if registry_filepath is not None:
|
||||
registry = EthereumContractRegistry(registry_filepath=registry_filepath)
|
||||
|
||||
# TODO: Move to Deployer with TransactingPower
|
||||
# Deployment-tuned blockchain connection
|
||||
blockchain = BlockchainDeployerInterface(provider_uri=provider_uri,
|
||||
poa=poa,
|
||||
|
@ -124,9 +124,12 @@ def deploy(click_config,
|
|||
if not force:
|
||||
click.confirm("Selected {} - Continue?".format(deployer_address), abort=True)
|
||||
|
||||
password = None
|
||||
if not device:
|
||||
password = get_password(confirm=False)
|
||||
|
||||
deployer = Deployer(blockchain=blockchain,
|
||||
device=NO_STAKING_DEVICE,
|
||||
client_password=get_password(confirm=False),
|
||||
client_password=password,
|
||||
deployer_address=deployer_address)
|
||||
|
||||
# Verify ETH Balance
|
||||
|
|
|
@ -19,7 +19,7 @@ along with nucypher. If not, see <https://www.gnu.org/licenses/>.
|
|||
import inspect
|
||||
from typing import List, Tuple, Optional
|
||||
|
||||
from constant_sorrow.constants import NO_STAKING_DEVICE, NO_BLOCKCHAIN_CONNECTION
|
||||
from constant_sorrow.constants import NO_BLOCKCHAIN_CONNECTION
|
||||
from cytoolz.dicttoolz import dissoc
|
||||
from eth_account._utils.transactions import assert_valid_fields
|
||||
from hexbytes import HexBytes
|
||||
|
@ -116,25 +116,18 @@ class TransactingPower(CryptoPowerUp):
|
|||
def __init__(self,
|
||||
blockchain,
|
||||
account: str,
|
||||
password: str = None,
|
||||
device=NO_STAKING_DEVICE):
|
||||
password: str = None):
|
||||
"""
|
||||
Instantiates a TransactingPower for the given checksum_address.
|
||||
"""
|
||||
if password and (device is not NO_STAKING_DEVICE):
|
||||
raise ValueError(f"Cannot create a {self.__class__.__name__} with both a client and an device signer.")
|
||||
|
||||
self.blockchain = blockchain
|
||||
|
||||
if blockchain.is_connected:
|
||||
self.client = blockchain.client
|
||||
else:
|
||||
self.client = NO_BLOCKCHAIN_CONNECTION
|
||||
|
||||
self.account = account
|
||||
self.device = device
|
||||
|
||||
self.__activated = False
|
||||
self.device = True if not password else False
|
||||
self.__password = password
|
||||
self.__unlocked = False
|
||||
|
||||
|
@ -157,30 +150,22 @@ class TransactingPower(CryptoPowerUp):
|
|||
self.unlock_account(password=password) # Unlock
|
||||
self.blockchain.transacting_power = self # Attach
|
||||
self.__password = None # Discard
|
||||
self.__activated = True # Remember
|
||||
|
||||
def lock_account(self):
|
||||
if self.device is not NO_STAKING_DEVICE:
|
||||
# TODO: Implement TrustedDevice
|
||||
_result = self.device.lock()
|
||||
if self.device:
|
||||
# TODO: Force Disconnect Devices
|
||||
pass
|
||||
else:
|
||||
_result = self.client.lock_account(address=self.account)
|
||||
self.__unlocked = False
|
||||
|
||||
def unlock_account(self, password: str = None):
|
||||
if self.device is not NO_STAKING_DEVICE:
|
||||
# TODO: Embed in TrustedDevice
|
||||
ping = 'PING|PONG'
|
||||
pong = self.device.client.ping(ping)
|
||||
if not ping == pong:
|
||||
raise self.device.NoDeviceDetected
|
||||
if self.device:
|
||||
unlocked = True
|
||||
|
||||
else:
|
||||
if self.client is NO_BLOCKCHAIN_CONNECTION:
|
||||
raise self.NoBlockchainConnection
|
||||
unlocked = self.client.unlock_account(address=self.account, password=password)
|
||||
|
||||
self.__unlocked = unlocked
|
||||
|
||||
def sign_message(self, message: bytes) -> bytes:
|
||||
|
@ -189,16 +174,7 @@ class TransactingPower(CryptoPowerUp):
|
|||
"""
|
||||
if not self.is_unlocked:
|
||||
raise self.AccountLocked("Failed to unlock account {}".format(self.account))
|
||||
|
||||
# Hardware Wallet
|
||||
if self.device is not NO_STAKING_DEVICE:
|
||||
# TODO: Use a common message signature type from clients and devices
|
||||
signature = self.device.sign_message(checksum_address=self.account, message=message)
|
||||
signature = signature.signature
|
||||
|
||||
# Software Wallet
|
||||
else:
|
||||
signature = self.client.sign_message(account=self.account, message=message)
|
||||
signature = self.client.sign_message(account=self.account, message=message)
|
||||
return signature
|
||||
|
||||
def sign_transaction(self, unsigned_transaction: dict) -> HexBytes:
|
||||
|
@ -219,15 +195,8 @@ class TransactingPower(CryptoPowerUp):
|
|||
except TypeError as e:
|
||||
raise self.InvalidSigningRequest(f"Invalid Transaction: '{str(e)}'")
|
||||
|
||||
# HW Signer
|
||||
if self.device is not NO_STAKING_DEVICE:
|
||||
# TODO: Use a common tx_sign return type from clients and devices
|
||||
signed_raw_transaction = self.device.sign_eth_transaction(unsigned_transaction=unsigned_transaction,
|
||||
checksum_address=self.account)
|
||||
# Web3 Signer
|
||||
else:
|
||||
signed_raw_transaction = self.blockchain.client.sign_transaction(transaction=unsigned_transaction,
|
||||
account=self.account)
|
||||
signed_raw_transaction = self.blockchain.client.sign_transaction(transaction=unsigned_transaction,
|
||||
account=self.account)
|
||||
return signed_raw_transaction
|
||||
|
||||
|
||||
|
|
|
@ -213,8 +213,10 @@ class TesterBlockchain(BlockchainDeployerInterface):
|
|||
"""For use with metric testing scripts"""
|
||||
|
||||
testerchain = cls(compiler=SolidityCompiler())
|
||||
power = TransactingPower(blockchain=testerchain, account=testerchain.etherbase_account)
|
||||
power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=testerchain.etherbase_account)
|
||||
power.activate()
|
||||
testerchain.transacting_power = power
|
||||
|
||||
origin = testerchain.client.etherbase
|
||||
|
|
|
@ -23,11 +23,12 @@ from nucypher.blockchain.eth.interfaces import BlockchainInterface
|
|||
from nucypher.blockchain.eth.token import StakeTracker
|
||||
from nucypher.characters.lawful import Ursula
|
||||
from nucypher.config.characters import UrsulaConfiguration
|
||||
from nucypher.crypto.powers import TransactingPower
|
||||
from nucypher.utilities.sandbox.constants import (
|
||||
MOCK_KNOWN_URSULAS_CACHE,
|
||||
MOCK_URSULA_STARTING_PORT,
|
||||
NUMBER_OF_URSULAS_IN_DEVELOPMENT_NETWORK,
|
||||
MOCK_URSULA_DB_FILEPATH)
|
||||
MOCK_URSULA_DB_FILEPATH, INSECURE_DEVELOPMENT_PASSWORD)
|
||||
|
||||
|
||||
def make_federated_ursulas(ursula_config: UrsulaConfiguration,
|
||||
|
|
|
@ -22,12 +22,15 @@ from web3.contract import Contract
|
|||
|
||||
from nucypher.blockchain.eth.deployers import DispatcherDeployer
|
||||
from nucypher.crypto.powers import TransactingPower
|
||||
from nucypher.utilities.sandbox.constants import INSECURE_DEVELOPMENT_PASSWORD
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def escrow(testerchain):
|
||||
# Mock Powerup consumption (Deployer)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=testerchain.etherbase_account)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=testerchain.etherbase_account)
|
||||
testerchain.transacting_power.activate()
|
||||
escrow, _ = testerchain.deploy_contract('StakingEscrowForAdjudicatorMock')
|
||||
return escrow
|
||||
|
|
|
@ -48,8 +48,10 @@ def test_rapid_deployment(token_economics):
|
|||
compiler=compiler)
|
||||
|
||||
# TODO: #1092 - TransactingPower
|
||||
blockchain.transacting_power = TransactingPower(blockchain=blockchain, account=blockchain.etherbase_account)
|
||||
blockchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
blockchain.transacting_power = TransactingPower(blockchain=blockchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=blockchain.etherbase_account)
|
||||
blockchain.transacting_power.activate()
|
||||
deployer_address = blockchain.etherbase_account
|
||||
|
||||
deployer = Deployer(blockchain=blockchain, deployer_address=deployer_address)
|
||||
|
|
|
@ -43,8 +43,10 @@ def test_staker_locking_tokens(testerchain, agency, staker, token_economics):
|
|||
token_agent, staking_agent, policy_agent = agency
|
||||
|
||||
# Mock Powerup consumption (Ursula-Staker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=staker.checksum_address)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=staker.checksum_address)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
assert NU(token_economics.minimum_allowed_locked, 'NuNit') < staker.token_balance, "Insufficient staker balance"
|
||||
|
||||
|
@ -108,8 +110,10 @@ def test_staker_collects_staking_reward(testerchain, staker, blockchain_ursulas,
|
|||
assert token_agent.get_balance(staker.checksum_address) == initial_balance
|
||||
|
||||
# Mock Powerup consumption (Ursula-Worker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=staker.checksum_address)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=staker.checksum_address)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
staker.initialize_stake(amount=NU(token_economics.minimum_allowed_locked, 'NuNit'), # Lock the minimum amount of tokens
|
||||
lock_periods=int(token_economics.minimum_locked_periods)) # ... for the fewest number of periods
|
||||
|
@ -134,8 +138,10 @@ def test_staker_collects_staking_reward(testerchain, staker, blockchain_ursulas,
|
|||
testerchain.time_travel(periods=2)
|
||||
|
||||
# Mock Powerup consumption (Ursula-Worker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=staker.checksum_address)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=staker.checksum_address)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
# Profit!
|
||||
staker.collect_staking_reward()
|
||||
|
|
|
@ -59,7 +59,9 @@ def test_adjudicator_slashes(agency,
|
|||
locked_tokens = token_economics.minimum_allowed_locked * 5
|
||||
|
||||
# Mock Powerup consumption (Deployer)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=testerchain.etherbase_account)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=testerchain.etherbase_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
# The staker receives an initial amount of tokens
|
||||
|
@ -68,7 +70,9 @@ def test_adjudicator_slashes(agency,
|
|||
sender_address=testerchain.etherbase_account)
|
||||
|
||||
# Mock Powerup consumption (Staker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=staker_account)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=staker_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
# Deposit: The staker deposits tokens in the StakingEscrow contract.
|
||||
|
@ -100,7 +104,9 @@ def test_adjudicator_slashes(agency,
|
|||
bobby_old_balance = bobby.token_balance
|
||||
|
||||
# Mock Powerup consumption (Bob)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=bob_account)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=bob_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
adjudicator_agent.evaluate_cfrag(evidence=evidence, sender_address=bob_account)
|
||||
|
|
|
@ -51,8 +51,10 @@ def test_create_policy(testerchain, agency, token_economics):
|
|||
agent = policy_agent
|
||||
|
||||
# Mock Powerup consumption
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=testerchain.alice_account)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=testerchain.alice_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
policy_id = os.urandom(16)
|
||||
node_addresses = list(staking_agent.sample(quantity=3, duration=1))
|
||||
|
@ -113,15 +115,19 @@ def test_calculate_refund(testerchain, agency, policy_meta):
|
|||
worker = staking_agent.get_worker_from_staker(staker)
|
||||
|
||||
# Mock Powerup consumption (Ursula-Worker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=worker)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=worker)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
testerchain.time_travel(hours=9)
|
||||
_receipt = staking_agent.confirm_activity(worker_address=worker)
|
||||
|
||||
# Mock Powerup consumption (Alice)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=testerchain.alice_account)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=testerchain.alice_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
receipt = agent.calculate_refund(policy_id=policy_meta.policy_id, author_address=policy_meta.author)
|
||||
assert receipt['status'] == 1, "Transaction Rejected"
|
||||
|
@ -148,8 +154,10 @@ def test_collect_policy_reward(testerchain, agency, policy_meta, token_economics
|
|||
worker = staking_agent.get_worker_from_staker(staker)
|
||||
|
||||
# Mock Powerup consumption (Ursula-Worker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=worker)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=worker)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
old_eth_balance = token_agent.blockchain.client.get_balance(staker)
|
||||
|
||||
|
@ -158,8 +166,10 @@ def test_collect_policy_reward(testerchain, agency, policy_meta, token_economics
|
|||
testerchain.time_travel(periods=1)
|
||||
|
||||
# Mock Powerup consumption (Ursula-Staker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=staker)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=staker)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
receipt = agent.collect_policy_reward(collector_address=staker, staker_address=staker)
|
||||
assert receipt['status'] == 1, "Transaction Rejected"
|
||||
|
|
|
@ -35,8 +35,10 @@ def test_deposit_tokens(testerchain, agency, token_economics):
|
|||
staker_account = testerchain.unassigned_accounts[0]
|
||||
|
||||
# Mock Powerup consumption (Deployer)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=testerchain.etherbase_account)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=testerchain.etherbase_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
balance = token_agent.get_balance(address=staker_account)
|
||||
assert balance == 0
|
||||
|
@ -47,8 +49,10 @@ def test_deposit_tokens(testerchain, agency, token_economics):
|
|||
sender_address=testerchain.etherbase_account)
|
||||
|
||||
# Mock Powerup consumption (Ursula-Staker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=staker_account)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=staker_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
#
|
||||
# Deposit: The staker deposits tokens in the StakingEscrow contract.
|
||||
|
@ -168,8 +172,10 @@ def test_confirm_activity(agency, testerchain):
|
|||
staker_account, worker_account, *other = testerchain.unassigned_accounts
|
||||
|
||||
# Mock Powerup consumption (Ursula-Worker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=worker_account)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=worker_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
receipt = staking_agent.confirm_activity(worker_address=worker_account)
|
||||
assert receipt['status'] == 1, "Transaction Rejected"
|
||||
|
@ -223,8 +229,10 @@ def test_collect_staking_reward(agency, testerchain):
|
|||
testerchain.time_travel(periods=2)
|
||||
|
||||
# Mock Powerup consumption (Ursula-Staker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=staker_account)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=staker_account)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
# Mint
|
||||
_receipt = staking_agent.mint(staker_address=staker_account)
|
||||
|
|
|
@ -68,8 +68,10 @@ def test_approve_transfer(agent, token_economics):
|
|||
deployer, someone, *everybody_else = testerchain.client.accounts
|
||||
|
||||
# Mock Powerup consumption
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=someone)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=someone)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
# Approve
|
||||
receipt = agent.approve_transfer(amount=token_economics.minimum_allowed_locked,
|
||||
|
@ -85,8 +87,10 @@ def test_transfer(agent, token_economics):
|
|||
origin, someone, *everybody_else = testerchain.client.accounts
|
||||
|
||||
# Mock Powerup consumption (Deployer)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=origin)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=origin)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
old_balance = agent.get_balance(someone)
|
||||
receipt = agent.transfer(amount=token_economics.minimum_allowed_locked,
|
||||
|
|
|
@ -57,8 +57,10 @@ def agent(testerchain, proxy_deployer, allocation_value) -> UserEscrowAgent:
|
|||
deployer_address, beneficiary_address, *everybody_else = testerchain.client.accounts
|
||||
|
||||
# Mock Powerup consumption (Deployer)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=deployer_address)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=deployer_address)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
# Escrow
|
||||
escrow_deployer = UserEscrowDeployer(deployer_address=deployer_address,
|
||||
|
@ -143,8 +145,10 @@ def test_deposit_and_withdraw_as_staker(testerchain, agent, agency, allocation_v
|
|||
assert token_agent.get_balance(address=agent.contract_address) == allocation_value
|
||||
|
||||
# Mock Powerup consumption (Beneficiary)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
# Move the tokens to the StakingEscrow
|
||||
receipt = agent.deposit_as_staker(value=token_economics.minimum_allowed_locked, periods=token_economics.minimum_locked_periods)
|
||||
|
@ -162,8 +166,10 @@ def test_deposit_and_withdraw_as_staker(testerchain, agent, agency, allocation_v
|
|||
assert staking_agent.get_locked_tokens(staker_address=agent.contract_address, periods=token_economics.minimum_locked_periods+1) == 0
|
||||
|
||||
# Mock Powerup consumption (Beneficiary-Worker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=worker)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=worker)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
for _ in range(token_economics.minimum_locked_periods):
|
||||
staking_agent.confirm_activity(worker_address=worker)
|
||||
|
@ -171,8 +177,10 @@ def test_deposit_and_withdraw_as_staker(testerchain, agent, agency, allocation_v
|
|||
testerchain.time_travel(periods=1)
|
||||
|
||||
# Mock Powerup consumption (Beneficiary)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
agent.mint()
|
||||
|
||||
|
@ -195,8 +203,10 @@ def test_collect_policy_reward(testerchain, agent, agency, token_economics):
|
|||
deployer_address, beneficiary_address, author, ursula, *everybody_else = testerchain.client.accounts
|
||||
|
||||
# Mock Powerup consumption (Beneficiary)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
_txhash = agent.deposit_as_staker(value=token_economics.minimum_allowed_locked, periods=token_economics.minimum_locked_periods)
|
||||
|
||||
|
@ -207,8 +217,10 @@ def test_collect_policy_reward(testerchain, agent, agency, token_economics):
|
|||
testerchain.time_travel(periods=1)
|
||||
|
||||
# Mock Powerup consumption (Alice)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=author)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=author)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
_txhash = policy_agent.create_policy(policy_id=os.urandom(16),
|
||||
author_address=author,
|
||||
|
@ -218,8 +230,10 @@ def test_collect_policy_reward(testerchain, agent, agency, token_economics):
|
|||
node_addresses=[agent.contract_address])
|
||||
|
||||
# Mock Powerup consumption (Beneficiary-Worker)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=worker)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=worker)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
_txhash = staking_agent.confirm_activity(worker_address=worker)
|
||||
testerchain.time_travel(periods=2)
|
||||
|
@ -228,8 +242,10 @@ def test_collect_policy_reward(testerchain, agent, agency, token_economics):
|
|||
old_balance = testerchain.client.get_balance(account=agent.beneficiary)
|
||||
|
||||
# Mock Powerup consumption (Beneficiary)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
txhash = agent.collect_policy_reward()
|
||||
assert txhash # TODO
|
||||
|
@ -241,8 +257,10 @@ def test_withdraw_tokens(testerchain, agent, agency, allocation_value):
|
|||
deployer_address, beneficiary_address, *everybody_else = testerchain.client.accounts
|
||||
|
||||
# Mock Powerup consumption (Beneficiary)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=agent.beneficiary)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
assert token_agent.get_balance(address=agent.contract_address) == agent.unvested_tokens
|
||||
with pytest.raises((TransactionFailed, ValueError)):
|
||||
|
|
|
@ -14,7 +14,9 @@ def test_transacting_power_sign_message(testerchain):
|
|||
# Manually create a TransactingPower
|
||||
testerchain.connect()
|
||||
eth_address = testerchain.etherbase_account
|
||||
power = TransactingPower(blockchain=testerchain, account=eth_address)
|
||||
power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=eth_address)
|
||||
|
||||
# The default state of the account is locked.
|
||||
# Test a signature without unlocking the account
|
||||
|
|
|
@ -293,7 +293,6 @@ def capsule_side_channel(enacted_federated_policy):
|
|||
self.messages = []
|
||||
self()
|
||||
|
||||
|
||||
return _CapsuleSideChannel()
|
||||
|
||||
|
||||
|
@ -313,8 +312,12 @@ def federated_alice(alice_federated_test_config):
|
|||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def blockchain_alice(alice_blockchain_test_config):
|
||||
_alice = alice_blockchain_test_config.produce()
|
||||
def blockchain_alice(alice_blockchain_test_config, testerchain):
|
||||
transacting_power = TransactingPower(blockchain=testerchain,
|
||||
account=alice_blockchain_test_config.checksum_address,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
transacting_power.activate()
|
||||
_alice = alice_blockchain_test_config.produce(additional_powers=[transacting_power])
|
||||
return _alice
|
||||
|
||||
|
||||
|
@ -325,8 +328,11 @@ def federated_bob(bob_federated_test_config):
|
|||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def blockchain_bob(bob_blockchain_test_config):
|
||||
_bob = bob_blockchain_test_config.produce()
|
||||
def blockchain_bob(bob_blockchain_test_config, testerchain):
|
||||
transacting_power = TransactingPower(blockchain=testerchain,
|
||||
account=bob_blockchain_test_config.checksum_address,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
_bob = bob_blockchain_test_config.produce(additional_powers=[transacting_power])
|
||||
return _bob
|
||||
|
||||
|
||||
|
@ -370,8 +376,10 @@ def testerchain():
|
|||
|
||||
# Mock TransactingPower Consumption (Deployer)
|
||||
testerchain.deployer_address = testerchain.etherbase_account
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain, account=testerchain.deployer_address)
|
||||
testerchain.transacting_power.activate(password=INSECURE_DEVELOPMENT_PASSWORD)
|
||||
testerchain.transacting_power = TransactingPower(blockchain=testerchain,
|
||||
password=INSECURE_DEVELOPMENT_PASSWORD,
|
||||
account=testerchain.deployer_address)
|
||||
testerchain.transacting_power.activate()
|
||||
|
||||
yield testerchain
|
||||
testerchain.disconnect()
|
||||
|
|
Loading…
Reference in New Issue