Skip to content

Instantly share code, notes, and snippets.

@hackaugusto
Created November 6, 2018 17:18
Show Gist options
  • Select an option

  • Save hackaugusto/43071c797d49dcd8b45b62428aa10b32 to your computer and use it in GitHub Desktop.

Select an option

Save hackaugusto/43071c797d49dcd8b45b62428aa10b32 to your computer and use it in GitHub Desktop.
9,10c9,10
< "nonce": 3,
< "transferred_amount": 10,
---
> "nonce": 1,
> "transferred_amount": 0,
32,33c32,33
< "nonce": 3,
< "transferred_amount": 10,
---
> "nonce": 1,
> "transferred_amount": 0,
42c42
< "balance_hash": "0x2160bc16f4d832394a55209e9059be544bcd973618c8061b50c66d92bc4ec014",
---
> "balance_hash": "0x07fa012e3187ec4fb3333e214c4b7fff5127dca323c3bf02b8d5132120605bf9",
{
"recipient": "0x10F4BC8CD156B4785f8F1f100C53C4cA0181E9b9",
"channel_identifier": 46,
"message_identifier": 8241720689174629000,
"transfer": {
"payment_identifier": 1540800587588,
"token": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"balance_proof": {
"nonce": 3,
"transferred_amount": 10,
"locked_amount": 1000,
"locksroot": "0xdf72ce62d1ec2df92619691e0ad96a0853aec3a0106ed6ea149f9ff63bc2f566",
"token_network_identifier": "0xa5C9ECf54790334B73E5DfA1ff5668eB425dC474",
"channel_identifier": 46,
"chain_id": 1,
"_type": "raiden.transfer.state.BalanceProofUnsignedState",
"_version": 0
},
"lock": {
"amount": 1000,
"expiration": 6604292,
"secrethash": "0xa9bc88d62a4d22d98cdc7cbf0432d2ac5a120ab264cfa826bb1e7adb74ef47d0",
"_type": "raiden.transfer.state.HashTimeLockState",
"_version": 0
},
"initiator": "0x28898A6b762d9c400FF900EFF66F2885F0B28FAF",
"target": "0xD6e68536eCe0Eac02b39317FdCE814087Bae6118",
"_type": "raiden.transfer.mediated_transfer.state.LockedTransferUnsignedState",
"_version": 0
},
"balance_proof": {
"nonce": 3,
"transferred_amount": 10,
"locked_amount": 1000,
"locksroot": "0xdf72ce62d1ec2df92619691e0ad96a0853aec3a0106ed6ea149f9ff63bc2f566",
"token_network_identifier": "0xa5C9ECf54790334B73E5DfA1ff5668eB425dC474",
"channel_identifier": 46,
"chain_id": 1,
"_type": "raiden.transfer.state.BalanceProofUnsignedState",
"_version": 0
},
"balance_hash": "0x2160bc16f4d832394a55209e9059be544bcd973618c8061b50c66d92bc4ec014",
"_type": "raiden.transfer.mediated_transfer.events.SendLockedTransfer",
"_version": 0
}
{
"recipient": "0x10F4BC8CD156B4785f8F1f100C53C4cA0181E9b9",
"channel_identifier": 46,
"message_identifier": 8241720689174629000,
"transfer": {
"payment_identifier": 1540800587588,
"token": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"balance_proof": {
"nonce": 1,
"transferred_amount": 0,
"locked_amount": 1000,
"locksroot": "0xdf72ce62d1ec2df92619691e0ad96a0853aec3a0106ed6ea149f9ff63bc2f566",
"token_network_identifier": "0xa5C9ECf54790334B73E5DfA1ff5668eB425dC474",
"channel_identifier": 46,
"chain_id": 1,
"_type": "raiden.transfer.state.BalanceProofUnsignedState",
"_version": 0
},
"lock": {
"amount": 1000,
"expiration": 6604292,
"secrethash": "0xa9bc88d62a4d22d98cdc7cbf0432d2ac5a120ab264cfa826bb1e7adb74ef47d0",
"_type": "raiden.transfer.state.HashTimeLockState",
"_version": 0
},
"initiator": "0x28898A6b762d9c400FF900EFF66F2885F0B28FAF",
"target": "0xD6e68536eCe0Eac02b39317FdCE814087Bae6118",
"_type": "raiden.transfer.mediated_transfer.state.LockedTransferUnsignedState",
"_version": 0
},
"balance_proof": {
"nonce": 1,
"transferred_amount": 0,
"locked_amount": 1000,
"locksroot": "0xdf72ce62d1ec2df92619691e0ad96a0853aec3a0106ed6ea149f9ff63bc2f566",
"token_network_identifier": "0xa5C9ECf54790334B73E5DfA1ff5668eB425dC474",
"channel_identifier": 46,
"chain_id": 1,
"_type": "raiden.transfer.state.BalanceProofUnsignedState",
"_version": 0
},
"balance_hash": "0x07fa012e3187ec4fb3333e214c4b7fff5127dca323c3bf02b8d5132120605bf9",
"_type": "raiden.transfer.mediated_transfer.events.SendLockedTransfer",
"_version": 0
}
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
json = serialize.JSONSerializer()
def replay_wal(storage):
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)
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_events = list()
all_states = list()
for _, state_change in enumerate(all_state_changes):
events = wal.state_manager.dispatch(state_change)
all_states.append(wal.state_manager.current_state)
all_events.append(events)
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
)
if is_bp:
import pdb; pdb.set_trace()
def main():
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('database')
args = parser.parse_args()
replay_wal(
storage=sqlite.SQLiteStorage(args.database, json),
)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment