Hash Time Lock Contract (HTLC)

XinFin Hash Time Lock Contract (HTLC).

class swap.providers.xinfin.htlc.HTLC(contract_address: Optional[str] = None, network: str = 'mainnet', provider: str = 'http', use_script: bool = False)

XinFin Hash Time Lock Contract (HTLC).

Parameters
  • contract_address (str) – XinFin HTLC contract address, defaults to None.

  • network (str) – XinFin network, defaults to mainnet.

  • provider (str) – XinFin network provider, defaults to http.

  • use_script (bool) – Initialize HTLC by using script, default to False.

Returns

HTLC – XinFin HTLC instance.

Note

XinFin has only two networks, mainnet and testnet.

build_transaction(address: str)swap.providers.xinfin.htlc.HTLC

Build XinFin HTLC transaction.

Parameters

address (str) – XinFin address.

Returns

HTLC – XinFin HTLC instance.

>>> from swap.providers.xinfin.htlc import HTLC
>>> htlc: HTLC = HTLC(network="testnet")
>>> htlc.build_transaction(address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232")
<swap.providers.xinfin.htlc.HTLC object at 0x0409DAF0>
sign_transaction(private_key: str)swap.providers.xinfin.htlc.HTLC

Sign XinFin HTLC transaction.

Parameters

private_key (str) – XinFin private key.

Returns

HTLC – XinFin HTLC instance.

>>> from swap.providers.xinfin.htlc import HTLC
>>> htlc: HTLC = HTLC(network="testnet")
>>> htlc.build_transaction(address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232")
>>> htlc.sign_transaction(private_key="8a4bc8131e99a5d1064cdbca6949aa2ec16152967b19f2cee3096daefd5ca857")
<swap.providers.xinfin.htlc.HTLC object at 0x0409DAF0>
fee(unit: str = 'Wei')Union[Wei, int, float]

Get XinFin HTLC transaction fee.

Parameters

unit (str) – XinFin unit, default to Wie.

Returns

Wei, int, float – XinFin transaction fee.

>>> from swap.providers.xinfin.htlc import HTLC
>>> htlc: HTLC = HTLC(network="testnet")
>>> htlc.build_transaction(address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232")
>>> htlc.fee(unit="Wei")
1532786
hash()Optional[str]

Get XinFin HTLC transaction hash.

Returns

str – XinFin transaction hash.

>>> from swap.providers.xinfin.htlc import HTLC
>>> htlc: HTLC = HTLC(network="testnet")
>>> htlc.build_transaction(address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232")
>>> htlc.sign_transaction(private_key="8a4bc8131e99a5d1064cdbca6949aa2ec16152967b19f2cee3096daefd5ca857")
>>> htlc.hash()
"0x2f5a724c9eda4f5ae8fde2d02417f17d9b9c8f5319bb8b79bbb9e5728f3896cc"
json()dict

Get XinFin HTLC transaction json.

Returns

dict – XinFin transaction json.

>>> from swap.providers.xinfin.htlc import HTLC
>>> htlc: HTLC = HTLC(network="testnet")
>>> htlc.build_transaction(address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232")
>>> htlc.json()
{'chainId': 1337, 'from': '0x2224caA2235DF8Da3D2016d2AB1137D2d548A232', 'value': 0, 'nonce': 0, 'gas': 1532786, 'gasPrice': 20000000000, 'data': '0x608060405234801561001057600080fd5b50611ae9806100206000396000f3fe60806040526004361061003f5760003560e01c806306a53665146100445780637249fbb614610081578063cfd4b66e146100be578063f4fd306214610103575b600080fd5b34801561005057600080fd5b5061006b60048036038101906100669190610f29565b610133565b60405161007891906112e1565b60405180910390f35b34801561008d57600080fd5b506100a860048036038101906100a39190610e74565b610449565b6040516100b591906112e1565b60405180910390f35b3480156100ca57600080fd5b506100e560048036038101906100e09190610e74565b61073d565b6040516100fa99989796959493929190611317565b60405180910390f35b61011d60048036038101906101189190610ec6565b6108e4565b60405161012a91906112fc565b60405180910390f35b60008261013f81610ca7565b61017e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017590611462565b60405180910390fd5b838360028160405160200161019391906112ca565b6040516020818303038152906040526040516101af91906112b3565b602060405180830381855afa1580156101cc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906101ef9190610e9d565b6000808481526020019081526020016000206000015414610245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023c90611422565b60405180910390fd5b853373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146102e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e090611502565b60405180910390fd5b6000151560008083815260200190815260200160002060050160009054906101000a900460ff16151514610352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610349906114e2565b60405180910390fd5b6000806000898152602001908152602001600020905086816006019080519060200190610380929190610d15565b5060018160050160006101000a81548160ff0219169083151502179055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600401549081150290604051600060405180830381858888f1935050505015801561040c573d6000803e3d6000fd5b50877f504d590eb5fc388d52f9ec13027846f2a4be1de21e120f4f6cb81577631925b660405160405180910390a260019550505050505092915050565b60008161045581610ca7565b610494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048b90611462565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f90611542565b60405180910390fd5b6000151560008083815260200190815260200160002060050160019054906101000a900460ff161515146105a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610598906114a2565b60405180910390fd5b6000151560008083815260200190815260200160002060050160009054906101000a900460ff1615151461060a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060190611402565b60405180910390fd5b42600080838152602001908152602001600020600301541115610662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065990611442565b60405180910390fd5b6000806000868152602001908152602001600020905060018160050160016101000a81548160ff0219169083151502179055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600401549081150290604051600060405180830381858888f19350505050158015610703573d6000803e3d6000fd5b50847ff9f621227215a273c53adae3204668db470019bad0903f243eefc5f7736fc95660405160405180910390a260019350505050919050565b6000806000806000806000806060600015156107588b610ca7565b1515141561079f576000806000806000806000808760001b97508660001b9650604051806020016040528060008152509850985098509850985098509850985098506108d7565b60008060008c815260200190815260200160002090508a81600001548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846003015485600401548660050160009054906101000a900460ff168760050160019054906101000a900460ff16886006018080546108439061169b565b80601f016020809104026020016040519081016040528092919081815260200182805461086f9061169b565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b50505050509050995099509950995099509950995099509950505b9193959799909294969850565b6000803411610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091f90611522565b60405180910390fd5b8142811161096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906113e2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906114c2565b60405180910390fd5b600286863386346040516020016109f4959493929190611254565b604051602081830303815290604052604051610a1091906112b3565b602060405180830381855afa158015610a2d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a509190610e9d565b9150610a5b82610ca7565b15610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290611482565b60405180910390fd5b6040518061010001604052808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001348152602001600015158152602001600015158152602001604051806020016040528060008152508152506000808481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e0820151816006019080519060200190610c30929190610d15565b509050503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16837f4b32cdea5308293292c6bd3fcb8f93752a664ea704010bfcdc88effd651f2f7a898734604051610c96939291906113ab565b60405180910390a450949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b828054610d219061169b565b90600052602060002090601f016020900481019282610d435760008555610d8a565b82601f10610d5c57805160ff1916838001178555610d8a565b82800160010185558215610d8a579182015b82811115610d89578251825591602001919060010190610d6e565b5b509050610d979190610d9b565b5090565b5b80821115610db4576000816000905550600101610d9c565b5090565b6000610dcb610dc684611587565b611562565b905082815260208101848484011115610de357600080fd5b610dee848285611659565b509392505050565b600081359050610e0581611a6e565b92915050565b600081359050610e1a81611a85565b92915050565b600081519050610e2f81611a85565b92915050565b600082601f830112610e4657600080fd5b8135610e56848260208601610db8565b91505092915050565b600081359050610e6e81611a9c565b92915050565b600060208284031215610e8657600080fd5b6000610e9484828501610e0b565b91505092915050565b600060208284031215610eaf57600080fd5b6000610ebd84828501610e20565b91505092915050565b60008060008060808587031215610edc57600080fd5b6000610eea87828801610e0b565b9450506020610efb87828801610df6565b9350506040610f0c87828801610df6565b9250506060610f1d87828801610e5f565b91505092959194509250565b60008060408385031215610f3c57600080fd5b6000610f4a85828601610e0b565b925050602083013567ffffffffffffffff811115610f6757600080fd5b610f7385828601610e35565b9150509250929050565b610f8e610f8982611607565b611710565b82525050565b610f9d816115f5565b82525050565b610fb4610faf826115f5565b6116fe565b82525050565b610fc381611619565b82525050565b610fd281611625565b82525050565b610fe9610fe482611625565b611722565b82525050565b6000610ffa826115b8565b61100481856115ce565b9350611014818560208601611668565b80840191505092915050565b600061102b826115c3565b61103581856115d9565b9350611045818560208601611668565b61104e816117a6565b840191505092915050565b6000611064826115c3565b61106e81856115ea565b935061107e818560208601611668565b80840191505092915050565b60006110976022836115d9565b91506110a2826117c4565b604082019050919050565b60006110ba601d836115d9565b91506110c582611813565b602082019050919050565b60006110dd601f836115d9565b91506110e88261183c565b602082019050919050565b60006111006022836115d9565b915061110b82611865565b604082019050919050565b60006111236021836115d9565b915061112e826118b4565b604082019050919050565b60006111466023836115d9565b915061115182611903565b604082019050919050565b6000611169601c836115d9565b915061117482611952565b602082019050919050565b600061118c602b836115d9565b91506111978261197b565b604082019050919050565b60006111af601f836115d9565b91506111ba826119ca565b602082019050919050565b60006111d2601b836115d9565b91506111dd826119f3565b602082019050919050565b60006111f56015836115d9565b915061120082611a1c565b602082019050919050565b60006112186016836115d9565b915061122382611a45565b602082019050919050565b6112378161164f565b82525050565b61124e6112498261164f565b61173e565b82525050565b60006112608288610fd8565b6020820191506112708287610f7d565b6014820191506112808286610fa3565b601482019150611290828561123d565b6020820191506112a0828461123d565b6020820191508190509695505050505050565b60006112bf8284610fef565b915081905092915050565b60006112d68284611059565b915081905092915050565b60006020820190506112f66000830184610fba565b92915050565b60006020820190506113116000830184610fc9565b92915050565b60006101208201905061132d600083018c610fc9565b61133a602083018b610fc9565b611347604083018a610f94565b6113546060830189610f94565b611361608083018861122e565b61136e60a083018761122e565b61137b60c0830186610fba565b61138860e0830185610fba565b81810361010083015261139b8184611020565b90509a9950505050505050505050565b60006060820190506113c06000830186610fc9565b6113cd602083018561122e565b6113da604083018461122e565b949350505050565b600060208201905081810360008301526113fb8161108a565b9050919050565b6000602082019050818103600083015261141b816110ad565b9050919050565b6000602082019050818103600083015261143b816110d0565b9050919050565b6000602082019050818103600083015261145b816110f3565b9050919050565b6000602082019050818103600083015261147b81611116565b9050919050565b6000602082019050818103600083015261149b81611139565b9050919050565b600060208201905081810360008301526114bb8161115c565b9050919050565b600060208201905081810360008301526114db8161117f565b9050919050565b600060208201905081810360008301526114fb816111a2565b9050919050565b6000602082019050818103600083015261151b816111c5565b9050919050565b6000602082019050818103600083015261153b816111e8565b9050919050565b6000602082019050818103600083015261155b8161120b565b9050919050565b600061156c61157d565b905061157882826116cd565b919050565b6000604051905090565b600067ffffffffffffffff8211156115a2576115a1611777565b5b6115ab826117a6565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006116008261162f565b9050919050565b60006116128261162f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561168657808201518184015260208101905061166b565b83811115611695576000848401525b50505050565b600060028204905060018216806116b357607f821691505b602082108114156116c7576116c6611748565b5b50919050565b6116d6826117a6565b810181811067ffffffffffffffff821117156116f5576116f4611777565b5b80604052505050565b60006117098261172c565b9050919050565b600061171b8261172c565b9050919050565b6000819050919050565b6000611737826117b7565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f656e6474696d652074696d65206d75737420626520696e20746865206675747560008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f726566756e6461626c653a20616c72656164792077697468647261776e000000600082015250565b7f7365637265745f68617368206861736820646f6573206e6f74206d6174636800600082015250565b7f726566756e6461626c653a20656e6474696d65206e6f7420796574207061737360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f6c6f636b65645f636f6e74726163745f696420646f6573206e6f74206578697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f74686973206c6f636b656420636f6e747261637420616c72656164792065786960008201527f7374730000000000000000000000000000000000000000000000000000000000602082015250565b7f726566756e6461626c653a20616c726561647920726566756e64656400000000600082015250565b7f6d73672e73656e646572206d7573742062652073616d6520776974682073656e60008201527f6465722061646472657373000000000000000000000000000000000000000000602082015250565b7f776974686472617761626c653a20616c72656164792077697468647261776e00600082015250565b7f776974686472617761626c653a206e6f7420726563697069656e740000000000600082015250565b7f6d73672e76616c7565206d757374206265203e20300000000000000000000000600082015250565b7f726566756e6461626c653a206e6f742073656e64657200000000000000000000600082015250565b611a7781611607565b8114611a8257600080fd5b50565b611a8e81611625565b8114611a9957600080fd5b50565b611aa58161164f565b8114611ab057600080fd5b5056fea2646970667358221220fa3ddfb3e71a48933f01fae9a76a0223900287fde7ab13cec7b9bc8cab5e7ff264736f6c63430008030033', 'to': b''}
raw()Optional[str]

Get XinFin HTLC transaction raw.

Returns

str – XinFin transaction raw.

>>> from swap.providers.xinfin.htlc import HTLC
>>> htlc: HTLC = HTLC(network="testnet")
>>> htlc.build_transaction(address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232")
>>> htlc.sign_transaction(private_key="8a4bc8131e99a5d1064cdbca6949aa2ec16152967b19f2cee3096daefd5ca857")
>>> htlc.raw()
"0xf91b5e808504a817c800831763728080b91b09608060405234801561001057600080fd5b50611ae9806100206000396000f3fe60806040526004361061003f5760003560e01c806306a53665146100445780637249fbb614610081578063cfd4b66e146100be578063f4fd306214610103575b600080fd5b34801561005057600080fd5b5061006b60048036038101906100669190610f29565b610133565b60405161007891906112e1565b60405180910390f35b34801561008d57600080fd5b506100a860048036038101906100a39190610e74565b610449565b6040516100b591906112e1565b60405180910390f35b3480156100ca57600080fd5b506100e560048036038101906100e09190610e74565b61073d565b6040516100fa99989796959493929190611317565b60405180910390f35b61011d60048036038101906101189190610ec6565b6108e4565b60405161012a91906112fc565b60405180910390f35b60008261013f81610ca7565b61017e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017590611462565b60405180910390fd5b838360028160405160200161019391906112ca565b6040516020818303038152906040526040516101af91906112b3565b602060405180830381855afa1580156101cc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906101ef9190610e9d565b6000808481526020019081526020016000206000015414610245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023c90611422565b60405180910390fd5b853373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146102e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e090611502565b60405180910390fd5b6000151560008083815260200190815260200160002060050160009054906101000a900460ff16151514610352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610349906114e2565b60405180910390fd5b6000806000898152602001908152602001600020905086816006019080519060200190610380929190610d15565b5060018160050160006101000a81548160ff0219169083151502179055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600401549081150290604051600060405180830381858888f1935050505015801561040c573d6000803e3d6000fd5b50877f504d590eb5fc388d52f9ec13027846f2a4be1de21e120f4f6cb81577631925b660405160405180910390a260019550505050505092915050565b60008161045581610ca7565b610494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048b90611462565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f90611542565b60405180910390fd5b6000151560008083815260200190815260200160002060050160019054906101000a900460ff161515146105a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610598906114a2565b60405180910390fd5b6000151560008083815260200190815260200160002060050160009054906101000a900460ff1615151461060a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060190611402565b60405180910390fd5b42600080838152602001908152602001600020600301541115610662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065990611442565b60405180910390fd5b6000806000868152602001908152602001600020905060018160050160016101000a81548160ff0219169083151502179055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600401549081150290604051600060405180830381858888f19350505050158015610703573d6000803e3d6000fd5b50847ff9f621227215a273c53adae3204668db470019bad0903f243eefc5f7736fc95660405160405180910390a260019350505050919050565b6000806000806000806000806060600015156107588b610ca7565b1515141561079f576000806000806000806000808760001b97508660001b9650604051806020016040528060008152509850985098509850985098509850985098506108d7565b60008060008c815260200190815260200160002090508a81600001548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846003015485600401548660050160009054906101000a900460ff168760050160019054906101000a900460ff16886006018080546108439061169b565b80601f016020809104026020016040519081016040528092919081815260200182805461086f9061169b565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b50505050509050995099509950995099509950995099509950505b9193959799909294969850565b6000803411610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091f90611522565b60405180910390fd5b8142811161096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906113e2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906114c2565b60405180910390fd5b600286863386346040516020016109f4959493929190611254565b604051602081830303815290604052604051610a1091906112b3565b602060405180830381855afa158015610a2d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a509190610e9d565b9150610a5b82610ca7565b15610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290611482565b60405180910390fd5b6040518061010001604052808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001348152602001600015158152602001600015158152602001604051806020016040528060008152508152506000808481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e0820151816006019080519060200190610c30929190610d15565b509050503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16837f4b32cdea5308293292c6bd3fcb8f93752a664ea704010bfcdc88effd651f2f7a898734604051610c96939291906113ab565b60405180910390a450949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b828054610d219061169b565b90600052602060002090601f016020900481019282610d435760008555610d8a565b82601f10610d5c57805160ff1916838001178555610d8a565b82800160010185558215610d8a579182015b82811115610d89578251825591602001919060010190610d6e565b5b509050610d979190610d9b565b5090565b5b80821115610db4576000816000905550600101610d9c565b5090565b6000610dcb610dc684611587565b611562565b905082815260208101848484011115610de357600080fd5b610dee848285611659565b509392505050565b600081359050610e0581611a6e565b92915050565b600081359050610e1a81611a85565b92915050565b600081519050610e2f81611a85565b92915050565b600082601f830112610e4657600080fd5b8135610e56848260208601610db8565b91505092915050565b600081359050610e6e81611a9c565b92915050565b600060208284031215610e8657600080fd5b6000610e9484828501610e0b565b91505092915050565b600060208284031215610eaf57600080fd5b6000610ebd84828501610e20565b91505092915050565b60008060008060808587031215610edc57600080fd5b6000610eea87828801610e0b565b9450506020610efb87828801610df6565b9350506040610f0c87828801610df6565b9250506060610f1d87828801610e5f565b91505092959194509250565b60008060408385031215610f3c57600080fd5b6000610f4a85828601610e0b565b925050602083013567ffffffffffffffff811115610f6757600080fd5b610f7385828601610e35565b9150509250929050565b610f8e610f8982611607565b611710565b82525050565b610f9d816115f5565b82525050565b610fb4610faf826115f5565b6116fe565b82525050565b610fc381611619565b82525050565b610fd281611625565b82525050565b610fe9610fe482611625565b611722565b82525050565b6000610ffa826115b8565b61100481856115ce565b9350611014818560208601611668565b80840191505092915050565b600061102b826115c3565b61103581856115d9565b9350611045818560208601611668565b61104e816117a6565b840191505092915050565b6000611064826115c3565b61106e81856115ea565b935061107e818560208601611668565b80840191505092915050565b60006110976022836115d9565b91506110a2826117c4565b604082019050919050565b60006110ba601d836115d9565b91506110c582611813565b602082019050919050565b60006110dd601f836115d9565b91506110e88261183c565b602082019050919050565b60006111006022836115d9565b915061110b82611865565b604082019050919050565b60006111236021836115d9565b915061112e826118b4565b604082019050919050565b60006111466023836115d9565b915061115182611903565b604082019050919050565b6000611169601c836115d9565b915061117482611952565b602082019050919050565b600061118c602b836115d9565b91506111978261197b565b604082019050919050565b60006111af601f836115d9565b91506111ba826119ca565b602082019050919050565b60006111d2601b836115d9565b91506111dd826119f3565b602082019050919050565b60006111f56015836115d9565b915061120082611a1c565b602082019050919050565b60006112186016836115d9565b915061122382611a45565b602082019050919050565b6112378161164f565b82525050565b61124e6112498261164f565b61173e565b82525050565b60006112608288610fd8565b6020820191506112708287610f7d565b6014820191506112808286610fa3565b601482019150611290828561123d565b6020820191506112a0828461123d565b6020820191508190509695505050505050565b60006112bf8284610fef565b915081905092915050565b60006112d68284611059565b915081905092915050565b60006020820190506112f66000830184610fba565b92915050565b60006020820190506113116000830184610fc9565b92915050565b60006101208201905061132d600083018c610fc9565b61133a602083018b610fc9565b611347604083018a610f94565b6113546060830189610f94565b611361608083018861122e565b61136e60a083018761122e565b61137b60c0830186610fba565b61138860e0830185610fba565b81810361010083015261139b8184611020565b90509a9950505050505050505050565b60006060820190506113c06000830186610fc9565b6113cd602083018561122e565b6113da604083018461122e565b949350505050565b600060208201905081810360008301526113fb8161108a565b9050919050565b6000602082019050818103600083015261141b816110ad565b9050919050565b6000602082019050818103600083015261143b816110d0565b9050919050565b6000602082019050818103600083015261145b816110f3565b9050919050565b6000602082019050818103600083015261147b81611116565b9050919050565b6000602082019050818103600083015261149b81611139565b9050919050565b600060208201905081810360008301526114bb8161115c565b9050919050565b600060208201905081810360008301526114db8161117f565b9050919050565b600060208201905081810360008301526114fb816111a2565b9050919050565b6000602082019050818103600083015261151b816111c5565b9050919050565b6000602082019050818103600083015261153b816111e8565b9050919050565b6000602082019050818103600083015261155b8161120b565b9050919050565b600061156c61157d565b905061157882826116cd565b919050565b6000604051905090565b600067ffffffffffffffff8211156115a2576115a1611777565b5b6115ab826117a6565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006116008261162f565b9050919050565b60006116128261162f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561168657808201518184015260208101905061166b565b83811115611695576000848401525b50505050565b600060028204905060018216806116b357607f821691505b602082108114156116c7576116c6611748565b5b50919050565b6116d6826117a6565b810181811067ffffffffffffffff821117156116f5576116f4611777565b5b80604052505050565b60006117098261172c565b9050919050565b600061171b8261172c565b9050919050565b6000819050919050565b6000611737826117b7565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f656e6474696d652074696d65206d75737420626520696e20746865206675747560008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f726566756e6461626c653a20616c72656164792077697468647261776e000000600082015250565b7f7365637265745f68617368206861736820646f6573206e6f74206d6174636800600082015250565b7f726566756e6461626c653a20656e6474696d65206e6f7420796574207061737360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f6c6f636b65645f636f6e74726163745f696420646f6573206e6f74206578697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f74686973206c6f636b656420636f6e747261637420616c72656164792065786960008201527f7374730000000000000000000000000000000000000000000000000000000000602082015250565b7f726566756e6461626c653a20616c726561647920726566756e64656400000000600082015250565b7f6d73672e73656e646572206d7573742062652073616d6520776974682073656e60008201527f6465722061646472657373000000000000000000000000000000000000000000602082015250565b7f776974686472617761626c653a20616c72656164792077697468647261776e00600082015250565b7f776974686472617761626c653a206e6f7420726563697069656e740000000000600082015250565b7f6d73672e76616c7565206d757374206265203e20300000000000000000000000600082015250565b7f726566756e6461626c653a206e6f742073656e64657200000000000000000000600082015250565b611a7781611607565b8114611a8257600080fd5b50565b611a8e81611625565b8114611a9957600080fd5b50565b611aa58161164f565b8114611ab057600080fd5b5056fea2646970667358221220fa3ddfb3e71a48933f01fae9a76a0223900287fde7ab13cec7b9bc8cab5e7ff264736f6c63430008030033820a96a0412d75a257ee30af9927c8655472fc832d7e2ca9654dc8efbe6a591905bf7d20a05c486850944946af0f7325b5825c54565ca0abff75dc7142022237fa1e7eeca9"
contract_address(prefix: str = 'xdc')str

Get XinFin HTLC contract address.

Parameters

prefix (str) – XinFin address prefix, default to xdc.

Returns

ChecksumAddress – XinFin HTLC contract address.

>>> from swap.providers.xinfin.htlc import HTLC
>>> htlc: HTLC = HTLC(contract_address="xdcdE06b10c67765c8C0b9F64E0eF423b45Eb86b8e7", network="testnet")
>>> htlc.contract_address()
"xdcdE06b10c67765c8C0b9F64E0eF423b45Eb86b8e7"
build_htlc(secret_hash: str, recipient_address: str, sender_address: str, endtime: int)swap.providers.xinfin.htlc.HTLC

Build XinFin Hash Time Lock Contract (HTLC).

Parameters
  • secret_hash (str) – Secret sha-256 hash.

  • recipient_address (str) – XinFin recipient address.

  • sender_address (str) – XinFin sender address.

  • endtime (int) – Expiration block time (Seconds).

Returns

HTLC – XinFin HTLC instance.

>>> from swap.providers.xinfin.htlc import HTLC
>>> from swap.utils import sha256, get_current_timestamp
>>> htlc: HTLC = HTLC(contract_address="xdcdE06b10c67765c8C0b9F64E0eF423b45Eb86b8e7", network="testnet")
>>> htlc.build_htlc(secret_hash=sha256("Hello Meheret!"), recipient_address="xdcf8D43806260CFc6cC79fB408BA1897054667F81C", sender_address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232", endtime=get_current_timestamp(plus=3600))
<swap.providers.xinfin.htlc.HTLC object at 0x0409DAF0>
abi()list

Get XinFin HTLC ABI.

Returns

list – XinFin HTLC ABI.

>>> from swap.providers.xinfin.htlc import HTLC
>>> from swap.utils import sha256, get_current_timestamp
>>> htlc: HTLC = HTLC(contract_address="xdcdE06b10c67765c8C0b9F64E0eF423b45Eb86b8e7", network="testnet")
>>> htlc.build_htlc(secret_hash=sha256("Hello Meheret!"), recipient_address="xdcf8D43806260CFc6cC79fB408BA1897054667F81C", sender_address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232", endtime=get_current_timestamp(plus=3600))
>>> htlc.abi()
[{'anonymous': False, 'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'locked_contract_id', 'type': 'bytes32'}, {'indexed': False, 'internalType': 'bytes32', 'name': 'secret_hash', 'type': 'bytes32'}, {'indexed': True, 'internalType': 'address', 'name': 'recipient', 'type': 'address'}, {'indexed': True, 'internalType': 'address', 'name': 'sender', 'type': 'address'}, {'indexed': False, 'internalType': 'uint256', 'name': 'endtime', 'type': 'uint256'}, {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'}], 'name': 'log_fund', 'type': 'event'}, {'anonymous': False, 'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'locked_contract_id', 'type': 'bytes32'}], 'name': 'log_refund', 'type': 'event'}, {'anonymous': False, 'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'locked_contract_id', 'type': 'bytes32'}], 'name': 'log_withdraw', 'type': 'event'}, {'inputs': [{'internalType': 'bytes32', 'name': '_secret_hash', 'type': 'bytes32'}, {'internalType': 'address payable', 'name': '_recipient', 'type': 'address'}, {'internalType': 'address payable', 'name': '_sender', 'type': 'address'}, {'internalType': 'uint256', 'name': '_endtime', 'type': 'uint256'}], 'name': 'fund', 'outputs': [{'internalType': 'bytes32', 'name': 'locked_contract_id', 'type': 'bytes32'}], 'stateMutability': 'payable', 'type': 'function'}, {'inputs': [{'internalType': 'bytes32', 'name': '_locked_contract_id', 'type': 'bytes32'}], 'name': 'get_locked_contract', 'outputs': [{'internalType': 'bytes32', 'name': 'id', 'type': 'bytes32'}, {'internalType': 'bytes32', 'name': 'secret_hash', 'type': 'bytes32'}, {'internalType': 'address', 'name': 'recipient', 'type': 'address'}, {'internalType': 'address', 'name': 'sender', 'type': 'address'}, {'internalType': 'uint256', 'name': 'endtime', 'type': 'uint256'}, {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'}, {'internalType': 'bool', 'name': 'withdrawn', 'type': 'bool'}, {'internalType': 'bool', 'name': 'refunded', 'type': 'bool'}, {'internalType': 'string', 'name': 'preimage', 'type': 'string'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [{'internalType': 'bytes32', 'name': '_locked_contract_id', 'type': 'bytes32'}], 'name': 'refund', 'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}], 'stateMutability': 'nonpayable', 'type': 'function'}, {'inputs': [{'internalType': 'bytes32', 'name': '_locked_contract_id', 'type': 'bytes32'}, {'internalType': 'string', 'name': '_preimage', 'type': 'string'}], 'name': 'withdraw', 'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}], 'stateMutability': 'nonpayable', 'type': 'function'}]
bytecode()str

Get XinFin HTLC bytecode.

Returns

str – XinFin HTLC bytecode.

>>> from swap.providers.xinfin.htlc import HTLC
>>> from swap.utils import sha256, get_current_timestamp
>>> htlc: HTLC = HTLC(contract_address="xdcdE06b10c67765c8C0b9F64E0eF423b45Eb86b8e7", network="testnet")
>>> htlc.build_htlc(secret_hash=sha256("Hello Meheret!"), recipient_address="xdcf8D43806260CFc6cC79fB408BA1897054667F81C", sender_address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232", endtime=get_current_timestamp(plus=3600))
>>> htlc.bytecode()
"608060405234801561001057600080fd5b50611ae9806100206000396000f3fe60806040526004361061003f5760003560e01c806306a53665146100445780637249fbb614610081578063cfd4b66e146100be578063f4fd306214610103575b600080fd5b34801561005057600080fd5b5061006b60048036038101906100669190610f29565b610133565b60405161007891906112e1565b60405180910390f35b34801561008d57600080fd5b506100a860048036038101906100a39190610e74565b610449565b6040516100b591906112e1565b60405180910390f35b3480156100ca57600080fd5b506100e560048036038101906100e09190610e74565b61073d565b6040516100fa99989796959493929190611317565b60405180910390f35b61011d60048036038101906101189190610ec6565b6108e4565b60405161012a91906112fc565b60405180910390f35b60008261013f81610ca7565b61017e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017590611462565b60405180910390fd5b838360028160405160200161019391906112ca565b6040516020818303038152906040526040516101af91906112b3565b602060405180830381855afa1580156101cc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906101ef9190610e9d565b6000808481526020019081526020016000206000015414610245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023c90611422565b60405180910390fd5b853373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146102e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e090611502565b60405180910390fd5b6000151560008083815260200190815260200160002060050160009054906101000a900460ff16151514610352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610349906114e2565b60405180910390fd5b6000806000898152602001908152602001600020905086816006019080519060200190610380929190610d15565b5060018160050160006101000a81548160ff0219169083151502179055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600401549081150290604051600060405180830381858888f1935050505015801561040c573d6000803e3d6000fd5b50877f504d590eb5fc388d52f9ec13027846f2a4be1de21e120f4f6cb81577631925b660405160405180910390a260019550505050505092915050565b60008161045581610ca7565b610494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048b90611462565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f90611542565b60405180910390fd5b6000151560008083815260200190815260200160002060050160019054906101000a900460ff161515146105a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610598906114a2565b60405180910390fd5b6000151560008083815260200190815260200160002060050160009054906101000a900460ff1615151461060a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060190611402565b60405180910390fd5b42600080838152602001908152602001600020600301541115610662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065990611442565b60405180910390fd5b6000806000868152602001908152602001600020905060018160050160016101000a81548160ff0219169083151502179055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600401549081150290604051600060405180830381858888f19350505050158015610703573d6000803e3d6000fd5b50847ff9f621227215a273c53adae3204668db470019bad0903f243eefc5f7736fc95660405160405180910390a260019350505050919050565b6000806000806000806000806060600015156107588b610ca7565b1515141561079f576000806000806000806000808760001b97508660001b9650604051806020016040528060008152509850985098509850985098509850985098506108d7565b60008060008c815260200190815260200160002090508a81600001548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846003015485600401548660050160009054906101000a900460ff168760050160019054906101000a900460ff16886006018080546108439061169b565b80601f016020809104026020016040519081016040528092919081815260200182805461086f9061169b565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b50505050509050995099509950995099509950995099509950505b9193959799909294969850565b6000803411610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091f90611522565b60405180910390fd5b8142811161096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906113e2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906114c2565b60405180910390fd5b600286863386346040516020016109f4959493929190611254565b604051602081830303815290604052604051610a1091906112b3565b602060405180830381855afa158015610a2d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a509190610e9d565b9150610a5b82610ca7565b15610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290611482565b60405180910390fd5b6040518061010001604052808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001348152602001600015158152602001600015158152602001604051806020016040528060008152508152506000808481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e0820151816006019080519060200190610c30929190610d15565b509050503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16837f4b32cdea5308293292c6bd3fcb8f93752a664ea704010bfcdc88effd651f2f7a898734604051610c96939291906113ab565b60405180910390a450949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b828054610d219061169b565b90600052602060002090601f016020900481019282610d435760008555610d8a565b82601f10610d5c57805160ff1916838001178555610d8a565b82800160010185558215610d8a579182015b82811115610d89578251825591602001919060010190610d6e565b5b509050610d979190610d9b565b5090565b5b80821115610db4576000816000905550600101610d9c565b5090565b6000610dcb610dc684611587565b611562565b905082815260208101848484011115610de357600080fd5b610dee848285611659565b509392505050565b600081359050610e0581611a6e565b92915050565b600081359050610e1a81611a85565b92915050565b600081519050610e2f81611a85565b92915050565b600082601f830112610e4657600080fd5b8135610e56848260208601610db8565b91505092915050565b600081359050610e6e81611a9c565b92915050565b600060208284031215610e8657600080fd5b6000610e9484828501610e0b565b91505092915050565b600060208284031215610eaf57600080fd5b6000610ebd84828501610e20565b91505092915050565b60008060008060808587031215610edc57600080fd5b6000610eea87828801610e0b565b9450506020610efb87828801610df6565b9350506040610f0c87828801610df6565b9250506060610f1d87828801610e5f565b91505092959194509250565b60008060408385031215610f3c57600080fd5b6000610f4a85828601610e0b565b925050602083013567ffffffffffffffff811115610f6757600080fd5b610f7385828601610e35565b9150509250929050565b610f8e610f8982611607565b611710565b82525050565b610f9d816115f5565b82525050565b610fb4610faf826115f5565b6116fe565b82525050565b610fc381611619565b82525050565b610fd281611625565b82525050565b610fe9610fe482611625565b611722565b82525050565b6000610ffa826115b8565b61100481856115ce565b9350611014818560208601611668565b80840191505092915050565b600061102b826115c3565b61103581856115d9565b9350611045818560208601611668565b61104e816117a6565b840191505092915050565b6000611064826115c3565b61106e81856115ea565b935061107e818560208601611668565b80840191505092915050565b60006110976022836115d9565b91506110a2826117c4565b604082019050919050565b60006110ba601d836115d9565b91506110c582611813565b602082019050919050565b60006110dd601f836115d9565b91506110e88261183c565b602082019050919050565b60006111006022836115d9565b915061110b82611865565b604082019050919050565b60006111236021836115d9565b915061112e826118b4565b604082019050919050565b60006111466023836115d9565b915061115182611903565b604082019050919050565b6000611169601c836115d9565b915061117482611952565b602082019050919050565b600061118c602b836115d9565b91506111978261197b565b604082019050919050565b60006111af601f836115d9565b91506111ba826119ca565b602082019050919050565b60006111d2601b836115d9565b91506111dd826119f3565b602082019050919050565b60006111f56015836115d9565b915061120082611a1c565b602082019050919050565b60006112186016836115d9565b915061122382611a45565b602082019050919050565b6112378161164f565b82525050565b61124e6112498261164f565b61173e565b82525050565b60006112608288610fd8565b6020820191506112708287610f7d565b6014820191506112808286610fa3565b601482019150611290828561123d565b6020820191506112a0828461123d565b6020820191508190509695505050505050565b60006112bf8284610fef565b915081905092915050565b60006112d68284611059565b915081905092915050565b60006020820190506112f66000830184610fba565b92915050565b60006020820190506113116000830184610fc9565b92915050565b60006101208201905061132d600083018c610fc9565b61133a602083018b610fc9565b611347604083018a610f94565b6113546060830189610f94565b611361608083018861122e565b61136e60a083018761122e565b61137b60c0830186610fba565b61138860e0830185610fba565b81810361010083015261139b8184611020565b90509a9950505050505050505050565b60006060820190506113c06000830186610fc9565b6113cd602083018561122e565b6113da604083018461122e565b949350505050565b600060208201905081810360008301526113fb8161108a565b9050919050565b6000602082019050818103600083015261141b816110ad565b9050919050565b6000602082019050818103600083015261143b816110d0565b9050919050565b6000602082019050818103600083015261145b816110f3565b9050919050565b6000602082019050818103600083015261147b81611116565b9050919050565b6000602082019050818103600083015261149b81611139565b9050919050565b600060208201905081810360008301526114bb8161115c565b9050919050565b600060208201905081810360008301526114db8161117f565b9050919050565b600060208201905081810360008301526114fb816111a2565b9050919050565b6000602082019050818103600083015261151b816111c5565b9050919050565b6000602082019050818103600083015261153b816111e8565b9050919050565b6000602082019050818103600083015261155b8161120b565b9050919050565b600061156c61157d565b905061157882826116cd565b919050565b6000604051905090565b600067ffffffffffffffff8211156115a2576115a1611777565b5b6115ab826117a6565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006116008261162f565b9050919050565b60006116128261162f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561168657808201518184015260208101905061166b565b83811115611695576000848401525b50505050565b600060028204905060018216806116b357607f821691505b602082108114156116c7576116c6611748565b5b50919050565b6116d6826117a6565b810181811067ffffffffffffffff821117156116f5576116f4611777565b5b80604052505050565b60006117098261172c565b9050919050565b600061171b8261172c565b9050919050565b6000819050919050565b6000611737826117b7565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f656e6474696d652074696d65206d75737420626520696e20746865206675747560008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f726566756e6461626c653a20616c72656164792077697468647261776e000000600082015250565b7f7365637265745f68617368206861736820646f6573206e6f74206d6174636800600082015250565b7f726566756e6461626c653a20656e6474696d65206e6f7420796574207061737360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f6c6f636b65645f636f6e74726163745f696420646f6573206e6f74206578697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f74686973206c6f636b656420636f6e747261637420616c72656164792065786960008201527f7374730000000000000000000000000000000000000000000000000000000000602082015250565b7f726566756e6461626c653a20616c726561647920726566756e64656400000000600082015250565b7f6d73672e73656e646572206d7573742062652073616d6520776974682073656e60008201527f6465722061646472657373000000000000000000000000000000000000000000602082015250565b7f776974686472617761626c653a20616c72656164792077697468647261776e00600082015250565b7f776974686472617761626c653a206e6f7420726563697069656e740000000000600082015250565b7f6d73672e76616c7565206d757374206265203e20300000000000000000000000600082015250565b7f726566756e6461626c653a206e6f742073656e64657200000000000000000000600082015250565b611a7781611607565b8114611a8257600080fd5b50565b611a8e81611625565b8114611a9957600080fd5b50565b611aa58161164f565b8114611ab057600080fd5b5056fea2646970667358221220fa3ddfb3e71a48933f01fae9a76a0223900287fde7ab13cec7b9bc8cab5e7ff264736f6c63430008030033"
bytecode_runtime()str

Get XinFin HTLC bytecode runtime.

Returns

str – XinFin HTLC bytecode runtime.

>>> from swap.providers.xinfin.htlc import HTLC
>>> from swap.utils import sha256, get_current_timestamp
>>> htlc: HTLC = HTLC(contract_address="xdcdE06b10c67765c8C0b9F64E0eF423b45Eb86b8e7", network="testnet")
>>> htlc.build_htlc(secret_hash=sha256("Hello Meheret!"), recipient_address="xdcf8D43806260CFc6cC79fB408BA1897054667F81C", sender_address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232", endtime=get_current_timestamp(plus=3600))
>>> htlc.bytecode_runtime()
"60806040526004361061003f5760003560e01c806306a53665146100445780637249fbb614610081578063cfd4b66e146100be578063f4fd306214610103575b600080fd5b34801561005057600080fd5b5061006b60048036038101906100669190610f29565b610133565b60405161007891906112e1565b60405180910390f35b34801561008d57600080fd5b506100a860048036038101906100a39190610e74565b610449565b6040516100b591906112e1565b60405180910390f35b3480156100ca57600080fd5b506100e560048036038101906100e09190610e74565b61073d565b6040516100fa99989796959493929190611317565b60405180910390f35b61011d60048036038101906101189190610ec6565b6108e4565b60405161012a91906112fc565b60405180910390f35b60008261013f81610ca7565b61017e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017590611462565b60405180910390fd5b838360028160405160200161019391906112ca565b6040516020818303038152906040526040516101af91906112b3565b602060405180830381855afa1580156101cc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906101ef9190610e9d565b6000808481526020019081526020016000206000015414610245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023c90611422565b60405180910390fd5b853373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146102e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e090611502565b60405180910390fd5b6000151560008083815260200190815260200160002060050160009054906101000a900460ff16151514610352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610349906114e2565b60405180910390fd5b6000806000898152602001908152602001600020905086816006019080519060200190610380929190610d15565b5060018160050160006101000a81548160ff0219169083151502179055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600401549081150290604051600060405180830381858888f1935050505015801561040c573d6000803e3d6000fd5b50877f504d590eb5fc388d52f9ec13027846f2a4be1de21e120f4f6cb81577631925b660405160405180910390a260019550505050505092915050565b60008161045581610ca7565b610494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048b90611462565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f90611542565b60405180910390fd5b6000151560008083815260200190815260200160002060050160019054906101000a900460ff161515146105a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610598906114a2565b60405180910390fd5b6000151560008083815260200190815260200160002060050160009054906101000a900460ff1615151461060a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060190611402565b60405180910390fd5b42600080838152602001908152602001600020600301541115610662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065990611442565b60405180910390fd5b6000806000868152602001908152602001600020905060018160050160016101000a81548160ff0219169083151502179055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600401549081150290604051600060405180830381858888f19350505050158015610703573d6000803e3d6000fd5b50847ff9f621227215a273c53adae3204668db470019bad0903f243eefc5f7736fc95660405160405180910390a260019350505050919050565b6000806000806000806000806060600015156107588b610ca7565b1515141561079f576000806000806000806000808760001b97508660001b9650604051806020016040528060008152509850985098509850985098509850985098506108d7565b60008060008c815260200190815260200160002090508a81600001548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846003015485600401548660050160009054906101000a900460ff168760050160019054906101000a900460ff16886006018080546108439061169b565b80601f016020809104026020016040519081016040528092919081815260200182805461086f9061169b565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b50505050509050995099509950995099509950995099509950505b9193959799909294969850565b6000803411610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091f90611522565b60405180910390fd5b8142811161096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906113e2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906114c2565b60405180910390fd5b600286863386346040516020016109f4959493929190611254565b604051602081830303815290604052604051610a1091906112b3565b602060405180830381855afa158015610a2d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a509190610e9d565b9150610a5b82610ca7565b15610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290611482565b60405180910390fd5b6040518061010001604052808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001348152602001600015158152602001600015158152602001604051806020016040528060008152508152506000808481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e0820151816006019080519060200190610c30929190610d15565b509050503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16837f4b32cdea5308293292c6bd3fcb8f93752a664ea704010bfcdc88effd651f2f7a898734604051610c96939291906113ab565b60405180910390a450949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b828054610d219061169b565b90600052602060002090601f016020900481019282610d435760008555610d8a565b82601f10610d5c57805160ff1916838001178555610d8a565b82800160010185558215610d8a579182015b82811115610d89578251825591602001919060010190610d6e565b5b509050610d979190610d9b565b5090565b5b80821115610db4576000816000905550600101610d9c565b5090565b6000610dcb610dc684611587565b611562565b905082815260208101848484011115610de357600080fd5b610dee848285611659565b509392505050565b600081359050610e0581611a6e565b92915050565b600081359050610e1a81611a85565b92915050565b600081519050610e2f81611a85565b92915050565b600082601f830112610e4657600080fd5b8135610e56848260208601610db8565b91505092915050565b600081359050610e6e81611a9c565b92915050565b600060208284031215610e8657600080fd5b6000610e9484828501610e0b565b91505092915050565b600060208284031215610eaf57600080fd5b6000610ebd84828501610e20565b91505092915050565b60008060008060808587031215610edc57600080fd5b6000610eea87828801610e0b565b9450506020610efb87828801610df6565b9350506040610f0c87828801610df6565b9250506060610f1d87828801610e5f565b91505092959194509250565b60008060408385031215610f3c57600080fd5b6000610f4a85828601610e0b565b925050602083013567ffffffffffffffff811115610f6757600080fd5b610f7385828601610e35565b9150509250929050565b610f8e610f8982611607565b611710565b82525050565b610f9d816115f5565b82525050565b610fb4610faf826115f5565b6116fe565b82525050565b610fc381611619565b82525050565b610fd281611625565b82525050565b610fe9610fe482611625565b611722565b82525050565b6000610ffa826115b8565b61100481856115ce565b9350611014818560208601611668565b80840191505092915050565b600061102b826115c3565b61103581856115d9565b9350611045818560208601611668565b61104e816117a6565b840191505092915050565b6000611064826115c3565b61106e81856115ea565b935061107e818560208601611668565b80840191505092915050565b60006110976022836115d9565b91506110a2826117c4565b604082019050919050565b60006110ba601d836115d9565b91506110c582611813565b602082019050919050565b60006110dd601f836115d9565b91506110e88261183c565b602082019050919050565b60006111006022836115d9565b915061110b82611865565b604082019050919050565b60006111236021836115d9565b915061112e826118b4565b604082019050919050565b60006111466023836115d9565b915061115182611903565b604082019050919050565b6000611169601c836115d9565b915061117482611952565b602082019050919050565b600061118c602b836115d9565b91506111978261197b565b604082019050919050565b60006111af601f836115d9565b91506111ba826119ca565b602082019050919050565b60006111d2601b836115d9565b91506111dd826119f3565b602082019050919050565b60006111f56015836115d9565b915061120082611a1c565b602082019050919050565b60006112186016836115d9565b915061122382611a45565b602082019050919050565b6112378161164f565b82525050565b61124e6112498261164f565b61173e565b82525050565b60006112608288610fd8565b6020820191506112708287610f7d565b6014820191506112808286610fa3565b601482019150611290828561123d565b6020820191506112a0828461123d565b6020820191508190509695505050505050565b60006112bf8284610fef565b915081905092915050565b60006112d68284611059565b915081905092915050565b60006020820190506112f66000830184610fba565b92915050565b60006020820190506113116000830184610fc9565b92915050565b60006101208201905061132d600083018c610fc9565b61133a602083018b610fc9565b611347604083018a610f94565b6113546060830189610f94565b611361608083018861122e565b61136e60a083018761122e565b61137b60c0830186610fba565b61138860e0830185610fba565b81810361010083015261139b8184611020565b90509a9950505050505050505050565b60006060820190506113c06000830186610fc9565b6113cd602083018561122e565b6113da604083018461122e565b949350505050565b600060208201905081810360008301526113fb8161108a565b9050919050565b6000602082019050818103600083015261141b816110ad565b9050919050565b6000602082019050818103600083015261143b816110d0565b9050919050565b6000602082019050818103600083015261145b816110f3565b9050919050565b6000602082019050818103600083015261147b81611116565b9050919050565b6000602082019050818103600083015261149b81611139565b9050919050565b600060208201905081810360008301526114bb8161115c565b9050919050565b600060208201905081810360008301526114db8161117f565b9050919050565b600060208201905081810360008301526114fb816111a2565b9050919050565b6000602082019050818103600083015261151b816111c5565b9050919050565b6000602082019050818103600083015261153b816111e8565b9050919050565b6000602082019050818103600083015261155b8161120b565b9050919050565b600061156c61157d565b905061157882826116cd565b919050565b6000604051905090565b600067ffffffffffffffff8211156115a2576115a1611777565b5b6115ab826117a6565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006116008261162f565b9050919050565b60006116128261162f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561168657808201518184015260208101905061166b565b83811115611695576000848401525b50505050565b600060028204905060018216806116b357607f821691505b602082108114156116c7576116c6611748565b5b50919050565b6116d6826117a6565b810181811067ffffffffffffffff821117156116f5576116f4611777565b5b80604052505050565b60006117098261172c565b9050919050565b600061171b8261172c565b9050919050565b6000819050919050565b6000611737826117b7565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f656e6474696d652074696d65206d75737420626520696e20746865206675747560008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f726566756e6461626c653a20616c72656164792077697468647261776e000000600082015250565b7f7365637265745f68617368206861736820646f6573206e6f74206d6174636800600082015250565b7f726566756e6461626c653a20656e6474696d65206e6f7420796574207061737360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f6c6f636b65645f636f6e74726163745f696420646f6573206e6f74206578697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f74686973206c6f636b656420636f6e747261637420616c72656164792065786960008201527f7374730000000000000000000000000000000000000000000000000000000000602082015250565b7f726566756e6461626c653a20616c726561647920726566756e64656400000000600082015250565b7f6d73672e73656e646572206d7573742062652073616d6520776974682073656e60008201527f6465722061646472657373000000000000000000000000000000000000000000602082015250565b7f776974686472617761626c653a20616c72656164792077697468647261776e00600082015250565b7f776974686472617761626c653a206e6f7420726563697069656e740000000000600082015250565b7f6d73672e76616c7565206d757374206265203e20300000000000000000000000600082015250565b7f726566756e6461626c653a206e6f742073656e64657200000000000000000000600082015250565b611a7781611607565b8114611a8257600080fd5b50565b611a8e81611625565b8114611a9957600080fd5b50565b611aa58161164f565b8114611ab057600080fd5b5056fea2646970667358221220fa3ddfb3e71a48933f01fae9a76a0223900287fde7ab13cec7b9bc8cab5e7ff264736f6c63430008030033"
opcode()str

Get XinFin HTLC opcode.

Returns

str – XinFin HTLC opcode.

>>> from swap.providers.xinfin.htlc import HTLC
>>> from swap.utils import sha256, get_current_timestamp
>>> htlc: HTLC = HTLC(contract_address="xdcdE06b10c67765c8C0b9F64E0eF423b45Eb86b8e7", network="testnet")
>>> htlc.build_htlc(secret_hash=sha256("Hello Meheret!"), recipient_address="xdcf8D43806260CFc6cC79fB408BA1897054667F81C", sender_address="xdc2224caA2235DF8Da3D2016d2AB1137D2d548A232", endtime=get_current_timestamp(plus=3600))
>>> htlc.bytecode_runtime()
"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AE9 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A53665 EQ PUSH2 0x44 JUMPI DUP1 PUSH4 0x7249FBB6 EQ PUSH2 0x81 JUMPI DUP1 PUSH4 0xCFD4B66E EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0xF4FD3062 EQ PUSH2 0x103 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x66 SWAP2 SWAP1 PUSH2 0xF29 JUMP JUMPDEST PUSH2 0x133 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0x12E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xA3 SWAP2 SWAP1 PUSH2 0xE74 JUMP JUMPDEST PUSH2 0x449 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB5 SWAP2 SWAP1 PUSH2 0x12E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE5 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE0 SWAP2 SWAP1 PUSH2 0xE74 JUMP JUMPDEST PUSH2 0x73D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFA SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1317 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x118 SWAP2 SWAP1 PUSH2 0xEC6 JUMP JUMPDEST PUSH2 0x8E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12A SWAP2 SWAP1 PUSH2 0x12FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x13F DUP2 PUSH2 0xCA7 JUMP JUMPDEST PUSH2 0x17E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x175 SWAP1 PUSH2 0x1462 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 DUP4 PUSH1 0x2 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x193 SWAP2 SWAP1 PUSH2 0x12CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1AF SWAP2 SWAP1 PUSH2 0x12B3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EF SWAP2 SWAP1 PUSH2 0xE9D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD SLOAD EQ PUSH2 0x245 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x23C SWAP1 PUSH2 0x1422 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP6 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2E9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E0 SWAP1 PUSH2 0x1502 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ISZERO ISZERO PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x5 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO EQ PUSH2 0x352 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x349 SWAP1 PUSH2 0x14E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP DUP7 DUP2 PUSH1 0x6 ADD SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x380 SWAP3 SWAP2 SWAP1 PUSH2 0xD15 JUMP JUMPDEST POP PUSH1 0x1 DUP2 PUSH1 0x5 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 PUSH1 0x4 ADD SLOAD SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x40C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP DUP8 PUSH32 0x504D590EB5FC388D52F9EC13027846F2A4BE1DE21E120F4F6CB81577631925B6 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x455 DUP2 PUSH2 0xCA7 JUMP JUMPDEST PUSH2 0x494 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48B SWAP1 PUSH2 0x1462 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x538 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52F SWAP1 PUSH2 0x1542 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ISZERO ISZERO PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x5 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO EQ PUSH2 0x5A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x598 SWAP1 PUSH2 0x14A2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ISZERO ISZERO PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x5 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO EQ PUSH2 0x60A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x601 SWAP1 PUSH2 0x1402 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD SLOAD GT ISZERO PUSH2 0x662 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x1442 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x5 ADD PUSH1 0x1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 PUSH1 0x4 ADD SLOAD SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x703 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP DUP5 PUSH32 0xF9F621227215A273C53ADAE3204668DB470019BAD0903F243EEFC5F7736FC956 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 SWAP4 POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH1 0x0 ISZERO ISZERO PUSH2 0x758 DUP12 PUSH2 0xCA7 JUMP JUMPDEST ISZERO ISZERO EQ ISZERO PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP8 PUSH1 0x0 SHL SWAP8 POP DUP7 PUSH1 0x0 SHL SWAP7 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP9 POP SWAP9 POP SWAP9 POP SWAP9 POP SWAP9 POP SWAP9 POP SWAP9 POP SWAP9 POP SWAP9 POP PUSH2 0x8D7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP13 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP DUP11 DUP2 PUSH1 0x0 ADD SLOAD DUP3 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x3 ADD SLOAD DUP6 PUSH1 0x4 ADD SLOAD DUP7 PUSH1 0x5 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP8 PUSH1 0x5 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP9 PUSH1 0x6 ADD DUP1 DUP1 SLOAD PUSH2 0x843 SWAP1 PUSH2 0x169B JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x86F SWAP1 PUSH2 0x169B JUMP JUMPDEST DUP1 ISZERO PUSH2 0x8BC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x891 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x8BC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x89F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP10 POP SWAP10 POP SWAP10 POP SWAP10 POP SWAP10 POP SWAP10 POP SWAP10 POP SWAP10 POP SWAP10 POP POP JUMPDEST SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP1 SWAP3 SWAP5 SWAP7 SWAP9 POP JUMP JUMPDEST PUSH1 0x0 DUP1 CALLVALUE GT PUSH2 0x928 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x91F SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 TIMESTAMP DUP2 GT PUSH2 0x96B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x962 SWAP1 PUSH2 0x13E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x9D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9D0 SWAP1 PUSH2 0x14C2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP7 DUP7 CALLER DUP7 CALLVALUE PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x9F4 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1254 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0xA10 SWAP2 SWAP1 PUSH2 0x12B3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA2D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA50 SWAP2 SWAP1 PUSH2 0xE9D JUMP JUMPDEST SWAP2 POP PUSH2 0xA5B DUP3 PUSH2 0xCA7 JUMP JUMPDEST ISZERO PUSH2 0xA9B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA92 SWAP1 PUSH2 0x1482 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD CALLVALUE DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP DUP2 MSTORE POP PUSH1 0x0 DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD SSTORE PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x40 DUP3 ADD MLOAD DUP2 PUSH1 0x2 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x60 DUP3 ADD MLOAD DUP2 PUSH1 0x3 ADD SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP2 PUSH1 0x4 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD PUSH1 0x1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0xC30 SWAP3 SWAP2 SWAP1 PUSH2 0xD15 JUMP JUMPDEST POP SWAP1 POP POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH32 0x4B32CDEA5308293292C6BD3FCB8F93752A664EA704010BFCDC88EFFD651F2F7A DUP10 DUP8 CALLVALUE PUSH1 0x40 MLOAD PUSH2 0xC96 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x13AB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0xD21 SWAP1 PUSH2 0x169B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0xD43 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0xD8A JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0xD5C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xD8A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xD8A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xD89 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xD6E JUMP JUMPDEST JUMPDEST POP SWAP1 POP PUSH2 0xD97 SWAP2 SWAP1 PUSH2 0xD9B JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xDB4 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH2 0xD9C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDCB PUSH2 0xDC6 DUP5 PUSH2 0x1587 JUMP JUMPDEST PUSH2 0x1562 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0xDE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDEE DUP5 DUP3 DUP6 PUSH2 0x1659 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE05 DUP2 PUSH2 0x1A6E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE1A DUP2 PUSH2 0x1A85 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xE2F DUP2 PUSH2 0x1A85 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE56 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xDB8 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE6E DUP2 PUSH2 0x1A9C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE94 DUP5 DUP3 DUP6 ADD PUSH2 0xE0B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xEBD DUP5 DUP3 DUP6 ADD PUSH2 0xE20 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xEDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xEEA DUP8 DUP3 DUP9 ADD PUSH2 0xE0B JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xEFB DUP8 DUP3 DUP9 ADD PUSH2 0xDF6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xF0C DUP8 DUP3 DUP9 ADD PUSH2 0xDF6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xF1D DUP8 DUP3 DUP9 ADD PUSH2 0xE5F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xF4A DUP6 DUP3 DUP7 ADD PUSH2 0xE0B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF73 DUP6 DUP3 DUP7 ADD PUSH2 0xE35 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0xF8E PUSH2 0xF89 DUP3 PUSH2 0x1607 JUMP JUMPDEST PUSH2 0x1710 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xF9D DUP2 PUSH2 0x15F5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xFB4 PUSH2 0xFAF DUP3 PUSH2 0x15F5 JUMP JUMPDEST PUSH2 0x16FE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xFC3 DUP2 PUSH2 0x1619 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xFD2 DUP2 PUSH2 0x1625 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xFE9 PUSH2 0xFE4 DUP3 PUSH2 0x1625 JUMP JUMPDEST PUSH2 0x1722 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFA DUP3 PUSH2 0x15B8 JUMP JUMPDEST PUSH2 0x1004 DUP2 DUP6 PUSH2 0x15CE JUMP JUMPDEST SWAP4 POP PUSH2 0x1014 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x1668 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x102B DUP3 PUSH2 0x15C3 JUMP JUMPDEST PUSH2 0x1035 DUP2 DUP6 PUSH2 0x15D9 JUMP JUMPDEST SWAP4 POP PUSH2 0x1045 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x1668 JUMP JUMPDEST PUSH2 0x104E DUP2 PUSH2 0x17A6 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1064 DUP3 PUSH2 0x15C3 JUMP JUMPDEST PUSH2 0x106E DUP2 DUP6 PUSH2 0x15EA JUMP JUMPDEST SWAP4 POP PUSH2 0x107E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x1668 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1097 PUSH1 0x22 DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x10A2 DUP3 PUSH2 0x17C4 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10BA PUSH1 0x1D DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x10C5 DUP3 PUSH2 0x1813 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10DD PUSH1 0x1F DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x10E8 DUP3 PUSH2 0x183C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1100 PUSH1 0x22 DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x110B DUP3 PUSH2 0x1865 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1123 PUSH1 0x21 DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x112E DUP3 PUSH2 0x18B4 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1146 PUSH1 0x23 DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x1151 DUP3 PUSH2 0x1903 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1169 PUSH1 0x1C DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x1174 DUP3 PUSH2 0x1952 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x118C PUSH1 0x2B DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x1197 DUP3 PUSH2 0x197B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11AF PUSH1 0x1F DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x11BA DUP3 PUSH2 0x19CA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11D2 PUSH1 0x1B DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x11DD DUP3 PUSH2 0x19F3 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11F5 PUSH1 0x15 DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x1200 DUP3 PUSH2 0x1A1C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1218 PUSH1 0x16 DUP4 PUSH2 0x15D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x1223 DUP3 PUSH2 0x1A45 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1237 DUP2 PUSH2 0x164F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x124E PUSH2 0x1249 DUP3 PUSH2 0x164F JUMP JUMPDEST PUSH2 0x173E JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1260 DUP3 DUP9 PUSH2 0xFD8 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1270 DUP3 DUP8 PUSH2 0xF7D JUMP JUMPDEST PUSH1 0x14 DUP3 ADD SWAP2 POP PUSH2 0x1280 DUP3 DUP7 PUSH2 0xFA3 JUMP JUMPDEST PUSH1 0x14 DUP3 ADD SWAP2 POP PUSH2 0x1290 DUP3 DUP6 PUSH2 0x123D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x12A0 DUP3 DUP5 PUSH2 0x123D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP DUP2 SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12BF DUP3 DUP5 PUSH2 0xFEF JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12D6 DUP3 DUP5 PUSH2 0x1059 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x12F6 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFBA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1311 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFC9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP PUSH2 0x132D PUSH1 0x0 DUP4 ADD DUP13 PUSH2 0xFC9 JUMP JUMPDEST PUSH2 0x133A PUSH1 0x20 DUP4 ADD DUP12 PUSH2 0xFC9 JUMP JUMPDEST PUSH2 0x1347 PUSH1 0x40 DUP4 ADD DUP11 PUSH2 0xF94 JUMP JUMPDEST PUSH2 0x1354 PUSH1 0x60 DUP4 ADD DUP10 PUSH2 0xF94 JUMP JUMPDEST PUSH2 0x1361 PUSH1 0x80 DUP4 ADD DUP9 PUSH2 0x122E JUMP JUMPDEST PUSH2 0x136E PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x122E JUMP JUMPDEST PUSH2 0x137B PUSH1 0xC0 DUP4 ADD DUP7 PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x1388 PUSH1 0xE0 DUP4 ADD DUP6 PUSH2 0xFBA JUMP JUMPDEST DUP2 DUP2 SUB PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x139B DUP2 DUP5 PUSH2 0x1020 JUMP JUMPDEST SWAP1 POP SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x13C0 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0xFC9 JUMP JUMPDEST PUSH2 0x13CD PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x122E JUMP JUMPDEST PUSH2 0x13DA PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x122E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x13FB DUP2 PUSH2 0x108A JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x141B DUP2 PUSH2 0x10AD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x143B DUP2 PUSH2 0x10D0 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x145B DUP2 PUSH2 0x10F3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x147B DUP2 PUSH2 0x1116 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x149B DUP2 PUSH2 0x1139 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x14BB DUP2 PUSH2 0x115C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x14DB DUP2 PUSH2 0x117F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x14FB DUP2 PUSH2 0x11A2 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x151B DUP2 PUSH2 0x11C5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x153B DUP2 PUSH2 0x11E8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x155B DUP2 PUSH2 0x120B JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x156C PUSH2 0x157D JUMP JUMPDEST SWAP1 POP PUSH2 0x1578 DUP3 DUP3 PUSH2 0x16CD JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x15A2 JUMPI PUSH2 0x15A1 PUSH2 0x1777 JUMP JUMPDEST JUMPDEST PUSH2 0x15AB DUP3 PUSH2 0x17A6 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1600 DUP3 PUSH2 0x162F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1612 DUP3 PUSH2 0x162F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1686 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x166B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1695 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x16B3 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x16C7 JUMPI PUSH2 0x16C6 PUSH2 0x1748 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x16D6 DUP3 PUSH2 0x17A6 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x16F5 JUMPI PUSH2 0x16F4 PUSH2 0x1777 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1709 DUP3 PUSH2 0x172C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x171B DUP3 PUSH2 0x172C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1737 DUP3 PUSH2 0x17B7 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x60 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x656E6474696D652074696D65206D75737420626520696E207468652066757475 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x7265000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x726566756E6461626C653A20616C72656164792077697468647261776E000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x7365637265745F68617368206861736820646F6573206E6F74206D6174636800 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x726566756E6461626C653A20656E6474696D65206E6F74207965742070617373 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6564000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6C6F636B65645F636F6E74726163745F696420646F6573206E6F742065786973 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x7400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x74686973206C6F636B656420636F6E747261637420616C726561647920657869 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x7374730000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x726566756E6461626C653A20616C726561647920726566756E64656400000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6D73672E73656E646572206D7573742062652073616D6520776974682073656E PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6465722061646472657373000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x776974686472617761626C653A20616C72656164792077697468647261776E00 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x776974686472617761626C653A206E6F7420726563697069656E740000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6D73672E76616C7565206D757374206265203E20300000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x726566756E6461626C653A206E6F742073656E64657200000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x1A77 DUP2 PUSH2 0x1607 JUMP JUMPDEST DUP2 EQ PUSH2 0x1A82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A8E DUP2 PUSH2 0x1625 JUMP JUMPDEST DUP2 EQ PUSH2 0x1A99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1AA5 DUP2 PUSH2 0x164F JUMP JUMPDEST DUP2 EQ PUSH2 0x1AB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STATICCALL RETURNDATASIZE 0xDF 0xB3 0xE7 BYTE 0x48 SWAP4 EXTCODEHASH ADD STATICCALL 0xE9 0xA7 PUSH11 0x223900287FDE7AB13CEC7 0xB9 0xBC DUP13 0xAB 0x5E PUSH32 0xF264736F6C634300080300330000000000000000000000000000000000000000"
balance(unit: str = 'Wei')Union[Wei, int, float]

Get XinFin HTLC balance.

Parameters

unit (str) – XinFin unit, default to XDC.

Returns

int, float – XinFin HTLC balance.

>>> from swap.providers.bitcoin.htlc import HTLC
>>> from swap.utils import sha256
>>> htlc: HTLC = HTLC(contract_address="xdcdE06b10c67765c8C0b9F64E0eF423b45Eb86b8e7", network="testnet")
>>> htlc.balance(unit="XDC")
1.56