Skip to content

Instantly share code, notes, and snippets.

@hackaugusto
Created November 7, 2018 13:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hackaugusto/f3870eddd2cf44adb1c44b2e26115466 to your computer and use it in GitHub Desktop.
Save hackaugusto/f3870eddd2cf44adb1c44b2e26115466 to your computer and use it in GitHub Desktop.
from eth_utils import to_canonical_address
from raiden.storage import serialize, sqlite
from raiden.storage.wal import WriteAheadLog
from raiden.transfer import node, views
from raiden.transfer.architecture import StateManager
serializer = serialize.JSONSerializer()
def replay_wal(storage):
locksroot = (
b'\xdfr\xceb\xd1\xec-\xf9&\x19i\x1e\n\xd9j\x08S\xae'
b'\xc3\xa0\x10n\xd6\xea\x14\x9f\x9f\xf6;\xc2\xf5f'
)
token_network_identifier = to_canonical_address(
'0xa5C9ECf54790334B73E5DfA1ff5668eB425dC474',
)
partner_address = to_canonical_address(
'0x10F4BC8CD156B4785f8F1f100C53C4cA0181E9b9',
)
all_state_changes = storage.get_statechanges_by_identifier(
from_identifier=0,
to_identifier='latest',
)
state_manager = StateManager(state_transition=node.state_transition, current_state=None)
wal = WriteAheadLog(state_manager, storage)
for pos, state_change in enumerate(all_state_changes):
state = wal.state_manager.current_state
snap = serializer.serialize(state)
restored = serializer.deserialize(snap)
state_manager = StateManager(node.state_transition, restored)
wal = WriteAheadLog(state_manager, storage)
wal.state_manager.dispatch(state_change)
if state_manager.current_state:
chain_state = state_manager.current_state
channel_state = views.get_channelstate_by_token_network_and_partner(
chain_state=chain_state,
token_network_id=token_network_identifier,
partner_address=partner_address,
)
is_bp = (
channel_state and
channel_state.our_state.balance_proof and
channel_state.our_state.balance_proof.locksroot == locksroot and
channel_state.our_state.balance_proof.nonce == 3
)
if is_bp:
import pdb; pdb.set_trace()
snap = serializer.serialize(state)
restored = serializer.deserialize(snap)
def main():
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('database')
args = parser.parse_args()
replay_wal(
storage=sqlite.SQLiteStorage(args.database, serializer),
)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment