Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
canonical_identifier=CanonicalIdentifier(
chain_identifier=ChainID(61),
channel_identifier=channel_id,
token_network_address=TokenNetworkAddress(token_network_model.address),
),
updating_participant=address2,
other_participant=address1,
updating_nonce=Nonce(2),
other_nonce=Nonce(1),
updating_capacity=deposit2,
other_capacity=deposit1,
reveal_timeout=BlockTimeout(2),
signature=EMPTY_SIGNATURE,
),
updating_capacity_partner=TokenAmount(deposit1),
other_capacity_partner=TokenAmount(deposit2),
)
canonical_identifier=CanonicalIdentifier(
chain_identifier=ChainID(61),
channel_identifier=ChannelID(channel_id),
token_network_address=TokenNetworkAddress(token_network.address),
),
updating_participant=addresses[p1_index],
other_participant=addresses[p2_index],
updating_nonce=Nonce(1),
other_nonce=Nonce(1),
updating_capacity=p1_capacity,
other_capacity=p2_capacity,
reveal_timeout=p1_reveal_timeout,
signature=EMPTY_SIGNATURE,
),
updating_capacity_partner=TokenAmount(0),
other_capacity_partner=TokenAmount(0),
)
token_network.handle_channel_balance_update_message(
PFSCapacityUpdate(
canonical_identifier=CanonicalIdentifier(
chain_identifier=ChainID(61),
channel_identifier=ChannelID(channel_id),
token_network_address=TokenNetworkAddress(token_network.address),
),
updating_participant=addresses[p2_index],
other_participant=addresses[p1_index],
updating_nonce=Nonce(2),
other_nonce=Nonce(1),
updating_capacity=p2_capacity,
other_capacity=p1_capacity,
reveal_timeout=p2_reveal_timeout,
signature=EMPTY_SIGNATURE,
def request_monitoring_message(token_network, get_accounts, get_private_key) -> RequestMonitoring:
c1, c2 = get_accounts(2)
balance_proof_c2 = HashedBalanceProof(
channel_identifier=ChannelID(1),
token_network_address=TokenNetworkAddress(to_canonical_address(token_network.address)),
chain_id=ChainID(61),
nonce=Nonce(2),
additional_hash="0x%064x" % 0,
transferred_amount=TokenAmount(1),
locked_amount=TokenAmount(0),
locksroot=encode_hex(LOCKSROOT_OF_NO_LOCKS),
priv_key=get_private_key(c2),
)
return balance_proof_c2.get_request_monitoring(
privkey=get_private_key(c1),
reward_amount=TokenAmount(1),
monitoring_service_contract_address=MonitoringServiceAddress(bytes([11] * 20)),
)
# The opposite fee schedule should give opposite results, without fee capping
tn.set_fee(2, 3, cap_fees=False)
tn.set_fee(2, 1, imbalance_penalty=[(TA(0), FA(100)), (TA(1000), FA(0))], cap_fees=False)
assert tn.estimate_fee(1, 3) == -10 + 1
assert tn.estimate_fee(3, 1) is None # no balance in channel
# Or zero with fee capping
tn.set_fee(2, 3, cap_fees=True)
tn.set_fee(2, 1, imbalance_penalty=[(TA(0), FA(100)), (TA(1000), FA(0))], cap_fees=True)
assert tn.estimate_fee(1, 3) == 0
assert tn.estimate_fee(3, 1) is None # no balance in channel
# Outgoing channel
# Without fee capping
tn.set_fee(2, 1, cap_fees=False)
tn.set_fee(2, 3, imbalance_penalty=[(TA(0), FA(0)), (TA(1000), FA(100))], cap_fees=False)
assert tn.estimate_fee(1, 3) == -10
assert tn.estimate_fee(3, 1) is None # no balance in channel
# With fee capping
tn.set_fee(2, 1, cap_fees=True)
tn.set_fee(2, 3, imbalance_penalty=[(TA(0), FA(0)), (TA(1000), FA(100))], cap_fees=True)
assert tn.estimate_fee(1, 3) == 0
assert tn.estimate_fee(3, 1) is None # no balance in channel
# The opposite fee schedule should give opposite results
tn.set_fee(2, 3, imbalance_penalty=[(TA(0), FA(100)), (TA(1000), FA(0))])
assert tn.estimate_fee(1, 3) == 10
assert tn.estimate_fee(3, 1) is None # no balance in channel
# Combined fees cancel out
# Works without fee capping
tn.set_fee(2, 1, imbalance_penalty=[(TA(0), FA(0)), (TA(1000), FA(20))], cap_fees=False)
def create_sendexpiredlock(
sender_end_state: NettingChannelEndState,
locked_lock: LockType,
pseudo_random_generator: random.Random,
chain_id: ChainID,
token_network_address: TokenNetworkAddress,
channel_identifier: ChannelID,
recipient: Address,
) -> Tuple[Optional[SendLockExpired], Optional[PendingLocksState]]:
locked_amount = get_amount_locked(sender_end_state)
balance_proof = sender_end_state.balance_proof
updated_locked_amount = TokenAmount(locked_amount - locked_lock.amount)
assert balance_proof is not None, "there should be a balance proof because a lock is expiring"
transferred_amount = balance_proof.transferred_amount
pending_locks = compute_locks_without(
sender_end_state.pending_locks, EncodedData(bytes(locked_lock.encoded))
)
if not pending_locks:
return None, None
nonce = get_next_nonce(sender_end_state)
locksroot = compute_locksroot(pending_locks)
balance_proof = BalanceProofUnsignedState(
)
return (False, msg, None)
pending_locks = compute_locks_without(
sender_state.pending_locks, EncodedData(bytes(lock.encoded))
)
if pending_locks is None:
msg = f"Invalid unlock message. The lock is unknown {encode_hex(lock.encoded)}"
return (False, msg, None)
locksroot_without_lock = compute_locksroot(pending_locks)
_, _, current_transferred_amount, current_locked_amount = current_balance_proof
expected_transferred_amount = current_transferred_amount + TokenAmount(lock.amount)
expected_locked_amount = current_locked_amount - lock.amount
is_valid_balance_proof = is_balance_proof_usable_onchain(
received_balance_proof=received_balance_proof,
channel_state=channel_state,
sender_state=sender_state,
)
result: PendingLocksStateOrError = (False, None, None)
if not is_valid_balance_proof:
msg = f"Invalid Unlock message. {is_valid_balance_proof.as_error_message}"
result = (False, msg, None)
elif received_balance_proof.locksroot != locksroot_without_lock:
# Unlock messages remove a known lock, the new locksroot must have only
assert pending_locks, "lock is already registered"
locksroot = compute_locksroot(pending_locks)
if our_balance_proof:
transferred_amount = our_balance_proof.transferred_amount
else:
transferred_amount = TokenAmount(0)
msg = "caller must make sure the result wont overflow"
assert transferred_amount + amount <= UINT256_MAX, msg
token = channel_state.token_address
recipient = channel_state.partner_state.address
# the new lock is not registered yet
locked_amount = TokenAmount(get_amount_locked(our_state) + amount)
nonce = get_next_nonce(channel_state.our_state)
balance_proof = BalanceProofUnsignedState(
nonce=nonce,
transferred_amount=transferred_amount,
locked_amount=locked_amount,
locksroot=locksroot,
canonical_identifier=channel_state.canonical_identifier,
)
locked_transfer = LockedTransferUnsignedState(
payment_identifier=payment_identifier,
token=token,
balance_proof=balance_proof,
lock=lock,
def get_current_balanceproof(end_state: NettingChannelEndState) -> BalanceProofData:
balance_proof = end_state.balance_proof
if balance_proof:
locksroot = balance_proof.locksroot
nonce = end_state.nonce
transferred_amount = balance_proof.transferred_amount
locked_amount = get_amount_locked(end_state)
else:
locksroot = Locksroot(LOCKSROOT_OF_NO_LOCKS)
nonce = Nonce(0)
transferred_amount = TokenAmount(0)
locked_amount = TokenAmount(0)
return locksroot, nonce, transferred_amount, locked_amount