From 9039524cd525579659f9f74b3b02bdc06339379c Mon Sep 17 00:00:00 2001 From: Dmytro Tkachuk Date: Wed, 13 May 2020 01:07:56 +0300 Subject: [PATCH 1/2] SKALE-1242 Add predeployed IMA support to config file --- .gitignore | 1 + skale/schain_config/__init__.py | 33 + skale/schain_config/base_config.py | 44 +- skale/schain_config/generator.py | 70 +- skale/utils/helper.py | 4 + tests/constants.py | 1 + tests/ima_data_sample.json | 3251 +++++++++++++++++++++++++ tests/schain_config/generator_test.py | 29 +- 8 files changed, 3411 insertions(+), 22 deletions(-) create mode 100644 tests/ima_data_sample.json diff --git a/.gitignore b/.gitignore index 4851c4d3..0e752567 100644 --- a/.gitignore +++ b/.gitignore @@ -111,6 +111,7 @@ wallet*.json creds.tar.gz data.json schain.json +sample_config.json abi.json test_abi.json diff --git a/skale/schain_config/__init__.py b/skale/schain_config/__init__.py index 766d0722..93c90d05 100644 --- a/skale/schain_config/__init__.py +++ b/skale/schain_config/__init__.py @@ -24,4 +24,37 @@ PORTS_PER_SCHAIN = 11 +PRECOMPILED_IMA_CONTRACTS = { + 'skale_features': { + 'filename': 'SkaleFeatures' + }, + 'lock_and_data_for_schain': { + 'filename': 'LockAndDataForSchain' + }, + 'eth_erc20': { + 'filename': 'EthERC20' + }, + 'token_manager': { + 'filename': 'TokenManager' + }, + 'lock_and_data_for_schain_erc20': { + 'filename': 'LockAndDataForSchainERC20' + }, + 'erc20_module_for_schain': { + 'filename': 'ERC20ModuleForSchain' + }, + 'lock_and_data_for_schain_erc721': { + 'filename': 'LockAndDataForSchainERC721' + }, + 'erc721_module_for_schain': { + 'filename': 'ERC721ModuleForSchain' + }, + 'token_factory': { + 'filename': 'TokenFactory' + }, + 'message_proxy_chain': { + 'filename': 'MessageProxyForSchain' + } +} + from skale.schain_config.generator import generate_skale_schain_config diff --git a/skale/schain_config/base_config.py b/skale/schain_config/base_config.py index 607056b2..4c8c5204 100644 --- a/skale/schain_config/base_config.py +++ b/skale/schain_config/base_config.py @@ -20,29 +20,29 @@ from web3 import Web3 from Crypto.Hash import keccak -from skale.schain_config import NODE_OWNER_ALLOC, SCHAIN_OWNER_ALLOC +from skale.schain_config import NODE_OWNER_ALLOC, SCHAIN_OWNER_ALLOC, PRECOMPILED_IMA_CONTRACTS -def add_to_accounts(allocation, account, amount, code=None, storage={}, nonce=0): +def add_to_accounts(accounts, account, balance, code=None, storage={}, nonce=0): assert isinstance(code, str) or code is None assert isinstance(storage, dict) or storage is None acc_fx = Web3.toChecksumAddress(account) - if str(acc_fx) not in allocation: - allocation[acc_fx] = {"balance": str(amount)} + if str(acc_fx) not in accounts: + accounts[acc_fx] = {"balance": str(balance)} if code: - allocation[acc_fx]['code'] = code - allocation[acc_fx]['storage'] = storage - allocation[acc_fx]['nonce'] = str(nonce) + accounts[acc_fx]['code'] = code + accounts[acc_fx]['storage'] = storage + accounts[acc_fx]['nonce'] = str(nonce) -def update_accounts(schain, schain_nodes): - allocation = {} - add_to_accounts(allocation, schain['owner'], SCHAIN_OWNER_ALLOC) +def update_accounts(schain, schain_nodes, ima_data=None): + accounts = {} + add_to_accounts(accounts, schain['owner'], SCHAIN_OWNER_ALLOC) for node in schain_nodes: - if str(node['owner']) not in allocation: - add_to_accounts(allocation, node['owner'], NODE_OWNER_ALLOC) + if str(node['owner']) not in accounts: + add_to_accounts(accounts, node['owner'], NODE_OWNER_ALLOC) add_to_accounts( - allocation, + accounts, '0xD2001000000000000000000000000000000000D2', 0, *_generate_context_predeployed_smart_contract( @@ -50,15 +50,27 @@ def update_accounts(schain, schain_nodes): schain['name'] ) ) - return allocation + if ima_data: + add_ima_accounts(accounts, ima_data) + return accounts -def update_base_config(base_config, schain, schain_nodes): - new_accounts = update_accounts(schain, schain_nodes) +def update_base_config(base_config, schain, schain_nodes, ima_data=None): + new_accounts = update_accounts(schain, schain_nodes, ima_data=ima_data) base_config['accounts'] = {**base_config['accounts'], **new_accounts} add_chain_id(base_config, schain['name']) +def add_ima_accounts(accounts, ima_data): + for contract_name in PRECOMPILED_IMA_CONTRACTS: + add_to_accounts( + accounts=accounts, + account=ima_data[f'{contract_name}_address'], + balance=0, + code=ima_data[f'{contract_name}_bytecode'], + ) + + def _generate_context_predeployed_smart_contract(owner_address: str, schain_name: str) -> (str, dict): code = ('0x608060405234801561001057600080fd5b506004361061005e576000357c0100' + diff --git a/skale/schain_config/generator.py b/skale/schain_config/generator.py index 7a8c7a7e..318e930c 100644 --- a/skale/schain_config/generator.py +++ b/skale/schain_config/generator.py @@ -19,7 +19,8 @@ from skale.dataclasses import CurrentNodeInfo, SchainNodeInfo from skale.schain_config.ports_allocation import get_schain_base_port_on_node -from skale.utils.helper import ip_from_bytes +from skale.schain_config import PRECOMPILED_IMA_CONTRACTS +from skale.utils.helper import ip_from_bytes, decapitalize from skale.utils.web3_utils import public_key_to_address from skale.schain_config.base_config import update_base_config @@ -67,10 +68,64 @@ def get_nodes_for_schain_config(skale, name): return nodes_info -def generate_schain_config(base_config, node_info, schain_info): +def get_contract_address_from_ima_data(ima_data, name): + return ima_data[f'{name}_address'] + + +def generate_permitted_ima_contracts_info(ima_data): + permitted_contracts = {} + for name in PRECOMPILED_IMA_CONTRACTS: + contract_filename = PRECOMPILED_IMA_CONTRACTS[name]['filename'] + permitted_contracts[contract_filename] = get_contract_address_from_ima_data(ima_data, name) + return permitted_contracts + + +def generate_mp_authorized_callers(ima_data): + mp_authorized_callers = {} + for name in PRECOMPILED_IMA_CONTRACTS: + address = get_contract_address_from_ima_data(ima_data, name) + mp_authorized_callers[address] = 1 + return mp_authorized_callers + + +def generate_ima_contracts_addresses(ima_data): + ima_contracts_addresses = {} + for name in PRECOMPILED_IMA_CONTRACTS: + contract_filename = PRECOMPILED_IMA_CONTRACTS[name]['filename'] + address = get_contract_address_from_ima_data(ima_data, name) + ima_contracts_addresses[decapitalize(contract_filename)] = address + return ima_contracts_addresses + + +def generate_schain_contract_settings(ima_data, schain_owner): + # todo: refactor + permitted_contracts = generate_permitted_ima_contracts_info(ima_data) + mp_authorized_callers = generate_mp_authorized_callers(ima_data) + ima_contracts_addresses = generate_ima_contracts_addresses(ima_data) + return { + 'common': { + 'enableContractLogMessages': False + }, + 'IMA': { + 'ownerAddress': schain_owner, + 'variables': { + 'LockAndDataForSchain': { + 'permitted': permitted_contracts + }, + 'MessageProxyForSchain': { + 'mapAuthorizedCallers': mp_authorized_callers + } + }, + **ima_contracts_addresses + } + } + + +def generate_schain_config(base_config, node_info, schain_info, schain_contract_settings={}): return { **base_config, 'skaleConfig': { + 'contractSettings': schain_contract_settings, 'nodeInfo': node_info, 'sChain': schain_info, } @@ -79,7 +134,7 @@ def generate_schain_config(base_config, node_info, schain_info): def generate_skale_schain_config(skale, schain_name, node_id, base_config=None, ima_mainnet=None, ima_mp_schain=None, ima_mp_mainnet=None, wallets=None, - rotate_after_block=64, schain_log_level='info', + ima_data=None, rotate_after_block=64, schain_log_level='info', schain_log_level_config='info'): node = skale.nodes_data.get(node_id) schain = skale.schains_data.get_by_name(schain_name) @@ -105,11 +160,16 @@ def generate_skale_schain_config(skale, schain_name, node_id, base_config=None, schain_info = generate_schain_info(schain, schain_nodes) if base_config: - update_base_config(base_config, schain, schain_nodes) + update_base_config(base_config, schain, schain_nodes, ima_data=ima_data) else: base_config = {} + if ima_data: + schain_contract_settings = generate_schain_contract_settings(ima_data, schain['owner']) + else: + schain_contract_settings = {} return generate_schain_config( base_config=base_config, node_info=node_info, - schain_info=schain_info + schain_info=schain_info, + schain_contract_settings=schain_contract_settings ) diff --git a/skale/utils/helper.py b/skale/utils/helper.py index 45321e07..c73db9e0 100644 --- a/skale/utils/helper.py +++ b/skale/utils/helper.py @@ -31,6 +31,10 @@ logger = logging.getLogger(__name__) +def decapitalize(s): + return s[:1].lower() + s[1:] if s else '' + + def format_fields(fields): """ Transform array to object with passed fields diff --git a/tests/constants.py b/tests/constants.py index 635e7ba0..ed103c72 100644 --- a/tests/constants.py +++ b/tests/constants.py @@ -36,6 +36,7 @@ TEST_ABI_FILEPATH = os.path.join(DIR_PATH, os.pardir, 'test_abi.json') +IMA_DATA_FILEPATH = os.path.join(DIR_PATH, 'ima_data_sample.json') ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] # constants contract diff --git a/tests/ima_data_sample.json b/tests/ima_data_sample.json new file mode 100644 index 00000000..20ad9028 --- /dev/null +++ b/tests/ima_data_sample.json @@ -0,0 +1,3251 @@ +{ + "ima_commit_hash": "18ab505a2902ef0d80f0fde043a51fcc70d338f1", + "skale_features_address": "0xc033b369416c9ecd8e4a07aafa8b06b4107419e2", + "skale_features_abi": [ + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "messageType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "strTextMessage", + "type": "string" + } + ], + "name": "logTextMessage", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strMessage", + "type": "string" + } + ], + "name": "logMessage", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strMessage", + "type": "string" + } + ], + "name": "logDebug", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strMessage", + "type": "string" + } + ], + "name": "logTrace", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strMessage", + "type": "string" + } + ], + "name": "logWarning", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strMessage", + "type": "string" + } + ], + "name": "logError", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strMessage", + "type": "string" + } + ], + "name": "logFatal", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strConfigVariableName", + "type": "string" + } + ], + "name": "getConfigVariableUint256", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strConfigVariableName", + "type": "string" + } + ], + "name": "getConfigVariableAddress", + "outputs": [ + { + "internalType": "address", + "name": "rv", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strConfigVariableName", + "type": "string" + } + ], + "name": "getConfigVariableString", + "outputs": [ + { + "internalType": "string", + "name": "rv", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "strA", + "type": "string" + }, + { + "internalType": "string", + "name": "strB", + "type": "string" + } + ], + "name": "concatenateStrings", + "outputs": [ + { + "internalType": "string", + "name": "rv", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + }, + { + "internalType": "string", + "name": "strConfigVariableName", + "type": "string" + } + ], + "name": "getConfigPermissionFlag", + "outputs": [ + { + "internalType": "uint256", + "name": "rv", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "skale_features_bytecode": "0x608060405234801561001057600080fd5b50610c4a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80637c990052116100715780637c990052146105a4578063969c302d146106485780639975c06b146106ec578063a828a18b14610790578063d0c4714f14610850578063d2ad509014610904576100b4565b80632ef4d82c146100b95780633e27b0ac146101d2578063442017cc1461028f57806371f586f21461033357806374a906f9146103d75780637a36b3ee1461047b575b600080fd5b61015d600480360360208110156100cf57600080fd5b810190602081018135600160201b8111156100e957600080fd5b8201836020820111156100fb57600080fd5b803590602001918460018302840111600160201b8311171561011c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506109a8945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019757818101518382015260200161017f565b50505050905090810190601f1680156101c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d600480360360408110156101e857600080fd5b81359190810190604081016020820135600160201b81111561020957600080fd5b82018360208201111561021b57600080fd5b803590602001918460018302840111600160201b8311171561023c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506109fd945050505050565b60408051918252519081900360200190f35b61027d600480360360208110156102a557600080fd5b810190602081018135600160201b8111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111600160201b831117156102f257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a60945050505050565b61027d6004803603602081101561034957600080fd5b810190602081018135600160201b81111561036357600080fd5b82018360208201111561037557600080fd5b803590602001918460018302840111600160201b8311171561039657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a73945050505050565b61027d600480360360208110156103ed57600080fd5b810190602081018135600160201b81111561040757600080fd5b82018360208201111561041957600080fd5b803590602001918460018302840111600160201b8311171561043a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a80945050505050565b61015d6004803603604081101561049157600080fd5b810190602081018135600160201b8111156104ab57600080fd5b8201836020820111156104bd57600080fd5b803590602001918460018302840111600160201b831117156104de57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561053057600080fd5b82018360208201111561054257600080fd5b803590602001918460018302840111600160201b8311171561056357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a8d945050505050565b61027d600480360360208110156105ba57600080fd5b810190602081018135600160201b8111156105d457600080fd5b8201836020820111156105e657600080fd5b803590602001918460018302840111600160201b8311171561060757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b29945050505050565b61027d6004803603602081101561065e57600080fd5b810190602081018135600160201b81111561067857600080fd5b82018360208201111561068a57600080fd5b803590602001918460018302840111600160201b831117156106ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b36945050505050565b61027d6004803603602081101561070257600080fd5b810190602081018135600160201b81111561071c57600080fd5b82018360208201111561072e57600080fd5b803590602001918460018302840111600160201b8311171561074f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b89945050505050565b610834600480360360208110156107a657600080fd5b810190602081018135600160201b8111156107c057600080fd5b8201836020820111156107d257600080fd5b803590602001918460018302840111600160201b831117156107f357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b96945050505050565b604080516001600160a01b039092168252519081900360200190f35b61027d6004803603604081101561086657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561089057600080fd5b8201836020820111156108a257600080fd5b803590602001918460018302840111600160201b831117156108c357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bae945050505050565b61027d6004803603602081101561091a57600080fd5b810190602081018135600160201b81111561093457600080fd5b82018360208201111561094657600080fd5b803590602001918460018302840111600160201b8311171561096757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c08945050505050565b8051606090604090601590600090602090601f01046001019050825160005b828110156109e3576020810287810151908301526001016109c7565b506210000085602084028386600019fa5050505050919050565b8051604080513380825260208281018790526000946012936001601f909201929092040190808501865b83811015610a4357602081028981015190830152600101610a27565b506020826040858302018188600019fa9998505050505050505050565b6000610a6d6004836109fd565b92915050565b6000610a6d6005836109fd565b6000610a6d6003836109fd565b8151606090604090601690600090602090601f01046001019050600060208651601f0181610ab757fe5b0460010190506000818301905084518060005b85811015610ae657602081028b81015190830152600101610aca565b50602085020160005b84811015610b0b57602081028a81015190830152600101610aef565b506210000088602085028489600019fa505050505050505092915050565b6000610a6d6000836109fd565b80516000906040906013908390602090601f015b046001019050825160005b82811015610b7157602081028781015190830152600101610b55565b506020818382028186600019fa505195945050505050565b6000610a6d6001836109fd565b80516000906040906014908390602090601f01610b4a565b80516040805184815260009260179160016020601f90930183900401918101855b83811015610beb57602081028881015190830152600101610bcf565b506020826040858302018187600019fa5051979650505050505050565b6000610a6d6002836109fd56fea265627a7a72315820f41376ea8dbd51043cb2088b21a4ebcf855a645a8515b884f03786140f84bc6764736f6c634300050f0032", + "lock_and_data_for_schain_address": "0x47cf4c2d6891377952a7e0e08a6f17180a91a0f9", + "lock_and_data_for_schain_abi": [ + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "authorizedCaller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "ethCosts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "permitted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "tokenManagerAddresses", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newEthERC20Address", + "type": "address" + } + ], + "name": "setEthERC20Address", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "contractName", + "type": "string" + }, + { + "internalType": "address", + "name": "newContract", + "type": "address" + } + ], + "name": "setContract", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + } + ], + "name": "hasSchain", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + }, + { + "internalType": "address", + "name": "tokenManagerAddress", + "type": "address" + } + ], + "name": "addSchain", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + } + ], + "name": "removeSchain", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "hasDepositBox", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "depositBoxAddress", + "type": "address" + } + ], + "name": "addDepositBox", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "removeDepositBox", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "addAuthorizedCaller", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "removeAuthorizedCaller", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "addGasCosts", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "reduceGasCosts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "removeGasCosts", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "sendEth", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "receiveEth", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getEthERC20Address", + "outputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "lock_and_data_for_schain_bytecode": "0x60806040526006805460ff1916905534801561001a57600080fd5b50600080546001600160a01b0319163390811782556006805460ff1990811660019081179092559183526005602052604090922080549091169091179055611c90806100676000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806356cb6b30116100c3578063ad43325c1161007c578063ad43325c146104c7578063b4e91a32146104cf578063b7aa023114610546578063f2fde38b1461056c578063f3bc080414610592578063f9bf971f146105b85761014d565b806356cb6b30146103ad57806379e9510a1461041b5780637d5069a714610447578063893d20e81461046d5780638a3c110f1461047557806398f6ef12146104a15761014d565b806313af40351161011557806313af4035146102875780631ef7d10d146102ad5780633a2bfd7f146102e55780633f0ed0df1461030257806349dcbc5e146103795780634d9e0799146103a55761014d565b8063041f4c9b146101525780630f399a76146101d45780630fab4ca8146101fc57806310f01f4e1461022857806313a155ea14610261575b600080fd5b6101c06004803603602081101561016857600080fd5b810190602081018135600160201b81111561018257600080fd5b82018360208201111561019457600080fd5b803590602001918460018302840111600160201b831117156101b557600080fd5b5090925090506105c0565b604080519115158252519081900360200190f35b6101fa600480360360208110156101ea57600080fd5b50356001600160a01b0316610629565b005b6101fa6004803603604081101561021257600080fd5b506001600160a01b0381351690602001356106a2565b6102456004803603602081101561023e57600080fd5b503561074d565b604080516001600160a01b039092168252519081900360200190f35b6101fa6004803603602081101561027757600080fd5b50356001600160a01b0316610768565b6101fa6004803603602081101561029d57600080fd5b50356001600160a01b03166107e3565b6102d3600480360360208110156102c357600080fd5b50356001600160a01b0316610805565b60408051918252519081900360200190f35b610245600480360360208110156102fb57600080fd5b50356108b0565b6101fa6004803603604081101561031857600080fd5b810190602081018135600160201b81111561033257600080fd5b82018360208201111561034457600080fd5b803590602001918460018302840111600160201b8311171561036557600080fd5b9193509150356001600160a01b03166108cb565b6101c06004803603604081101561038f57600080fd5b506001600160a01b038135169060200135610ab3565b6101fa610c15565b6101fa600480360360208110156103c357600080fd5b810190602081018135600160201b8111156103dd57600080fd5b8201836020820111156103ef57600080fd5b803590602001918460018302840111600160201b8311171561041057600080fd5b509092509050610d4a565b6101c06004803603604081101561043157600080fd5b506001600160a01b038135169060200135610e59565b6101fa6004803603602081101561045d57600080fd5b50356001600160a01b0316610f6c565b610245611138565b6101c06004803603604081101561048b57600080fd5b506001600160a01b0381351690602001356111f2565b6101c0600480360360208110156104b757600080fd5b50356001600160a01b0316611338565b6101c061134d565b6101fa600480360360408110156104e557600080fd5b810190602081018135600160201b8111156104ff57600080fd5b82018360208201111561051157600080fd5b803590602001918460018302840111600160201b8311171561053257600080fd5b9193509150356001600160a01b03166113af565b6101fa6004803603602081101561055c57600080fd5b50356001600160a01b031661154e565b6101fa6004803603602081101561058257600080fd5b50356001600160a01b03166115c6565b6102d3600480360360208110156105a857600080fd5b50356001600160a01b0316611684565b610245611696565b6000808383604051602001808383808284376040805191909301818103601f19018252835280516020918201206000818152600390925292902054919550506001600160a01b03161515925061061d915050576000915050610623565b60019150505b92915050565b610631611138565b6001600160a01b0316336001600160a01b0316146106805760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1a6022913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280600c81526020016b2a37b5b2b726b0b730b3b2b960a11b8152506106d1813361172f565b806106eb5750336106e0611138565b6001600160a01b0316145b61072a576040805162461bcd60e51b81526020600482018190526024820152600080516020611c3c833981519152604482015290519081900360640190fd5b506001600160a01b03909116600090815260046020526040902080549091019055565b6003602052600090815260409020546001600160a01b031681565b610770611138565b6001600160a01b0316336001600160a01b0316146107bf5760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1a6022913960400191505060405180910390fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006040518060400160405280600c81526020016b2a37b5b2b726b0b730b3b2b960a11b815250610836813361172f565b80610850575033610845611138565b6001600160a01b0316145b61088f576040805162461bcd60e51b81526020600482018190526024820152600080516020611c3c833981519152604482015290519081900360640190fd5b50506001600160a01b03166000908152600460205260408120805491905590565b6002602052600090815260409020546001600160a01b031681565b6108d3611138565b6001600160a01b0316336001600160a01b0316146109225760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1a6022913960400191505060405180910390fd5b6001600160a01b03811661097d576040805162461bcd60e51b815260206004820152601960248201527f4e6577206164647265737320697320657175616c207a65726f00000000000000604482015290519081900360640190fd5b600083836040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090506109f284848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925061172f915050565b15610a44576040805162461bcd60e51b815260206004820152601960248201527f436f6e747261637420697320616c726561647920616464656400000000000000604482015290519081900360640190fd5b813b80610a825760405162461bcd60e51b815260040180806020018281038252602c815260200180611b8b602c913960400191505060405180910390fd5b50600090815260026020526040902080546001600160a01b0319166001600160a01b03929092169190911790555050565b60006040518060400160405280600c81526020016b2a37b5b2b726b0b730b3b2b960a11b815250610ae4813361172f565b80610afe575033610af3611138565b6001600160a01b0316145b610b3d576040805162461bcd60e51b81526020600482018190526024820152600080516020611c3c833981519152604482015290519081900360640190fd5b610b45611696565b6001600160a01b03166340c10f1985856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610ba457600080fd5b505af1158015610bb8573d6000803e3d6000fd5b505050506040513d6020811015610bce57600080fd5b505161061d576040805162461bcd60e51b815260206004820152600a60248201526926b4b73a1032b93937b960b11b604482015290519081900360640190fd5b5092915050565b610c1d611138565b6001600160a01b0316336001600160a01b031614610c6c5760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1a6022913960400191505060405180910390fd5b604080516613585a5b9b995d60ca1b60208083019190915282518083036007018152602790920183528151918101919091206000908152600390915220546001600160a01b0316610cfd576040805162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08109bde081a5cc81b9bdd081cd95d60521b604482015290519081900360640190fd5b604080516613585a5b9b995d60ca1b6020808301919091528251808303600701815260279092018352815191810191909120600090815260039091522080546001600160a01b0319169055565b610d52611138565b6001600160a01b0316336001600160a01b031614610da15760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1a6022913960400191505060405180910390fd5b60008282604051602001808383808284376040805191909301818103601f19018252835280516020918201206000818152600390925292902054919550506001600160a01b031615159250610e39915050576040805162461bcd60e51b815260206004820152601660248201527514d2d053114818da185a5b881a5cc81b9bdd081cd95d60521b604482015290519081900360640190fd5b600090815260036020526040902080546001600160a01b03191690555050565b60006040518060400160405280600c81526020016b2a37b5b2b726b0b730b3b2b960a11b815250610e8a813361172f565b80610ea4575033610e99611138565b6001600160a01b0316145b610ee3576040805162461bcd60e51b81526020600482018190526024820152600080516020611c3c833981519152604482015290519081900360640190fd5b610eeb611696565b6001600160a01b03166379cc679085856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f4a57600080fd5b505af1158015610f5e573d6000803e3d6000fd5b506001979650505050505050565b3360009081526005602052604090205460ff1680610f99575033610f8e611138565b6001600160a01b0316145b610fe2576040805162461bcd60e51b81526020600482015260156024820152742737ba1030baba3437b934bd32b21031b0b63632b960591b604482015290519081900360640190fd5b6001600160a01b03811661103d576040805162461bcd60e51b815260206004820152601d60248201527f496e636f7272656374204465706f73697420426f782061646472657373000000604482015290519081900360640190fd5b604080516613585a5b9b995d60ca1b60208083019190915282516007818403018152602790920183528151918101919091206000908152600390915220546001600160a01b03828116911614156110db576040805162461bcd60e51b815260206004820152601a60248201527f4465706f73697420426f7820697320616c726561647920736574000000000000604482015290519081900360640190fd5b604080516613585a5b9b995d60ca1b6020808301919091528251600781840301815260279092018352815191810191909120600090815260039091522080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03166111e15760405163a828a18b60e01b8152602060048201908152602d6024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190611b14823960400191505060206040518083038186803b1580156111ae57600080fd5b505afa1580156111c2573d6000803e3d6000fd5b505050506040513d60208110156111d857600080fd5b505190506111ef565b506000546001600160a01b03165b90565b60006040518060400160405280600c81526020016b2a37b5b2b726b0b730b3b2b960a11b815250611223813361172f565b8061123d575033611232611138565b6001600160a01b0316145b61127c576040805162461bcd60e51b81526020600482018190526024820152600080516020611c3c833981519152604482015290519081900360640190fd5b6001600160a01b03841660009081526004602052604090205483116112c3576001600160a01b03841660009081526004602052604090208054849003905560019150610c0e565b6000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec54831161132e576000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8054849003905560019150610c0e565b5060009392505050565b60056020526000908152604090205460ff1681565b604080516613585a5b9b995d60ca1b602080830191909152825180830360070181526027909201835281519181019190912060008181526003909252918120549091906001600160a01b03166113a75760009150506111ef565b600191505090565b3360009081526005602052604090205460ff16806113dc5750336113d1611138565b6001600160a01b0316145b611425576040805162461bcd60e51b81526020600482015260156024820152742737ba1030baba3437b934bd32b21031b0b63632b960591b604482015290519081900360640190fd5b60008383604051602001808383808284376040805191909301818103601f19018252835280516020918201206000818152600390925292902054919550506001600160a01b03161592506114c3915050576040805162461bcd60e51b815260206004820152601a60248201527f534b414c4520636861696e20697320616c726561647920736574000000000000604482015290519081900360640190fd5b6001600160a01b03821661151e576040805162461bcd60e51b815260206004820152601f60248201527f496e636f727265637420546f6b656e204d616e61676572206164647265737300604482015290519081900360640190fd5b600090815260036020526040902080546001600160a01b0319166001600160a01b03929092169190911790555050565b611556611138565b6001600160a01b0316336001600160a01b0316146115a55760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1a6022913960400191505060405180910390fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6115ce611138565b6001600160a01b0316336001600160a01b03161461161d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611c1a6022913960400191505060405180910390fd5b6001600160a01b038116611678576040805162461bcd60e51b815260206004820152601760248201527f4e6577206f776e65722068617320746f20626520736574000000000000000000604482015290519081900360640190fd5b611681816107e3565b50565b60046020526000908152604090205481565b6001546000906001600160a01b03161580156116b5575060065460ff16155b1561171f5760405163a828a18b60e01b815260206004820190815260306024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190611bb7823960400191505060206040518083038186803b1580156111ae57600080fd5b506001546001600160a01b031690565b60006001600160a01b0382166117765760405162461bcd60e51b8152600401808060200182810382526033815260200180611be76033913960400191505060405180910390fd5b6000836040516020018082805190602001908083835b602083106117ab5780518252601f19909201916020918201910161178c565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f19018352845281519181019190912060008181526002909252928120549295509350506001600160a01b038681169116149050611810576000611813565b60015b905080156118245760019250611b0b565b60065460ff16611b0657606073c033b369416c9ecd8e4a07aafa8b06b4107419e26001600160a01b0316637a36b3ee876040518263ffffffff1660e01b81526004018080602001806020018381038352604a815260200180611b41604a9139606001838103825284818151815260200191508051906020019080838360005b838110156118bb5781810151838201526020016118a3565b50505050905090810190601f1680156118e85780820380516001836020036101000a031916815260200191505b50935050505060006040518083038186803b15801561190657600080fd5b505afa15801561191a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561194357600080fd5b8101908080516040519392919084600160201b82111561196257600080fd5b90830190602082018581111561197757600080fd5b8251600160201b81118282018810171561199057600080fd5b82525081516020918201929091019080838360005b838110156119bd5781810151838201526020016119a5565b50505050905090810190601f1680156119ea5780820380516001836020036101000a031916815260200191505b506040525050509050600073c033b369416c9ecd8e4a07aafa8b06b4107419e26001600160a01b031663a828a18b836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a65578181015183820152602001611a4d565b50505050905090810190601f168015611a925780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611aaf57600080fd5b505afa158015611ac3573d6000803e3d6000fd5b505050506040513d6020811015611ad957600080fd5b505190506001600160a01b038082169087161415611afa5760019450611aff565b600094505b5050611b0b565b600092505b50509291505056fe736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6f776e657241646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e7661726961626c65732e4c6f636b416e6444617461466f7253636861696e2e7065726d69747465642e476976656e20636f6e7472616374206164647265737320646f6573206e6f7420636f6e7461696e20636f6465736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e657468455243323041646472657373636f6e7472616374206164647265737320726571756972656420746f20636865636b207065726d6974746564207374617475734f6e6c79206f776e65722063616e20657865637574652074686973206d6574686f644e6f7420616c6c6f776564204c6f636b416e6444617461466f7253636861696ea265627a7a7231582071ab585c34d13628a03ddce382a6ba1f9baa43d2304e239da9c6d32506fad92264736f6c634300050f0032", + "eth_erc20_address": "0xd3cdbc1b727b2ed91b8ad21333841d2e96f255af", + "eth_erc20_abi": [ + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "eth_erc20_bytecode": "0x60806040526004805460ff191690553480156200001b57600080fd5b50600080546001600160a01b03191633179055620000416001600160e01b036200004716565b620001b8565b60045460ff1615620000595762000111565b6004805460ff191660011790556040805180820190915260118082527f455243323020457468657220436c6f6e650000000000000000000000000000006020909201918252620000ac9160059162000113565b506040805180820190915260048082527f45544843000000000000000000000000000000000000000000000000000000006020909201918252620000f39160069162000113565b506007805460ff191660121790556a6342fd08f00f63780000006008555b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200015657805160ff191683800117855562000186565b8280016001018555821562000186579182015b828111156200018657825182559160200191906001019062000169565b506200019492915062000198565b5090565b620001b591905b808211156200019457600081556001016200019f565b90565b61105380620001c86000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806342966c68116100a257806395d89b411161007157806395d89b411461034e578063a457c2d714610356578063a9059cbb14610382578063dd62ed3e146103ae578063f2fde38b146103dc5761010b565b806342966c68146102bb57806370a08231146102d857806379cc6790146102fe578063893d20e81461032a5761010b565b806323b872dd116100de57806323b872dd1461020f578063313ce56714610245578063395093511461026357806340c10f191461028f5761010b565b806306fdde0314610110578063095ea7b31461018d57806313af4035146101cd57806318160ddd146101f5575b600080fd5b610118610402565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015257818101518382015260200161013a565b50505050905090810190601f16801561017f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b9600480360360408110156101a357600080fd5b506001600160a01b038135169060200135610499565b604080519115158252519081900360200190f35b6101f3600480360360208110156101e357600080fd5b50356001600160a01b03166104af565b005b6101fd6104d1565b60408051918252519081900360200190f35b6101b96004803603606081101561022557600080fd5b506001600160a01b038135811691602081013590911690604001356104d7565b61024d61052e565b6040805160ff9092168252519081900360200190f35b6101b96004803603604081101561027957600080fd5b506001600160a01b038135169060200135610537565b6101b9600480360360408110156102a557600080fd5b506001600160a01b038135169060200135610573565b6101f3600480360360208110156102d157600080fd5b5035610640565b6101fd600480360360208110156102ee57600080fd5b50356001600160a01b0316610655565b6101f36004803603604081101561031457600080fd5b506001600160a01b038135169060200135610670565b6103326106dd565b604080516001600160a01b039092168252519081900360200190f35b610118610796565b6101b96004803603604081101561036c57600080fd5b506001600160a01b0381351690602001356107f7565b6101b96004803603604081101561039857600080fd5b506001600160a01b038135169060200135610833565b6101fd600480360360408110156103c457600080fd5b506001600160a01b0381358116916020013516610840565b6101f3600480360360208110156103f257600080fd5b50356001600160a01b031661086b565b60058054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048e5780601f106104635761010080835404028352916020019161048e565b820191906000526020600020905b81548152906001019060200180831161047157829003601f168201915b505050505090505b90565b60006104a6338484610926565b50600192915050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60035490565b60006104e4848484610a12565b6001600160a01b03841660009081526002602090815260408083203380855292529091205461052491869161051f908663ffffffff610b5616565b610926565b5060019392505050565b60075460ff1690565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916104a691859061051f908663ffffffff610bb316565b600061057d6106dd565b6001600160a01b0316336001600160a01b0316146105cc5760405162461bcd60e51b8152600401808060200182810382526022815260200180610f936022913960400191505060405180910390fd5b6105d4610c14565b6008546105ef836105e36104d1565b9063ffffffff610bb316565b1115610636576040805162461bcd60e51b815260206004820152601160248201527010d85c1858da5d1e48195e18d959591959607a1b604482015290519081900360640190fd5b6104a68383610cb5565b610648610c14565b6106523382610da7565b50565b6001600160a01b031660009081526001602052604090205490565b6106786106dd565b6001600160a01b0316336001600160a01b0316146106c75760405162461bcd60e51b8152600401808060200182810382526022815260200180610f936022913960400191505060405180910390fd5b6106cf610c14565b6106d98282610da7565b5050565b600080546001600160a01b03166107865760405163a828a18b60e01b815260206004820190815260336024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190610f3e823960400191505060206040518083038186803b15801561075357600080fd5b505afa158015610767573d6000803e3d6000fd5b505050506040513d602081101561077d57600080fd5b50519050610496565b506000546001600160a01b031690565b60068054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048e5780601f106104635761010080835404028352916020019161048e565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916104a691859061051f908663ffffffff610b5616565b60006104a6338484610a12565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6108736106dd565b6001600160a01b0316336001600160a01b0316146108c25760405162461bcd60e51b8152600401808060200182810382526022815260200180610f936022913960400191505060405180910390fd5b6001600160a01b03811661091d576040805162461bcd60e51b815260206004820152601760248201527f4e6577206f776e65722068617320746f20626520736574000000000000000000604482015290519081900360640190fd5b610652816104af565b6001600160a01b03831661096b5760405162461bcd60e51b8152600401808060200182810382526024815260200180610ffb6024913960400191505060405180910390fd5b6001600160a01b0382166109b05760405162461bcd60e51b8152600401808060200182810382526022815260200180610f716022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610a575760405162461bcd60e51b8152600401808060200182810382526025815260200180610fd66025913960400191505060405180910390fd5b6001600160a01b038216610a9c5760405162461bcd60e51b8152600401808060200182810382526023815260200180610f1b6023913960400191505060405180910390fd5b6001600160a01b038316600090815260016020526040902054610ac5908263ffffffff610b5616565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610afa908263ffffffff610bb316565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115610bad576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610c0d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60045460ff1615610c2457610cb3565b6004805460ff1916600117905560408051808201909152601180825270455243323020457468657220436c6f6e6560781b6020909201918252610c6991600591610e82565b50604080518082019091526004808252634554484360e01b6020909201918252610c9591600691610e82565b506007805460ff191660121790556a6342fd08f00f63780000006008555b565b6001600160a01b038216610d10576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600354610d23908263ffffffff610bb316565b6003556001600160a01b038216600090815260016020526040902054610d4f908263ffffffff610bb316565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610dec5760405162461bcd60e51b8152600401808060200182810382526021815260200180610fb56021913960400191505060405180910390fd5b600354610dff908263ffffffff610b5616565b6003556001600160a01b038216600090815260016020526040902054610e2b908263ffffffff610b5616565b6001600160a01b0383166000818152600160209081526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610ec357805160ff1916838001178555610ef0565b82800160010185558215610ef0579182015b82811115610ef0578251825591602001919060010190610ed5565b50610efc929150610f00565b5090565b61049691905b80821115610efc5760008155600101610f0656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6c6f636b416e64446174614164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734f6e6c79206f776e65722063616e20657865637574652074686973206d6574686f6445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a72315820659fccdd722535cd76f20efc88df29d77daaf820f98c546fdc52e6bdcf54aaf364736f6c634300050f0032", + "token_manager_address": "0x57ad607c6e90df7d7f158985c3e436007a15d744", + "token_manager_abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "newChainID", + "type": "string" + }, + { + "internalType": "address", + "name": "newProxyAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "newLockAndDataAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "fromSchainID", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "Error", + "type": "event" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "constant": true, + "inputs": [], + "name": "AVERAGE_TX_PRICE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "GAS_AMOUNT_POST_MESSAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getLockAndDataAddress", + "outputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "exitToMainWithoutData", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferToSchainWithoutData", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "addEthCostWithoutAddress", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "removeEthCost", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "exitToMainERC20", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "contractThere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "rawExitToMainERC20", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + }, + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferToSchainERC20", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + }, + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "contractThere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "rawTransferToSchainERC20", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exitToMainERC721", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "contractThere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "rawExitToMainERC721", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + }, + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferToSchainERC721", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + }, + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "contractThere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "rawTransferToSchainERC721", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "string", + "name": "fromSchainID", + "type": "string" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "postMessage", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "exitToMain", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "exitToMain", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "transferToSchain", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainID", + "type": "string" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferToSchain", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "addEthCost", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "addEthCost", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getChainID", + "outputs": [ + { + "internalType": "string", + "name": "cID", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getProxyForSchainAddress", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "token_manager_bytecode": "0x60806040523480156200001157600080fd5b506040516200599338038062005993833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b506040908152602082810151929091015160008054336001600160a01b031991821617909155600180549091166001600160a01b03831617905585519294509250620001389160029186019062000161565b5050600380546001600160a01b0319166001600160a01b03929092169190911790555062000206565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a457805160ff1916838001178555620001d4565b82800160010185558215620001d4579182015b82811115620001d4578251825591602001919060010190620001b7565b50620001e2929150620001e6565b5090565b6200020391905b80821115620001e25760008155600101620001ed565b90565b61577d80620002166000396000f3fe60806040526004361061019c5760003560e01c80637c453982116100ec578063d24fa3891161008a578063e37a613a11610064578063e37a613a14610b8a578063e4a9eaaf14610b9f578063ed103fb814610bd8578063f2fde38b14610c115761019c565b8063d24fa38914610b21578063d41db4bb14610b36578063d70bfadc14610b605761019c565b8063a3c690d6116100c6578063a3c690d614610915578063a720ae4c14610a05578063a84a121b14610a4e578063ae0e4b7214610ae85761019c565b80637c4539821461082d578063893d20e8146108b75780639e65b34b146108cc5761019c565b80632be1a374116101595780633c1fe3eb116101335780633c1fe3eb146104ff5780633f0118bf1461064a578063564b81ef146106e457806372838baa1461076e5761019c565b80632be1a3741461041357806330d86b2a146104285780633b4612c11461046b5761019c565b8063037489c0146101e95780630472e00a1461021057806313af4035146102a65780631b74e794146102d95780631fdefa141461030a5780632baaf643146103d0575b6040805162461bcd60e51b815260206004820152601c60248201527f4e6f7420616c6c6f7765642e20696e20546f6b656e4d616e6167657200000000604482015290519081900360640190fd5b3480156101f557600080fd5b506101fe610c44565b60408051918252519081900360200190f35b34801561021c57600080fd5b506102a46004803603608081101561023357600080fd5b810190602081018135600160201b81111561024d57600080fd5b82018360208201111561025f57600080fd5b803590602001918460018302840111600160201b8311171561028057600080fd5b91935091506001600160a01b03813581169160208101359091169060400135610c4b565b005b3480156102b257600080fd5b506102a4600480360360208110156102c957600080fd5b50356001600160a01b0316611261565b3480156102e557600080fd5b506102ee611283565b604080516001600160a01b039092168252519081900360200190f35b34801561031657600080fd5b506102a46004803603606081101561032d57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561035c57600080fd5b82018360208201111561036e57600080fd5b803590602001918460018302840111600160201b8311171561038f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611340945050505050565b3480156103dc57600080fd5b506102a4600480360360608110156103f357600080fd5b506001600160a01b038135811691602081013590911690604001356116ab565b34801561041f57600080fd5b506101fe611d89565b34801561043457600080fd5b506102a46004803603606081101561044b57600080fd5b506001600160a01b03813581169160208101359091169060400135611d92565b34801561047757600080fd5b506102a46004803603608081101561048e57600080fd5b810190602081018135600160201b8111156104a857600080fd5b8201836020820111156104ba57600080fd5b803590602001918460018302840111600160201b831117156104db57600080fd5b91935091506001600160a01b0381358116916020810135909116906040013561222b565b34801561050b57600080fd5b506102a46004803603608081101561052257600080fd5b810190602081018135600160201b81111561053c57600080fd5b82018360208201111561054e57600080fd5b803590602001918460018302840111600160201b8311171561056f57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385351695602086013595919450925060608101915060400135600160201b8111156105d657600080fd5b8201836020820111156105e857600080fd5b803590602001918460018302840111600160201b8311171561060957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125f1945050505050565b34801561065657600080fd5b506102a4600480360360a081101561066d57600080fd5b810190602081018135600160201b81111561068757600080fd5b82018360208201111561069957600080fd5b803590602001918460018302840111600160201b831117156106ba57600080fd5b91935091506001600160a01b03813581169160208101358216916040820135169060600135612b01565b3480156106f057600080fd5b506106f961311a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561073357818101518382015260200161071b565b50505050905090810190601f1680156107605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561077a57600080fd5b506102a46004803603606081101561079157600080fd5b810190602081018135600160201b8111156107ab57600080fd5b8201836020820111156107bd57600080fd5b803590602001918460018302840111600160201b831117156107de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602001356133b4565b34801561083957600080fd5b506102a46004803603606081101561085057600080fd5b810190602081018135600160201b81111561086a57600080fd5b82018360208201111561087c57600080fd5b803590602001918460018302840111600160201b8311171561089d57600080fd5b91935091506001600160a01b0381351690602001356133d5565b3480156108c357600080fd5b506102ee613418565b3480156108d857600080fd5b506102a4600480360360808110156108ef57600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356134d1565b34801561092157600080fd5b506102a4600480360360a081101561093857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561096257600080fd5b82018360208201111561097457600080fd5b803590602001918460018302840111600160201b8311171561099557600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b8111156109c757600080fd5b8201836020820111156109d957600080fd5b803590602001918460018302840111600160201b831117156109fa57600080fd5b509092509050613bad565b348015610a1157600080fd5b506102a460048036036080811015610a2857600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356147c5565b348015610a5a57600080fd5b506102a4600480360360a0811015610a7157600080fd5b810190602081018135600160201b811115610a8b57600080fd5b820183602082011115610a9d57600080fd5b803590602001918460018302840111600160201b83111715610abe57600080fd5b91935091506001600160a01b03813581169160208101358216916040820135169060600135614c5e565b348015610af457600080fd5b506102a460048036036040811015610b0b57600080fd5b506001600160a01b038135169060200135615024565b348015610b2d57600080fd5b506102ee615032565b348015610b4257600080fd5b506102a460048036036020811015610b5957600080fd5b50356150ba565b348015610b6c57600080fd5b506102a460048036036020811015610b8357600080fd5b50356150c6565b348015610b9657600080fd5b506102a46150d0565b348015610bab57600080fd5b506102a460048036036040811015610bc257600080fd5b506001600160a01b03813516906020013561522e565b348015610be457600080fd5b506102a460048036036040811015610bfb57600080fd5b506001600160a01b03813516906020013561524d565b348015610c1d57600080fd5b506102a460048036036020811015610c3457600080fd5b50356001600160a01b03166153f7565b62030d4081565b6000610c55611283565b6001600160a01b0316633a2bfd7f60405160200180806f04c6f636b416e644461746145524332360841b8152506010019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610cd157600080fd5b505afa158015610ce5573d6000803e3d6000fd5b505050506040513d6020811015610cfb57600080fd5b505190506000610d09611283565b6001600160a01b0316633a2bfd7f60405160200180806a45524332304d6f64756c6560a81b815250600b019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610d8057600080fd5b505afa158015610d94573d6000803e3d6000fd5b505050506040513d6020811015610daa57600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925084916001600160a01b0388169163dd62ed3e916044808301926020929190829003018186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6020811015610e2757600080fd5b50511015610e76576040805162461bcd60e51b81526020600482015260176024820152762737ba1030b63637bbb2b21022a9219918102a37b5b2b760491b604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201526001600160a01b038481166024830152604482018690529151918716916323b872dd916064808201926020929091908290030181600087803b158015610ecf57600080fd5b505af1158015610ee3573d6000803e3d6000fd5b505050506040513d6020811015610ef957600080fd5b5051610f3a576040805162461bcd60e51b815260206004820152601e60248201526000805160206156e7833981519152604482015290519081900360640190fd5b6040805163b326164d60e01b81526001600160a01b03878116600483015286811660248301526044820186905260006064830181905292516060939185169263b326164d92608480830193919282900301818387803b158015610f9c57600080fd5b505af1158015610fb0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610fd957600080fd5b8101908080516040519392919084600160201b821115610ff857600080fd5b90830190602082018581111561100d57600080fd5b8251600160201b81118282018810171561102657600080fd5b82525081516020918201929091019080838360005b8381101561105357818101518382015260200161103b565b50505050905090810190601f1680156110805780820380516001836020036101000a031916815260200191505b506040525050509050611091615032565b6001600160a01b0316632231691e89896110a9611283565b6001600160a01b03166310f01f4e60405160200180806613585a5b9b995d60ca1b8152506007019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b505050506040513d602081101561114857600080fd5b50516040516001600160e01b031960e086901b1681526001600160a01b03821660248201526000604482018190526064820181905260a06004830190815260a483018590529091829189918190608481019060c4018989808284376000838201819052601f909101601f191690920185810384528651815286516020918201939188019250908190849084905b838110156111ed5781810151838201526020016111d5565b50505050905090810190601f16801561121a5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561123f57600080fd5b505af1158015611253573d6000803e3d6000fd5b505050505050505050505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546000906001600160a01b0316156112a957506001546001600160a01b031661133d565b60405163a828a18b60e01b815260206004820190815260336024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190615624823960400191505060206040518083038186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b505190505b90565b8166071afd498d000081101561138b576040805162461bcd60e51b815260206004820152600b60248201526a139d5b1b08105b5bdd5b9d60aa1b604482015290519081900360640190fd5b611393611283565b6001600160a01b03166379e9510a33836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156113f257600080fd5b505af1158015611406573d6000803e3d6000fd5b505050506040513d602081101561141c57600080fd5b505161146f576040805162461bcd60e51b815260206004820152601b60248201527f436f756c64206e6f7420726563656976652045544820436c6f6e650000000000604482015290519081900360640190fd5b604051600160f81b602080830182815285516060948793602190910191908401908083835b602083106114b35780518252601f199092019160209182019101611494565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290506114f2615032565b6001600160a01b0316632231691e611508611283565b6001600160a01b03166310f01f4e60405160200180806613585a5b9b995d60ca1b8152506007019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b505050506040513d60208110156115a757600080fd5b505160405160e083811b6001600160e01b03191682526001600160a01b038084166024840152604483018a90528a16606483015260a060048301908152600760a48401526613585a5b9b995d60ca1b60c484015260848301918252865160e484015286518a938c9389939283926101040190602086019080838360005b8381101561163c578181015183820152602001611624565b50505050905090810190601f1680156116695780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b60006116b5611283565b6001600160a01b0316633a2bfd7f60405160200180806f04c6f636b416e644461746145524332360841b8152506010019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561173157600080fd5b505afa158015611745573d6000803e3d6000fd5b505050506040513d602081101561175b57600080fd5b505190506000611769611283565b6001600160a01b0316633a2bfd7f60405160200180806a45524332304d6f64756c6560a81b815250600b019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d602081101561180a57600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925084916001600160a01b0388169163dd62ed3e916044808301926020929190829003018186803b15801561185d57600080fd5b505afa158015611871573d6000803e3d6000fd5b505050506040513d602081101561188757600080fd5b505110156118d6576040805162461bcd60e51b81526020600482015260176024820152762737ba1030b63637bbb2b21022a9219918102a37b5b2b760491b604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201526001600160a01b038481166024830152604482018690529151918716916323b872dd916064808201926020929091908290030181600087803b15801561192f57600080fd5b505af1158015611943573d6000803e3d6000fd5b505050506040513d602081101561195957600080fd5b505161199a576040805162461bcd60e51b815260206004820152601e60248201526000805160206156e7833981519152604482015290519081900360640190fd5b6119a2611283565b60408051638a3c110f60e01b815233600482015266071afd498d0000602482015290516001600160a01b039290921691638a3c110f916044808201926020929091908290030181600087803b1580156119fa57600080fd5b505af1158015611a0e573d6000803e3d6000fd5b505050506040513d6020811015611a2457600080fd5b5051611a6d576040805162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da0819d85cc81cd95b9d606a1b604482015290519081900360640190fd5b6040805163b326164d60e01b81526001600160a01b03878116600483015286811660248301526044820186905260006064830181905292516060939185169263b326164d92608480830193919282900301818387803b158015611acf57600080fd5b505af1158015611ae3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611b0c57600080fd5b8101908080516040519392919084600160201b821115611b2b57600080fd5b908301906020820185811115611b4057600080fd5b8251600160201b811182820188101715611b5957600080fd5b82525081516020918201929091019080838360005b83811015611b86578181015183820152602001611b6e565b50505050905090810190601f168015611bb35780820380516001836020036101000a031916815260200191505b506040525050509050611bc4615032565b6001600160a01b0316632231691e611bda611283565b6001600160a01b03166310f01f4e60405160200180806613585a5b9b995d60ca1b8152506007019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611c4f57600080fd5b505af1158015611c63573d6000803e3d6000fd5b505050506040513d6020811015611c7957600080fd5b505160405160e083811b6001600160e01b03191682526001600160a01b038316602483015266071afd498d00006044830181905260006064840181905260a060048501908152600760a48601526613585a5b9b995d60ca1b60c486015260848501938452885160e48601528851929491938993919283926101049091019060208601908083838a5b83811015611d19578181015183820152602001611d01565b50505050905090810190601f168015611d465780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015611d6957600080fd5b505af1158015611d7d573d6000803e3d6000fd5b50505050505050505050565b6402540be40081565b6000611d9c611283565b6001600160a01b0316633a2bfd7f6040516020018080704c6f636b416e644461746145524337323160781b8152506011019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e1957600080fd5b505afa158015611e2d573d6000803e3d6000fd5b505050506040513d6020811015611e4357600080fd5b505190506000611e51611283565b6001600160a01b0316633a2bfd7f60405160200180806b4552433732314d6f64756c6560a01b815250600c019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ec957600080fd5b505afa158015611edd573d6000803e3d6000fd5b505050506040513d6020811015611ef357600080fd5b5051604080516331a9108f60e11b815260048101869052905191925030916001600160a01b03881691636352211e916024808301926020929190829003018186803b158015611f4157600080fd5b505afa158015611f55573d6000803e3d6000fd5b505050506040513d6020811015611f6b57600080fd5b50516001600160a01b031614611fc3576040805162461bcd60e51b81526020600482015260186024820152772737ba1030b63637bbb2b21022a9219b9918902a37b5b2b760411b604482015290519081900360640190fd5b604080516323b872dd60e01b81523060048201526001600160a01b038481166024830152604482018690529151918716916323b872dd9160648082019260009290919082900301818387803b15801561201b57600080fd5b505af115801561202f573d6000803e3d6000fd5b50505050816001600160a01b0316856001600160a01b0316636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561208157600080fd5b505afa158015612095573d6000803e3d6000fd5b505050506040513d60208110156120ab57600080fd5b50516001600160a01b0316146120f6576040805162461bcd60e51b815260206004820152601d6024820152600080516020615729833981519152604482015290519081900360640190fd5b6120fe611283565b60408051638a3c110f60e01b815233600482015266071afd498d0000602482015290516001600160a01b039290921691638a3c110f916044808201926020929091908290030181600087803b15801561215657600080fd5b505af115801561216a573d6000803e3d6000fd5b505050506040513d602081101561218057600080fd5b50516121c9576040805162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da0819d85cc81cd95b9d606a1b604482015290519081900360640190fd5b604080516303c3774560e61b81526001600160a01b03878116600483015286811660248301526044820186905260006064830181905292516060939185169263f0ddd14092608480830193919282900301818387803b158015611acf57600080fd5b6000612235611283565b6001600160a01b0316633a2bfd7f6040516020018080704c6f636b416e644461746145524337323160781b8152506011019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122b257600080fd5b505afa1580156122c6573d6000803e3d6000fd5b505050506040513d60208110156122dc57600080fd5b5051905060006122ea611283565b6001600160a01b0316633a2bfd7f60405160200180806b4552433732314d6f64756c6560a01b815250600c019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561236257600080fd5b505afa158015612376573d6000803e3d6000fd5b505050506040513d602081101561238c57600080fd5b5051604080516331a9108f60e11b815260048101869052905191925030916001600160a01b03881691636352211e916024808301926020929190829003018186803b1580156123da57600080fd5b505afa1580156123ee573d6000803e3d6000fd5b505050506040513d602081101561240457600080fd5b50516001600160a01b03161461245c576040805162461bcd60e51b81526020600482015260186024820152772737ba1030b63637bbb2b21022a9219b9918902a37b5b2b760411b604482015290519081900360640190fd5b604080516323b872dd60e01b81523060048201526001600160a01b038481166024830152604482018690529151918716916323b872dd9160648082019260009290919082900301818387803b1580156124b457600080fd5b505af11580156124c8573d6000803e3d6000fd5b50505050816001600160a01b0316856001600160a01b0316636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561251a57600080fd5b505afa15801561252e573d6000803e3d6000fd5b505050506040513d602081101561254457600080fd5b50516001600160a01b03161461258f576040805162461bcd60e51b815260206004820152601d6024820152600080516020615729833981519152604482015290519081900360640190fd5b604080516303c3774560e61b81526001600160a01b03878116600483015286811660248301526044820186905260006064830181905292516060939185169263f0ddd14092608480830193919282900301818387803b158015610f9c57600080fd5b836000816040516020018082805190602001908083835b602083106126275780518252601f199092019160209182019101612608565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050600061266e611283565b6001600160a01b03166310f01f4e836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156126b357600080fd5b505af11580156126c7573d6000803e3d6000fd5b505050506040513d60208110156126dd57600080fd5b5051604080516613585a5b9b995d60ca1b602082810191909152825180830360070181526027909201909252805191012090915082141561274f5760405162461bcd60e51b815260040180806020018281038252602f815260200180615684602f913960400191505060405180910390fd5b6001600160a01b0381166127aa576040805162461bcd60e51b815260206004820152601f60248201527f496e636f727265637420546f6b656e204d616e61676572206164647265737300604482015290519081900360640190fd5b8466071afd498d00008110156127f5576040805162461bcd60e51b815260206004820152600b60248201526a139d5b1b08105b5bdd5b9d60aa1b604482015290519081900360640190fd5b6127fd611283565b6001600160a01b03166379e9510a33836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561285c57600080fd5b505af1158015612870573d6000803e3d6000fd5b505050506040513d602081101561288657600080fd5b50516128d9576040805162461bcd60e51b815260206004820152601b60248201527f436f756c64206e6f7420726563656976652045544820436c6f6e650000000000604482015290519081900360640190fd5b6128e1615032565b6001600160a01b0316632231691e896128f8611283565b6001600160a01b03166310f01f4e8c6040516020018082805190602001908083835b602083106129395780518252601f19909201916020918201910161291a565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b505050506040513d60208110156129d457600080fd5b50516040516001600160e01b031960e085901b1681526001600160a01b038083166024830152604482018c90528c16606482015260a060048201908152835160a483015283518c928e928d9290918291608482019160c4019060208a019080838360005b83811015612a50578181015183820152602001612a38565b50505050905090810190601f168015612a7d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612ab0578181015183820152602001612a98565b50505050905090810190601f168015612add5780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b15801561123f57600080fd5b6000612b0b611283565b6001600160a01b0316633a2bfd7f60405160200180806f04c6f636b416e644461746145524332360841b8152506010019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b8757600080fd5b505afa158015612b9b573d6000803e3d6000fd5b505050506040513d6020811015612bb157600080fd5b505190506000612bbf611283565b6001600160a01b0316633a2bfd7f60405160200180806a45524332304d6f64756c6560a81b815250600b019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612c3657600080fd5b505afa158015612c4a573d6000803e3d6000fd5b505050506040513d6020811015612c6057600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925084916001600160a01b0389169163dd62ed3e916044808301926020929190829003018186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d6020811015612cdd57600080fd5b50511015612d2c576040805162461bcd60e51b81526020600482015260176024820152762737ba1030b63637bbb2b21022a9219918102a37b5b2b760491b604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201526001600160a01b038481166024830152604482018690529151918816916323b872dd916064808201926020929091908290030181600087803b158015612d8557600080fd5b505af1158015612d99573d6000803e3d6000fd5b505050506040513d6020811015612daf57600080fd5b5051612df0576040805162461bcd60e51b815260206004820152601e60248201526000805160206156e7833981519152604482015290519081900360640190fd5b6040805163b326164d60e01b81526001600160a01b03888116600483015286811660248301526044820186905260016064830152915160609284169163b326164d91608480830192600092919082900301818387803b158015612e5257600080fd5b505af1158015612e66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612e8f57600080fd5b8101908080516040519392919084600160201b821115612eae57600080fd5b908301906020820185811115612ec357600080fd5b8251600160201b811182820188101715612edc57600080fd5b82525081516020918201929091019080838360005b83811015612f09578181015183820152602001612ef1565b50505050905090810190601f168015612f365780820380516001836020036101000a031916815260200191505b506040525050509050612f47615032565b6001600160a01b0316632231691e8a8a612f5f611283565b6001600160a01b03166310f01f4e60405160200180806613585a5b9b995d60ca1b8152506007019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015612fd457600080fd5b505af1158015612fe8573d6000803e3d6000fd5b505050506040513d6020811015612ffe57600080fd5b50516040516001600160e01b031960e086901b1681526001600160a01b038083166024830152600060448301819052908d16606483015260a06004830190815260a4830185905290918d9189918190608481019060c4018989808284376000838201819052601f909101601f191690920185810384528651815286516020918201939188019250908190849084905b838110156130a557818101518382015260200161308d565b50505050905090810190601f1680156130d25780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156130f757600080fd5b505af115801561310b573d6000803e3d6000fd5b50505050505050505050505050565b604080516000815260208101808352815190206002805460609492939192919091019081908390600019610100600183161502011681900480156131955780601f10613173576101008083540402835291820191613195565b820191906000526020600020905b815481529060010190602001808311613181575b50509150506040516020818303038152906040528051906020012014156133275760408051630bbd360b60e21b815260206004820152601b60248201527f736b616c65436f6e6669672e73436861696e2e73636861696e494400000000006044820152905173c033b369416c9ecd8e4a07aafa8b06b4107419e291632ef4d82c916064808301926000929190829003018186803b15801561323557600080fd5b505afa158015613249573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561327257600080fd5b8101908080516040519392919084600160201b82111561329157600080fd5b9083019060208201858111156132a657600080fd5b8251600160201b8111828201881017156132bf57600080fd5b82525081516020918201929091019080838360005b838110156132ec5781810151838201526020016132d4565b50505050905090810190601f1680156133195780820380516001836020036101000a031916815260200191505b50604052505050905061133d565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156133aa5780601f1061337f576101008083540402835291602001916133aa565b820191906000526020600020905b81548152906001019060200180831161338d57829003601f168201915b5050505050905090565b6040805160208101909152600081526133cf848484846125f1565b50505050565b6133cf84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692508591506133b49050565b600080546001600160a01b03166134c15760405163a828a18b60e01b8152602060048201908152602d6024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190615657823960400191505060206040518083038186803b15801561348e57600080fd5b505afa1580156134a2573d6000803e3d6000fd5b505050506040513d60208110156134b857600080fd5b5051905061133d565b506000546001600160a01b031690565b60006134db611283565b6001600160a01b0316633a2bfd7f60405160200180806f04c6f636b416e644461746145524332360841b8152506010019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561355757600080fd5b505afa15801561356b573d6000803e3d6000fd5b505050506040513d602081101561358157600080fd5b50519050600061358f611283565b6001600160a01b0316633a2bfd7f60405160200180806a45524332304d6f64756c6560a81b815250600b019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561360657600080fd5b505afa15801561361a573d6000803e3d6000fd5b505050506040513d602081101561363057600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925084916001600160a01b0389169163dd62ed3e916044808301926020929190829003018186803b15801561368357600080fd5b505afa158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b505110156136fc576040805162461bcd60e51b81526020600482015260176024820152762737ba1030b63637bbb2b21022a9219918102a37b5b2b760491b604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201526001600160a01b038481166024830152604482018690529151918816916323b872dd916064808201926020929091908290030181600087803b15801561375557600080fd5b505af1158015613769573d6000803e3d6000fd5b505050506040513d602081101561377f57600080fd5b50516137c0576040805162461bcd60e51b815260206004820152601e60248201526000805160206156e7833981519152604482015290519081900360640190fd5b6137c8611283565b60408051638a3c110f60e01b815233600482015266071afd498d0000602482015290516001600160a01b039290921691638a3c110f916044808201926020929091908290030181600087803b15801561382057600080fd5b505af1158015613834573d6000803e3d6000fd5b505050506040513d602081101561384a57600080fd5b5051613893576040805162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da0819d85cc81cd95b9d606a1b604482015290519081900360640190fd5b6040805163b326164d60e01b81526001600160a01b03888116600483015286811660248301526044820186905260016064830152915160609284169163b326164d91608480830192600092919082900301818387803b1580156138f557600080fd5b505af1158015613909573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561393257600080fd5b8101908080516040519392919084600160201b82111561395157600080fd5b90830190602082018581111561396657600080fd5b8251600160201b81118282018810171561397f57600080fd5b82525081516020918201929091019080838360005b838110156139ac578181015183820152602001613994565b50505050905090810190601f1680156139d95780820380516001836020036101000a031916815260200191505b5060405250505090506139ea615032565b6001600160a01b0316632231691e613a00611283565b6001600160a01b03166310f01f4e60405160200180806613585a5b9b995d60ca1b8152506007019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b505160405160e083811b6001600160e01b03191682526001600160a01b03808416602484015266071afd498d000060448401819052908c16606484015260a060048401908152600760a48501526613585a5b9b995d60ca1b60c485015260848401928352875160e4850152875191938d93899383926101040190602086019080838360005b83811015613b3c578181015183820152602001613b24565b50505050905090810190601f168015613b695780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015613b8c57600080fd5b505af1158015613ba0573d6000803e3d6000fd5b5050505050505050505050565b613bb5615032565b6001600160a01b0316336001600160a01b031614613c09576040805162461bcd60e51b815260206004820152600c60248201526b2737ba10309039b2b73232b960a11b604482015290519081900360640190fd5b60008686604051602001808383808284378083019250505092505050604051602081830303815290604052805190602001209050613c4561311a565b6040516020018082805190602001908083835b60208310613c775780518252601f199092019160209182019101613c58565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120811480613d435750613cc2611283565b6001600160a01b03166310f01f4e826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015613d0757600080fd5b505af1158015613d1b573d6000803e3d6000fd5b505050506040513d6020811015613d3157600080fd5b50516001600160a01b03898116911614155b15613e49577f7cd268b1bc6debb9029d4fbd617c165d4edbd7a19c96a3e7d510734fe936a9548888888888888860405180886001600160a01b03166001600160a01b0316815260200180602001866001600160a01b03166001600160a01b03168152602001858152602001806020018060200184810384528a8a82818152602001925080828437600083820152601f01601f191690910185810384528681526020019050868680828437600083820152601f01601f19169091019485039091525050601b8252507f526563656976657220636861696e20697320696e636f727265637400000000006020820152604080519182900301975095505050505050a1506147bc565b81613f3e577f7cd268b1bc6debb9029d4fbd617c165d4edbd7a19c96a3e7d510734fe936a9548888888888888860405180886001600160a01b03166001600160a01b0316815260200180602001866001600160a01b03166001600160a01b03168152602001858152602001806020018060200184810384528a8a82818152602001925080828437600083820152601f01601f191690910185810384528681526020019050868680828437600083820152601f01601f19169091019485039091525050600c8252506b496e76616c6964206461746160a01b6020820152604080519182900301975095505050505050a1506147bc565b6000613f7f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506154b292505050565b90506000816004811115613f8f57fe5b14156140bb576001600160a01b038616613fe5576040805162461bcd60e51b815260206004820152601260248201527124b731b7b93932b1ba103932b1b2b4bb32b960711b604482015290519081900360640190fd5b613fed611283565b6001600160a01b03166349dcbc5e87876040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561404c57600080fd5b505af1158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516140b4576040805162461bcd60e51b8152602060048201526008602482015267139bdd0814d95b9d60c21b604482015290519081900360640190fd5b50506147bc565b60018160048111156140c957fe5b1480156140dd57506001600160a01b038616155b80614106575060038160048111156140f157fe5b14801561410657506001600160a01b03861615155b1561443e576000614115611283565b6001600160a01b0316633a2bfd7f60405160200180806a45524332304d6f64756c6560a81b815250600b019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561418c57600080fd5b505afa1580156141a0573d6000803e3d6000fd5b505050506040513d60208110156141b657600080fd5b5051604080516331f92ca360e21b81526001600160a01b038a811660048301908152602483019384526044830189905293945084169263c7e4b28c928b928a928a929091606401848480828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b15801561423a57600080fd5b505af115801561424e573d6000803e3d6000fd5b505050506040513d602081101561426457600080fd5b50516142ae576040805162461bcd60e51b815260206004820152601460248201527304661696c656420746f2073656e642045524332360641b604482015290519081900360640190fd5b6000816001600160a01b031663067887348988886040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561433a57600080fd5b505afa15801561434e573d6000803e3d6000fd5b505050506040513d602081101561436457600080fd5b50519050614370611283565b6001600160a01b03166349dcbc5e82896040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156143cf57600080fd5b505af11580156143e3573d6000803e3d6000fd5b505050506040513d60208110156143f957600080fd5b5051614437576040805162461bcd60e51b8152602060048201526008602482015267139bdd0814d95b9d60c21b604482015290519081900360640190fd5b50506116a0565b600281600481111561444c57fe5b14801561446057506001600160a01b038616155b806144895750600481600481111561447457fe5b14801561448957506001600160a01b03861615155b156116a0576000614498611283565b6001600160a01b0316633a2bfd7f60405160200180806b4552433732314d6f64756c6560a01b815250600c019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561451057600080fd5b505afa158015614524573d6000803e3d6000fd5b505050506040513d602081101561453a57600080fd5b50516040805163ca6c661960e01b81526001600160a01b038a811660048301908152602483019384526044830189905293945084169263ca6c6619928b928a928a929091606401848480828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b1580156145be57600080fd5b505af11580156145d2573d6000803e3d6000fd5b505050506040513d60208110156145e857600080fd5b5051614633576040805162461bcd60e51b81526020600482015260156024820152744661696c656420746f2073656e642045524337323160581b604482015290519081900360640190fd5b6000816001600160a01b031663067887348988886040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b1580156146bf57600080fd5b505afa1580156146d3573d6000803e3d6000fd5b505050506040513d60208110156146e957600080fd5b505190506146f5611283565b6001600160a01b03166349dcbc5e82896040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561475457600080fd5b505af1158015614768573d6000803e3d6000fd5b505050506040513d602081101561477e57600080fd5b5051613ba0576040805162461bcd60e51b8152602060048201526008602482015267139bdd0814d95b9d60c21b604482015290519081900360640190fd5b50505050505050565b60006147cf611283565b6001600160a01b0316633a2bfd7f6040516020018080704c6f636b416e644461746145524337323160781b8152506011019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561484c57600080fd5b505afa158015614860573d6000803e3d6000fd5b505050506040513d602081101561487657600080fd5b505190506000614884611283565b6001600160a01b0316633a2bfd7f60405160200180806b4552433732314d6f64756c6560a01b815250600c019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156148fc57600080fd5b505afa158015614910573d6000803e3d6000fd5b505050506040513d602081101561492657600080fd5b5051604080516331a9108f60e11b815260048101869052905191925030916001600160a01b03891691636352211e916024808301926020929190829003018186803b15801561497457600080fd5b505afa158015614988573d6000803e3d6000fd5b505050506040513d602081101561499e57600080fd5b50516001600160a01b0316146149f6576040805162461bcd60e51b81526020600482015260186024820152772737ba1030b63637bbb2b21022a9219b9918902a37b5b2b760411b604482015290519081900360640190fd5b604080516323b872dd60e01b81523060048201526001600160a01b038481166024830152604482018690529151918816916323b872dd9160648082019260009290919082900301818387803b158015614a4e57600080fd5b505af1158015614a62573d6000803e3d6000fd5b50505050816001600160a01b0316866001600160a01b0316636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015614ab457600080fd5b505afa158015614ac8573d6000803e3d6000fd5b505050506040513d6020811015614ade57600080fd5b50516001600160a01b031614614b29576040805162461bcd60e51b815260206004820152601d6024820152600080516020615729833981519152604482015290519081900360640190fd5b614b31611283565b60408051638a3c110f60e01b815233600482015266071afd498d0000602482015290516001600160a01b039290921691638a3c110f916044808201926020929091908290030181600087803b158015614b8957600080fd5b505af1158015614b9d573d6000803e3d6000fd5b505050506040513d6020811015614bb357600080fd5b5051614bfc576040805162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da0819d85cc81cd95b9d606a1b604482015290519081900360640190fd5b604080516303c3774560e61b81526001600160a01b03888116600483015286811660248301526044820186905260016064830152915160609284169163f0ddd14091608480830192600092919082900301818387803b1580156138f557600080fd5b6000614c68611283565b6001600160a01b0316633a2bfd7f6040516020018080704c6f636b416e644461746145524337323160781b8152506011019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015614ce557600080fd5b505afa158015614cf9573d6000803e3d6000fd5b505050506040513d6020811015614d0f57600080fd5b505190506000614d1d611283565b6001600160a01b0316633a2bfd7f60405160200180806b4552433732314d6f64756c6560a01b815250600c019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015614d9557600080fd5b505afa158015614da9573d6000803e3d6000fd5b505050506040513d6020811015614dbf57600080fd5b5051604080516331a9108f60e11b815260048101869052905191925030916001600160a01b03891691636352211e916024808301926020929190829003018186803b158015614e0d57600080fd5b505afa158015614e21573d6000803e3d6000fd5b505050506040513d6020811015614e3757600080fd5b50516001600160a01b031614614e8f576040805162461bcd60e51b81526020600482015260186024820152772737ba1030b63637bbb2b21022a9219b9918902a37b5b2b760411b604482015290519081900360640190fd5b604080516323b872dd60e01b81523060048201526001600160a01b038481166024830152604482018690529151918816916323b872dd9160648082019260009290919082900301818387803b158015614ee757600080fd5b505af1158015614efb573d6000803e3d6000fd5b50505050816001600160a01b0316866001600160a01b0316636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015614f4d57600080fd5b505afa158015614f61573d6000803e3d6000fd5b505050506040513d6020811015614f7757600080fd5b50516001600160a01b031614614fc2576040805162461bcd60e51b815260206004820152601d6024820152600080516020615729833981519152604482015290519081900360640190fd5b604080516303c3774560e61b81526001600160a01b03888116600483015286811660248301526044820186905260016064830152915160609284169163f0ddd14091608480830192600092919082900301818387803b158015612e5257600080fd5b61502e828261522e565b5050565b6003546000906001600160a01b03166150aa5760405163a828a18b60e01b815260206004820190815260346024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b92918291604401906156b3823960400191505060206040518083038186803b15801561348e57600080fd5b506003546001600160a01b031690565b6150c3816150c6565b50565b6150c3338261524d565b60006150da611283565b6001600160a01b0316631ef7d10d336040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561513157600080fd5b505af1158015615145573d6000803e3d6000fd5b505050506040513d602081101561515b57600080fd5b50519050615167611283565b6001600160a01b03166349dcbc5e33836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156151c657600080fd5b505af11580156151da573d6000803e3d6000fd5b505050506040513d60208110156151f057600080fd5b50516150c3576040805162461bcd60e51b8152602060048201526008602482015267139bdd081cd95b9d60c21b604482015290519081900360640190fd5b604080516020810190915260008152615248838383611340565b505050565b8066071afd498d0000811015615298576040805162461bcd60e51b815260206004820152600b60248201526a139d5b1b08105b5bdd5b9d60aa1b604482015290519081900360640190fd5b6152a0611283565b6001600160a01b03166379e9510a33836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156152ff57600080fd5b505af1158015615313573d6000803e3d6000fd5b505050506040513d602081101561532957600080fd5b505161537c576040805162461bcd60e51b815260206004820152601b60248201527f436f756c64206e6f7420726563656976652045544820436c6f6e650000000000604482015290519081900360640190fd5b615384611283565b6001600160a01b0316630fab4ca884846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156153e357600080fd5b505af11580156147bc573d6000803e3d6000fd5b6153ff613418565b6001600160a01b0316336001600160a01b03161461544e5760405162461bcd60e51b81526004018080602001828103825260228152602001806157076022913960400191505060405180910390fd5b6001600160a01b0381166154a9576040805162461bcd60e51b815260206004820152601760248201527f4e6577206f776e65722068617320746f20626520736574000000000000000000604482015290519081900360640190fd5b6150c381611261565b6020810151600090600160f81b6001600160f81b0319821614806154e35750600360f81b6001600160f81b03198216145b806154fb5750600560f81b6001600160f81b03198216145b806155135750601360f81b6001600160f81b03198216145b8061552b5750601560f81b6001600160f81b03198216145b61557c576040805162461bcd60e51b815260206004820181905260248201527f4f7065726174696f6e2074797065206973206e6f74206964656e746966696564604482015290519081900360640190fd5b600160f81b6001600160f81b03198216141561559c57600091505061561e565b600360f81b6001600160f81b0319821614156155bc57600191505061561e565b600560f81b6001600160f81b0319821614156155dc57600291505061561e565b601360f81b6001600160f81b0319821614156155fc57600391505061561e565b601560f81b6001600160f81b03198216141561561c57600491505061561e565b505b91905056fe736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6c6f636b416e644461746141646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6f776e657241646472657373546869732066756e6374696f6e206973206e6f7420666f72207472616e73666572696e6720746f204d61696e6e6574736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6d65737361676550726f787941646472657373436f756c64206e6f74207472616e7366657220455243323020546f6b656e00004f6e6c79206f776e65722063616e20657865637574652074686973206d6574686f64446964206e6f74207472616e736665722045524337323120746f6b656e000000a265627a7a72315820b9646564f57892a62d76410592eca28c018c623b9499b047a2f8528411ae39f464736f6c634300050f0032", + "lock_and_data_for_schain_erc20_address": "0xc7085eb0ba5c2d449e80c22d6da8f0edbb86dd82", + "lock_and_data_for_schain_erc20_abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_lockAndDataAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "ReceivedERC20", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "SendedERC20", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "erc20Mapper", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "erc20Tokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getLockAndDataAddress", + "outputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "sendERC20", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "receiveERC20", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "addressERC20", + "type": "address" + }, + { + "internalType": "uint256", + "name": "contractPosition", + "type": "uint256" + } + ], + "name": "addERC20Token", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "lock_and_data_for_schain_erc20_bytecode": "0x608060405234801561001057600080fd5b50604051610cd1380380610cd18339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317909155600180546001600160a01b0390931692909116919091179055610c5f806100726000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638f975a64116100665780638f975a6414610124578063aed4aab61461016e578063ba674e061461019a578063e17640f4146101c6578063f2fde38b146101e357610093565b806313af4035146100985780631b74e794146100c0578063822fa9cf146100e4578063893d20e81461011c575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b0316610209565b005b6100c861022b565b604080516001600160a01b039092168252519081900360200190f35b61010a600480360360208110156100fa57600080fd5b50356001600160a01b03166102e8565b60408051918252519081900360200190f35b6100c86102fa565b61015a6004803603606081101561013a57600080fd5b506001600160a01b038135811691602081013590911690604001356103b3565b604080519115158252519081900360200190f35b61015a6004803603604081101561018457600080fd5b506001600160a01b038135169060200135610646565b6100be600480360360408110156101b057600080fd5b506001600160a01b03813516906020013561091a565b6100c8600480360360208110156101dc57600080fd5b5035610acf565b6100be600480360360208110156101f957600080fd5b50356001600160a01b0316610aea565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546000906001600160a01b03161561025157506001546001600160a01b03166102e5565b60405163a828a18b60e01b815260206004820190815260336024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190610ba9823960400191505060206040518083038186803b1580156102b657600080fd5b505afa1580156102ca573d6000803e3d6000fd5b505050506040513d60208110156102e057600080fd5b505190505b90565b60036020526000908152604090205481565b600080546001600160a01b03166103a35760405163a828a18b60e01b8152602060048201908152602d6024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190610bdc823960400191505060206040518083038186803b15801561037057600080fd5b505afa158015610384573d6000803e3d6000fd5b505050506040513d602081101561039a57600080fd5b505190506102e5565b506000546001600160a01b031690565b604080518082018252600b8082526a45524332304d6f64756c6560a81b6020808401918252600154945160009533946001600160a01b0390911693633a2bfd7f93879301918291908083835b6020831061041e5780518252601f1990920191602091820191016103ff565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561048d57600080fd5b505afa1580156104a1573d6000803e3d6000fd5b505050506040513d60208110156104b757600080fd5b50516001600160a01b031614806104dd5750336104d26102fa565b6001600160a01b0316145b61052a576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b846001600160a01b03166340c10f1985856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561058a57600080fd5b505af115801561059e573d6000803e3d6000fd5b505050506040513d60208110156105b457600080fd5b5051610607576040805162461bcd60e51b815260206004820152601a60248201527f436f756c64206e6f74206d696e7420455243323020546f6b656e000000000000604482015290519081900360640190fd5b604080516001815290517f346f76ac6a7581e8904eed70a6c9fc79091c252290525ebc1e839d6efaff0dcf9181900360200190a1506001949350505050565b604080518082018252600b8082526a45524332304d6f64756c6560a81b6020808401918252600154945160009533946001600160a01b0390911693633a2bfd7f93879301918291908083835b602083106106b15780518252601f199092019160209182019101610692565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561072057600080fd5b505afa158015610734573d6000803e3d6000fd5b505050506040513d602081101561074a57600080fd5b50516001600160a01b031614806107705750336107656102fa565b6001600160a01b0316145b6107bd576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b604080516370a0823160e01b8152306004820152905184916001600160a01b038716916370a0823191602480820192602092909190829003018186803b15801561080657600080fd5b505afa15801561081a573d6000803e3d6000fd5b505050506040513d602081101561083057600080fd5b5051101561087d576040805162461bcd60e51b8152602060048201526015602482015274105b5bdd5b9d081b9bdd081d1c985b9cd9995c9959605a1b604482015290519081900360640190fd5b836001600160a01b03166342966c68846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b5050604080516001815290517f9a350e4ed2cc675c5ebec9f039fab5a919b070be4b81e7b10228496d4f93cdd19350908190036020019150a15060019392505050565b604080518082018252600b8082526a45524332304d6f64756c6560a81b60208084019182526001549451939433946001600160a01b0390911693633a2bfd7f938793929092019182918083835b602083106109865780518252601f199092019160209182019101610967565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156109f557600080fd5b505afa158015610a09573d6000803e3d6000fd5b505050506040513d6020811015610a1f57600080fd5b50516001600160a01b03161480610a45575033610a3a6102fa565b6001600160a01b0316145b610a92576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b50600081815260026020908152604080832080546001600160a01b039096166001600160a01b031990961686179055938252600390529190912055565b6002602052600090815260409020546001600160a01b031681565b610af26102fa565b6001600160a01b0316336001600160a01b031614610b415760405162461bcd60e51b8152600401808060200182810382526022815260200180610c096022913960400191505060405180910390fd5b6001600160a01b038116610b9c576040805162461bcd60e51b815260206004820152601760248201527f4e6577206f776e65722068617320746f20626520736574000000000000000000604482015290519081900360640190fd5b610ba581610209565b5056fe736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6c6f636b416e644461746141646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6f776e6572416464726573734f6e6c79206f776e65722063616e20657865637574652074686973206d6574686f64a265627a7a72315820b7031406a3b336661839159e00452c27ce55603c85fd4805547b1ef9a3e2c51664736f6c634300050f0032", + "erc20_module_for_schain_address": "0xc30516c1dedfa91a948349209da6d6b1c8868ed7", + "erc20_module_for_schain_abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "newLockAndDataAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "contractPosition", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "tokenThere", + "type": "address" + } + ], + "name": "ERC20TokenCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "contractPosition", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "tokenThere", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ERC20TokenReceived", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "getLockAndDataAddress", + "outputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isRAW", + "type": "bool" + } + ], + "name": "receiveERC20", + "outputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "sendERC20", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "getReceiver", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + } + ], + "erc20_module_for_schain_bytecode": "0x608060405234801561001057600080fd5b506040516117843803806117848339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317909155600180546001600160a01b0390931692909116919091179055611712806100726000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063893d20e81161005b578063893d20e81461014c578063b326164d14610154578063c7e4b28c14610207578063f2fde38b146102995761007d565b8063067887341461008257806313af40351461011c5780631b74e79414610144575b600080fd5b6101006004803603604081101561009857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100c257600080fd5b8201836020820111156100d457600080fd5b803590602001918460018302840111600160201b831117156100f557600080fd5b5090925090506102bf565b604080516001600160a01b039092168252519081900360200190f35b6101426004803603602081101561013257600080fd5b50356001600160a01b031661036b565b005b61010061038d565b61010061044a565b6101926004803603608081101561016a57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515610503565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cc5781810151838201526020016101b4565b50505050905090810190601f1680156101f95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102856004803603604081101561021d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561024757600080fd5b82018360208201111561025957600080fd5b803590602001918460018302840111600160201b8311171561027a57600080fd5b50909250905061091d565b604080519115158252519081900360200190f35b610142600480360360208110156102af57600080fd5b50356001600160a01b03166110b4565b600080806001600160a01b03861661031d5761031085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061117292505050565b9094509092509050610362565b61035c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061118d92505050565b90935090505b50509392505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546000906001600160a01b0316156103b357506001546001600160a01b0316610447565b60405163a828a18b60e01b815260206004820190815260336024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b929182916044019061165c823960400191505060206040518083038186803b15801561041857600080fd5b505afa15801561042c573d6000803e3d6000fd5b505050506040513d602081101561044257600080fd5b505190505b90565b600080546001600160a01b03166104f35760405163a828a18b60e01b8152602060048201908152602d6024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b929182916044019061168f823960400191505060206040518083038186803b1580156104c057600080fd5b505afa1580156104d4573d6000803e3d6000fd5b505050506040513d60208110156104ea57600080fd5b50519050610447565b506000546001600160a01b031690565b604080518082018252600c8082526b2a37b5b2b726b0b730b3b2b960a11b6020808401918252600154945160609533946001600160a01b0390911693633a2bfd7f93879301918291908083835b6020831061056f5780518252601f199092019160209182019101610550565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156105de57600080fd5b505afa1580156105f2573d6000803e3d6000fd5b505050506040513d602081101561060857600080fd5b50516001600160a01b0316148061062e57503361062361044a565b6001600160a01b0316145b61067b576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b600061068561038d565b6001600160a01b0316633a2bfd7f60405160200180806f04c6f636b416e644461746145524332360841b8152506010019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561070157600080fd5b505afa158015610715573d6000803e3d6000fd5b505050506040513d602081101561072b57600080fd5b5051905083610901576000816001600160a01b031663822fa9cf896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b505190508061080e576040805162461bcd60e51b815260206004820152601c60248201527f4e6f74206578697374696e67204552432d323020636f6e747261637400000000604482015290519081900360640190fd5b816001600160a01b031663aed4aab689886040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050506040513d602081101561089857600080fd5b50516108eb576040805162461bcd60e51b815260206004820152601d60248201527f436f756e64206e6f74207265636569766520455243323020546f6b656e000000604482015290519081900360640190fd5b6108f7888289896111a1565b9350610914915050565b61090b86866115fd565b92506109149050565b50949350505050565b604080518082018252600c8082526b2a37b5b2b726b0b730b3b2b960a11b6020808401918252600154945160009533946001600160a01b0390911693633a2bfd7f93879301918291908083835b602083106109895780518252601f19909201916020918201910161096a565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156109f857600080fd5b505afa158015610a0c573d6000803e3d6000fd5b505050506040513d6020811015610a2257600080fd5b50516001600160a01b03161480610a48575033610a3d61044a565b6001600160a01b0316145b610a95576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b6000610a9f61038d565b6001600160a01b0316633a2bfd7f60405160200180806f04c6f636b416e644461746145524332360841b8152506010019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b1b57600080fd5b505afa158015610b2f573d6000803e3d6000fd5b505050506040513d6020811015610b4557600080fd5b5051905060008080806001600160a01b038a16610f9057610b9b89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061117292505050565b6040805163385d903d60e21b815260048101859052905193975091945092506001600160a01b0387169163e17640f4916024808201926020929091908290030181600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b505050506040513d6020811015610c1757600080fd5b505192506001600160a01b038316610e38576000610c3361038d565b6001600160a01b0316633a2bfd7f60405160200180806b546f6b656e466163746f727960a01b815250600c019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610cab57600080fd5b505afa158015610cbf573d6000803e3d6000fd5b505050506040513d6020811015610cd557600080fd5b505160405163aaba370960e01b8152602060048201908152602482018c90529192506001600160a01b0383169163aaba3709918d918d918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b158015610d4d57600080fd5b505af1158015610d61573d6000803e3d6000fd5b505050506040513d6020811015610d7757600080fd5b5051604080516001600160a01b0383168152905191955086917fcf6bc30ff9ed8244e644aed71ee33bf124d82b12ec021b7ecb95810357eec48b9181900360200190a2856001600160a01b031663ba674e0685876040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e1a57600080fd5b505af1158015610e2e573d6000803e3d6000fd5b5050505050610f48565b6000610e798a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164392505050565b9050836001600160a01b03166372ba07586040518163ffffffff1660e01b815260040160206040518083038186803b158015610eb457600080fd5b505afa158015610ec8573d6000803e3d6000fd5b505050506040513d6020811015610ede57600080fd5b5051811115610f4657836001600160a01b031663d82c0b85826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b505050505b505b604080516001600160a01b038516815260208101839052815186927f5a3664d33356d96a7b2648538b35efae4142fe26c16dd9d73a3b2d9172075874928290030190a261101f565b610fcf89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061118d92505050565b604080516001600160a01b038e1681526020810183905281518e97509395509193506000927f5a3664d33356d96a7b2648538b35efae4142fe26c16dd9d73a3b2d91720758749281900390910190a25b604080516323e5d69960e21b81526001600160a01b038581166004830152848116602483015260448201849052915191871691638f975a64916064808201926020929091908290030181600087803b15801561107a57600080fd5b505af115801561108e573d6000803e3d6000fd5b505050506040513d60208110156110a457600080fd5b50519a9950505050505050505050565b6110bc61044a565b6001600160a01b0316336001600160a01b03161461110b5760405162461bcd60e51b81526004018080602001828103825260228152602001806116bc6022913960400191505060405180910390fd5b6001600160a01b038116611166576040805162461bcd60e51b815260206004820152601760248201527f4e6577206f776e65722068617320746f20626520736574000000000000000000604482015290519081900360640190fd5b61116f8161036b565b50565b60218101516041820151606190920151909260609290921c91565b602181015160419091015160609190911c91565b606080856001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561121a57600080fd5b8101908080516040519392919084600160201b82111561123957600080fd5b90830190602082018581111561124e57600080fd5b8251600160201b81118282018810171561126757600080fd5b82525081516020918201929091019080838360005b8381101561129457818101518382015260200161127c565b50505050905090810190601f1680156112c15780820380516001836020036101000a031916815260200191505b5060405250505090506000866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561130557600080fd5b505afa158015611319573d6000803e3d6000fd5b505050506040513d602081101561132f57600080fd5b5051604080516395d89b4160e01b815290519192506060916001600160a01b038a16916395d89b41916004808301926000929190829003018186803b15801561137757600080fd5b505afa15801561138b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156113b457600080fd5b8101908080516040519392919084600160201b8211156113d357600080fd5b9083019060208201858111156113e857600080fd5b8251600160201b81118282018810171561140157600080fd5b82525081516020918201929091019080838360005b8381101561142e578181015183820152602001611416565b50505050905090810190601f16801561145b5780820380516001836020036101000a031916815260200191505b5060405250505090506000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561149f57600080fd5b505afa1580156114b3573d6000803e3d6000fd5b505050506040513d60208110156114c957600080fd5b505184518351604051600360f81b6020828101828152602184018f90526bffffffffffffffffffffffff1960608f901b1660418501819052606185018e9052608185018790528b5197985092968f9693958e958d9491938c938e938d9360a10191908801908083835b602083106115515780518252601f199092019160209182019101611532565b51815160209384036101000a60001901801990921691161790529201878152865190830192870191508083835b6020831061159d5780518252601f19909201916020918201910161157e565b6001836020036101000a0380198251168184511680821785525050505050509050018360ff1660ff1660f81b81526001018281526020019a5050505050505050505050604051602081830303815290604052945050505050949350505050565b60408051601360f81b602082015260609390931b6bffffffffffffffffffffffff1916602184015260418084019290925280518084039092018252606190920190915290565b608181015180820160a1015101810160c2015191905056fe736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6c6f636b416e644461746141646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6f776e6572416464726573734f6e6c79206f776e65722063616e20657865637574652074686973206d6574686f64a265627a7a72315820ece2e236c8c9ac6f4ac27108a56230e4a4ae52d1354f2c64c50054f112cef7a064736f6c634300050f0032", + "lock_and_data_for_schain_erc721_address": "0x97438fdfbdcc4ccc533ea874bfeb71f4098585ab", + "lock_and_data_for_schain_erc721_abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_lockAndDataAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "ReceiveERC721", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "SendERC721", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "erc721Mapper", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "erc721Tokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getLockAndDataAddress", + "outputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "sendERC721", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "receiveERC721", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "addressERC721", + "type": "address" + }, + { + "internalType": "uint256", + "name": "contractPosition", + "type": "uint256" + } + ], + "name": "addERC721Token", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "lock_and_data_for_schain_erc721_bytecode": "0x608060405234801561001057600080fd5b50604051610ce0380380610ce08339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317909155600180546001600160a01b0390931692909116919091179055610c6e806100726000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b72ac8ea11610066578063b72ac8ea1461012c578063ed907cae14610162578063f2fde38b1461017f578063fb764e02146101a5578063fcd4ae17146101d157610093565b806313af4035146100985780631af2a57c146100c05780631b74e79414610100578063893d20e814610124575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b0316610209565b005b6100ec600480360360408110156100d657600080fd5b506001600160a01b03813516906020013561022b565b604080519115158252519081900360200190f35b61010861050c565b604080516001600160a01b039092168252519081900360200190f35b6101086105c9565b6100ec6004803603606081101561014257600080fd5b506001600160a01b03813581169160208101359091169060400135610682565b6101086004803603602081101561017857600080fd5b5035610916565b6100be6004803603602081101561019557600080fd5b50356001600160a01b0316610931565b6100be600480360360408110156101bb57600080fd5b506001600160a01b0381351690602001356109ef565b6101f7600480360360208110156101e757600080fd5b50356001600160a01b0316610ba5565b60408051918252519081900360200190f35b600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600c8082526b4552433732314d6f64756c6560a01b6020808401918252600154945160009533946001600160a01b0390911693633a2bfd7f93879301918291908083835b602083106102975780518252601f199092019160209182019101610278565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561030657600080fd5b505afa15801561031a573d6000803e3d6000fd5b505050506040513d602081101561033057600080fd5b50516001600160a01b0316148061035657503361034b6105c9565b6001600160a01b0316145b6103a3576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b306001600160a01b0316846001600160a01b0316636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156103f157600080fd5b505afa158015610405573d6000803e3d6000fd5b505050506040513d602081101561041b57600080fd5b50516001600160a01b03161461046f576040805162461bcd60e51b8152602060048201526014602482015273151bdad95b881b9bdd081d1c985b9cd9995c995960621b604482015290519081900360640190fd5b836001600160a01b03166342966c68846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b5050604080516001815290517f6078e6c647edfe0d3e728b6eecd844481c9ae5b1dffc3c03004955b620d2cad39350908190036020019150a15060019392505050565b6001546000906001600160a01b03161561053257506001546001600160a01b03166105c6565b60405163a828a18b60e01b815260206004820190815260336024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190610bb8823960400191505060206040518083038186803b15801561059757600080fd5b505afa1580156105ab573d6000803e3d6000fd5b505050506040513d60208110156105c157600080fd5b505190505b90565b600080546001600160a01b03166106725760405163a828a18b60e01b8152602060048201908152602d6024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b9291829160440190610beb823960400191505060206040518083038186803b15801561063f57600080fd5b505afa158015610653573d6000803e3d6000fd5b505050506040513d602081101561066957600080fd5b505190506105c6565b506000546001600160a01b031690565b604080518082018252600c8082526b4552433732314d6f64756c6560a01b6020808401918252600154945160009533946001600160a01b0390911693633a2bfd7f93879301918291908083835b602083106106ee5780518252601f1990920191602091820191016106cf565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561075d57600080fd5b505afa158015610771573d6000803e3d6000fd5b505050506040513d602081101561078757600080fd5b50516001600160a01b031614806107ad5750336107a26105c9565b6001600160a01b0316145b6107fa576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b846001600160a01b03166340c10f1985856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561085a57600080fd5b505af115801561086e573d6000803e3d6000fd5b505050506040513d602081101561088457600080fd5b50516108d7576040805162461bcd60e51b815260206004820152601b60248201527f436f756c64206e6f74206d696e742045524337323120546f6b656e0000000000604482015290519081900360640190fd5b604080516001815290517f2895ee683e52f8957c9167d31f78502842d7bb96e38afd2d10eb9e098455d2c19181900360200190a1506001949350505050565b6002602052600090815260409020546001600160a01b031681565b6109396105c9565b6001600160a01b0316336001600160a01b0316146109885760405162461bcd60e51b8152600401808060200182810382526022815260200180610c186022913960400191505060405180910390fd5b6001600160a01b0381166109e3576040805162461bcd60e51b815260206004820152601760248201527f4e6577206f776e65722068617320746f20626520736574000000000000000000604482015290519081900360640190fd5b6109ec81610209565b50565b604080518082018252600c8082526b4552433732314d6f64756c6560a01b60208084019182526001549451939433946001600160a01b0390911693633a2bfd7f938793929092019182918083835b60208310610a5c5780518252601f199092019160209182019101610a3d565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b50516001600160a01b03161480610b1b575033610b106105c9565b6001600160a01b0316145b610b68576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b50600081815260026020908152604080832080546001600160a01b039096166001600160a01b031990961686179055938252600390529190912055565b6003602052600090815260409020548156fe736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6c6f636b416e644461746141646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6f776e6572416464726573734f6e6c79206f776e65722063616e20657865637574652074686973206d6574686f64a265627a7a72315820bc901f62149e4396296de6449cdd12b9f692d246aad6ce871c054f8e1ba0228d64736f6c634300050f0032", + "erc721_module_for_schain_address": "0xc1b336da9058efd1e9f5636a70bfe2ec17e15abb", + "erc721_module_for_schain_abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "newLockAndDataAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "contractPosition", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } + ], + "name": "ERC721TokenCreated", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "getLockAndDataAddress", + "outputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "contractHere", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isRAW", + "type": "bool" + } + ], + "name": "receiveERC721", + "outputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "sendERC721", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "getReceiver", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + } + ], + "erc721_module_for_schain_bytecode": "0x608060405234801561001057600080fd5b506040516114e23803806114e28339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317909155600180546001600160a01b0390931692909116919091179055611470806100726000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063893d20e81161005b578063893d20e81461014c578063ca6c661914610154578063f0ddd140146101e6578063f2fde38b146102995761007d565b8063067887341461008257806313af40351461011c5780631b74e79414610144575b600080fd5b6101006004803603604081101561009857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100c257600080fd5b8201836020820111156100d457600080fd5b803590602001918460018302840111600160201b831117156100f557600080fd5b5090925090506102bf565b604080516001600160a01b039092168252519081900360200190f35b6101426004803603602081101561013257600080fd5b50356001600160a01b031661036b565b005b61010061038d565b61010061044a565b6101d26004803603604081101561016a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561019457600080fd5b8201836020820111156101a657600080fd5b803590602001918460018302840111600160201b831117156101c757600080fd5b509092509050610503565b604080519115158252519081900360200190f35b610224600480360360808110156101fc57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515610afd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025e578181015183820152602001610246565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610142600480360360208110156102af57600080fd5b50356001600160a01b0316610f18565b600080806001600160a01b03861661031d5761031085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fd692505050565b9094509092509050610362565b61035c85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ff192505050565b90935090505b50509392505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546000906001600160a01b0316156103b357506001546001600160a01b0316610447565b60405163a828a18b60e01b815260206004820190815260336024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b92918291604401906113ba823960400191505060206040518083038186803b15801561041857600080fd5b505afa15801561042c573d6000803e3d6000fd5b505050506040513d602081101561044257600080fd5b505190505b90565b600080546001600160a01b03166104f35760405163a828a18b60e01b8152602060048201908152602d6024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b92918291604401906113ed823960400191505060206040518083038186803b1580156104c057600080fd5b505afa1580156104d4573d6000803e3d6000fd5b505050506040513d60208110156104ea57600080fd5b50519050610447565b506000546001600160a01b031690565b604080518082018252600c8082526b2a37b5b2b726b0b730b3b2b960a11b6020808401918252600154945160009533946001600160a01b0390911693633a2bfd7f93879301918291908083835b6020831061056f5780518252601f199092019160209182019101610550565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156105de57600080fd5b505afa1580156105f2573d6000803e3d6000fd5b505050506040513d602081101561060857600080fd5b50516001600160a01b0316148061062e57503361062361044a565b6001600160a01b0316145b61067b576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b600061068561038d565b6001600160a01b0316633a2bfd7f6040516020018080704c6f636b416e644461746145524337323160781b8152506011019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561070257600080fd5b505afa158015610716573d6000803e3d6000fd5b505050506040513d602081101561072c57600080fd5b5051905060008080806001600160a01b038a16610a205761078289898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fd692505050565b604080516376c83e5760e11b815260048101859052905193975091945092506001600160a01b0387169163ed907cae916024808201926020929091908290030181600087803b1580156107d457600080fd5b505af11580156107e8573d6000803e3d6000fd5b505050506040513d60208110156107fe57600080fd5b505192506001600160a01b038316610a1b57600061081a61038d565b6001600160a01b0316633a2bfd7f60405160200180806b546f6b656e466163746f727960a01b815250600c019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561089257600080fd5b505afa1580156108a6573d6000803e3d6000fd5b505050506040513d60208110156108bc57600080fd5b505160405163cf46877960e01b8152602060048201908152602482018c90529192506001600160a01b0383169163cf468779918d918d918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050506040513d602081101561095e57600080fd5b5051604080516001600160a01b0383168152905191955086917fb533e537e4236905a4b6afd9845ff6febc3fc4c5cb8bc0fb797a46c46f5eb6cb9181900360200190a2856001600160a01b031663fb764e0285876040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610a0157600080fd5b505af1158015610a15573d6000803e3d6000fd5b50505050505b610a68565b610a5f89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ff192505050565b8b945090925090505b60408051635b95647560e11b81526001600160a01b03858116600483015284811660248301526044820184905291519187169163b72ac8ea916064808201926020929091908290030181600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b505050506040513d6020811015610aed57600080fd5b50519a9950505050505050505050565b604080518082018252600c8082526b2a37b5b2b726b0b730b3b2b960a11b6020808401918252600154945160609533946001600160a01b0390911693633a2bfd7f93879301918291908083835b60208310610b695780518252601f199092019160209182019101610b4a565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bd857600080fd5b505afa158015610bec573d6000803e3d6000fd5b505050506040513d6020811015610c0257600080fd5b50516001600160a01b03161480610c28575033610c1d61044a565b6001600160a01b0316145b610c75576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b6000610c7f61038d565b6001600160a01b0316633a2bfd7f6040516020018080704c6f636b416e644461746145524337323160781b8152506011019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610cfc57600080fd5b505afa158015610d10573d6000803e3d6000fd5b505050506040513d6020811015610d2657600080fd5b5051905083610efc576000816001600160a01b031663fcd4ae17896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b505050506040513d6020811015610db357600080fd5b5051905080610e09576040805162461bcd60e51b815260206004820152601d60248201527f4e6f74206578697374696e67204552432d37323120636f6e7472616374000000604482015290519081900360640190fd5b816001600160a01b0316631af2a57c89886040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506040513d6020811015610e9357600080fd5b5051610ee6576040805162461bcd60e51b815260206004820152601e60248201527f436f756e64206e6f7420726563656976652045524337323120546f6b656e0000604482015290519081900360640190fd5b610ef288828989611005565b9350610f0f915050565b610f068686611373565b9250610f0f9050565b50949350505050565b610f2061044a565b6001600160a01b0316336001600160a01b031614610f6f5760405162461bcd60e51b815260040180806020018281038252602281526020018061141a6022913960400191505060405180910390fd5b6001600160a01b038116610fca576040805162461bcd60e51b815260206004820152601760248201527f4e6577206f776e65722068617320746f20626520736574000000000000000000604482015290519081900360640190fd5b610fd38161036b565b50565b60218101516041820151606190920151909260609290921c91565b602181015160419091015160609190911c91565b606080856001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561104157600080fd5b505afa158015611055573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561107e57600080fd5b8101908080516040519392919084600160201b82111561109d57600080fd5b9083019060208201858111156110b257600080fd5b8251600160201b8111828201881017156110cb57600080fd5b82525081516020918201929091019080838360005b838110156110f85781810151838201526020016110e0565b50505050905090810190601f1680156111255780820380516001836020036101000a031916815260200191505b5060405250505090506060866001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561116957600080fd5b505afa15801561117d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111a657600080fd5b8101908080516040519392919084600160201b8211156111c557600080fd5b9083019060208201858111156111da57600080fd5b8251600160201b8111828201881017156111f357600080fd5b82525081516020918201929091019080838360005b83811015611220578181015183820152602001611208565b50505050905090810190601f16801561124d5780820380516001836020036101000a031916815260200191505b506040525050509050600560f81b8660001b8660601b6bffffffffffffffffffffffff19168660001b85518686518760405160200180896001600160f81b0319166001600160f81b031916815260010188815260200187815260200186815260200185815260200184805190602001908083835b602083106112e05780518252601f1990920191602091820191016112c1565b51815160209384036101000a60001901801990921691161790529201858152845190830192850191508083835b6020831061132c5780518252601f19909201916020918201910161130d565b6001836020036101000a0380198251168184511680821785525050505050509050019850505050505050505060405160208183030381529060405292505050949350505050565b60408051601560f81b602082015260609390931b6bffffffffffffffffffffffff191660218401526041808401929092528051808403909201825260619092019091529056fe736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6c6f636b416e644461746141646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6f776e6572416464726573734f6e6c79206f776e65722063616e20657865637574652074686973206d6574686f64a265627a7a72315820023eb93d6fdd199dfc56bbf61688437d2f6f4943274415571f0bc8275132c74e64736f6c634300050f0032", + "token_factory_address": "0xe9e8e031685137c3014793bef2875419c304aa72", + "token_factory_abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_lockAndDataAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "constant": true, + "inputs": [], + "name": "getLockAndDataAddress", + "outputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "createERC20", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "createERC721", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "token_factory_bytecode": "0x608060405234801561001057600080fd5b50604051614bb3380380614bb38339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317909155600180546001600160a01b0390931692909116919091179055614b41806100726000396000f3fe60806040523480156200001157600080fd5b50600436106200006a5760003560e01c806313af4035146200006f5780631b74e794146200009a578063893d20e814620000c0578063aaba370914620000ca578063cf4687791462000140578063f2fde38b14620001b6575b600080fd5b62000098600480360360208110156200008757600080fd5b50356001600160a01b0316620001df565b005b620000a462000201565b604080516001600160a01b039092168252519081900360200190f35b620000a4620002c4565b620000a460048036036020811015620000e257600080fd5b810190602081018135640100000000811115620000fe57600080fd5b8201836020820111156200011157600080fd5b803590602001918460018302840111640100000000831117156200013457600080fd5b50909250905062000383565b620000a4600480360360208110156200015857600080fd5b8101906020810181356401000000008111156200017457600080fd5b8201836020820111156200018757600080fd5b80359060200191846001830284011164010000000083111715620001aa57600080fd5b509092509050620008be565b6200009860048036036020811015620001ce57600080fd5b50356001600160a01b031662000d13565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546000906001600160a01b0316156200022957506001546001600160a01b0316620002c1565b60405163a828a18b60e01b815260206004820190815260336024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b929182916044019062004a8b823960400191505060206040518083038186803b1580156200029057600080fd5b505afa158015620002a5573d6000803e3d6000fd5b505050506040513d6020811015620002bc57600080fd5b505190505b90565b600080546001600160a01b0316620003735760405163a828a18b60e01b8152602060048201908152602d6024830181905273c033b369416c9ecd8e4a07aafa8b06b4107419e29263a828a18b929182916044019062004abe823960400191505060206040518083038186803b1580156200033d57600080fd5b505afa15801562000352573d6000803e3d6000fd5b505050506040513d60208110156200036957600080fd5b50519050620002c1565b506000546001600160a01b031690565b604080518082018252600b8082526a45524332304d6f64756c6560a81b6020808401918252600154945160009533946001600160a01b0390911693633a2bfd7f93879301918291908083835b60208310620003f05780518252601f199092019160209182019101620003cf565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156200046057600080fd5b505afa15801562000475573d6000803e3d6000fd5b505050506040513d60208110156200048c57600080fd5b50516001600160a01b03161480620004b5575033620004aa620002c4565b6001600160a01b0316145b62000503576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b6060806000806200054a88888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062000dd892505050565b9296509094509250905060006200056062000201565b6001600160a01b0316633a2bfd7f60405160200180806a45524332304d6f64756c6560a81b815250600b019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015620005d857600080fd5b505afa158015620005ed573d6000803e3d6000fd5b505050506040513d60208110156200060457600080fd5b50516040519091506000908690869086908690869062000624906200104d565b60ff84166040820152606081018390526001600160a01b038216608082015260a08082528651908201528551819060208083019160c08401918a019080838360005b838110156200068057818101518382015260200162000666565b50505050905090810190601f168015620006ae5780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b83811015620006e3578181015183820152602001620006c9565b50505050905090810190601f168015620007115780820380516001836020036101000a031916815260200191505b50975050505050505050604051809103906000f08015801562000738573d6000803e3d6000fd5b50905060006200074762000201565b6001600160a01b0316633a2bfd7f60405160200180806f04c6f636b416e644461746145524332360841b8152506010019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015620007c457600080fd5b505afa158015620007d9573d6000803e3d6000fd5b505050506040513d6020811015620007f057600080fd5b505160408051634c1d96ab60e11b81526001600160a01b03808416600483015291519293509084169163983b2d569160248082019260009290919082900301818387803b1580156200084157600080fd5b505af115801562000856573d6000803e3d6000fd5b50505050816001600160a01b031663986502756040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200089657600080fd5b505af1158015620008ab573d6000803e3d6000fd5b50939d9c50505050505050505050505050565b604080518082018252600c8082526b4552433732314d6f64756c6560a01b6020808401918252600154945160009533946001600160a01b0390911693633a2bfd7f93879301918291908083835b602083106200092c5780518252601f1990920191602091820191016200090b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156200099c57600080fd5b505afa158015620009b1573d6000803e3d6000fd5b505050506040513d6020811015620009c857600080fd5b50516001600160a01b03161480620009f1575033620009e6620002c4565b6001600160a01b0316145b62000a3f576040805162461bcd60e51b815260206004820152601960248201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604482015290519081900360640190fd5b60608062000a8386868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062000f2492505050565b80925081935050506000828260405162000a9d906200105b565b604080825283519082015282518190602080830191606084019187019080838360005b8381101562000ada57818101518382015260200162000ac0565b50505050905090810190601f16801562000b085780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101562000b3d57818101518382015260200162000b23565b50505050905090810190601f16801562000b6b5780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015801562000b8f573d6000803e3d6000fd5b509050600062000b9e62000201565b6001600160a01b0316633a2bfd7f6040516020018080704c6f636b416e644461746145524337323160781b8152506011019050604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562000c1c57600080fd5b505afa15801562000c31573d6000803e3d6000fd5b505050506040513d602081101562000c4857600080fd5b505160408051634c1d96ab60e11b81526001600160a01b03808416600483015291519293509084169163983b2d569160248082019260009290919082900301818387803b15801562000c9957600080fd5b505af115801562000cae573d6000803e3d6000fd5b50505050816001600160a01b031663986502756040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000cee57600080fd5b505af115801562000d03573d6000803e3d6000fd5b50939a9950505050505050505050565b62000d1d620002c4565b6001600160a01b0316336001600160a01b03161462000d6e5760405162461bcd60e51b815260040180806020018281038252602281526020018062004aeb6022913960400191505060405180910390fd5b6001600160a01b03811662000dca576040805162461bcd60e51b815260206004820152601760248201527f4e6577206f776e65722068617320746f20626520736574000000000000000000604482015290519081900360640190fd5b62000dd581620001df565b50565b606080600080600080600080608189015191508160001c6040519080825280601f01601f19166020018201604052801562000e1a576020820181803883390190505b50975060005b8281101562000e715789816081018151811062000e3957fe5b602001015160f81c60f81b89828151811062000e5157fe5b60200101906001600160f81b031916908160001a90535060010162000e20565b505087810160a1015160408051828152601f19601f8401168101602001909152829082801562000ea8576020820181803883390190505b50975060005b8281101562000f01578a818360a101018151811062000ec957fe5b602001015160f81c60f81b89828151811062000ee157fe5b60200101906001600160f81b031916908160001a90535060010162000eae565b5001880160c181015160c29091015160f89190911c955093505050509193509193565b608181015160408051828152601f19601f8401168101602001909152606091829160009082801562000f5d576020820181803883390190505b50935060005b8281101562000fb45785816081018151811062000f7c57fe5b602001015160f81c60f81b85828151811062000f9457fe5b60200101906001600160f81b031916908160001a90535060010162000f63565b505083810160a1015160408051828152601f19601f8401168101602001909152829082801562000feb576020820181803883390190505b50935060005b82811015620010445786818360a10101815181106200100c57fe5b602001015160f81c60f81b8582815181106200102457fe5b60200101906001600160f81b031916908160001a90535060010162000ff1565b50505050915091565b6114e6806200106a83390190565b61253b80620025508339019056fe60806040523480156200001157600080fd5b50604051620014e6380380620014e6833981810160405260a08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b506040908152602082810151918301516060909301518751929550929350869186918691620001ce9160009190860190620003b2565b508151620001e4906001906020850190620003b2565b506002805460ff191660ff92909216919091179055506200020790503362000236565b600791909155600880546001600160a01b0319166001600160a01b039092169190911790555062000457915050565b620002518160066200028860201b62000dfd1790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6200029d82826001600160e01b036200032f16565b156200030a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b03821662000392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620014c46022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003f557805160ff191683800117855562000425565b8280016001018555821562000425579182015b828111156200042557825182559160200191906001019062000408565b506200043392915062000437565b5090565b6200045491905b808211156200043357600081556001016200043e565b90565b61105d80620004676000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806372ba0758116100ad578063a457c2d711610071578063a457c2d714610358578063a9059cbb14610384578063aa271e1a146103b0578063d82c0b85146103d6578063dd62ed3e146103f357610121565b806372ba0758146102ee57806379cc6790146102f657806395d89b4114610322578063983b2d561461032a578063986502751461035057610121565b8063313ce567116100f4578063313ce56714610233578063395093511461025157806340c10f191461027d57806342966c68146102a957806370a08231146102c857610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e610421565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b0381351690602001356104b7565b604080519115158252519081900360200190f35b6101eb6104cd565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b038135811691602081013590911690604001356104d3565b61023b61052a565b6040805160ff9092168252519081900360200190f35b6101cf6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610533565b6101cf6004803603604081101561029357600080fd5b506001600160a01b03813516906020013561056f565b6102c6600480360360208110156102bf57600080fd5b50356105bf565b005b6101eb600480360360208110156102de57600080fd5b50356001600160a01b03166105cc565b6101eb6105e7565b6102c66004803603604081101561030c57600080fd5b506001600160a01b0381351690602001356105ed565b61012e6105fb565b6102c66004803603602081101561034057600080fd5b50356001600160a01b031661065b565b6102c66106a8565b6101cf6004803603604081101561036e57600080fd5b506001600160a01b0381351690602001356106b3565b6101cf6004803603604081101561039a57600080fd5b506001600160a01b0381351690602001356106ef565b6101cf600480360360208110156103c657600080fd5b50356001600160a01b03166106fc565b6102c6600480360360208110156103ec57600080fd5b5035610715565b6101eb6004803603604081101561040957600080fd5b506001600160a01b0381358116916020013516610763565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b5050505050905090565b60006104c433848461078e565b50600192915050565b60055490565b60006104e084848461087a565b6001600160a01b03841660009081526004602090815260408083203380855292529091205461052091869161051b908663ffffffff6109be16565b61078e565b5060019392505050565b60025460ff1690565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916104c491859061051b908663ffffffff610a1b16565b600061057a336106fc565b6105b55760405162461bcd60e51b8152600401808060200182810382526030815260200180610f4c6030913960400191505060405180910390fd5b6104c48383610a7c565b6105c93382610af4565b50565b6001600160a01b031660009081526003602052604090205490565b60075490565b6105f78282610bcf565b5050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156104ad5780601f10610482576101008083540402835291602001916104ad565b610664336106fc565b61069f5760405162461bcd60e51b8152600401808060200182810382526030815260200180610f4c6030913960400191505060405180910390fd5b6105c981610c14565b6106b133610c5c565b565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916104c491859061051b908663ffffffff6109be16565b60006104c433848461087a565b600061070f60068363ffffffff610ca416565b92915050565b6008546001600160a01b0316331461075e5760405162461bcd60e51b8152600401808060200182810382526021815260200180610f096021913960400191505060405180910390fd5b600755565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6001600160a01b0383166107d35760405162461bcd60e51b81526004018080602001828103825260248152602001806110056024913960400191505060405180910390fd5b6001600160a01b0382166108185760405162461bcd60e51b8152600401808060200182810382526022815260200180610f2a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166108bf5760405162461bcd60e51b8152600401808060200182810382526025815260200180610fe06025913960400191505060405180910390fd5b6001600160a01b0382166109045760405162461bcd60e51b8152600401808060200182810382526023815260200180610ee66023913960400191505060405180910390fd5b6001600160a01b03831660009081526003602052604090205461092d908263ffffffff6109be16565b6001600160a01b038085166000908152600360205260408082209390935590841681522054610962908263ffffffff610a1b16565b6001600160a01b0380841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115610a15576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610a75576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600754610a9782610a8b6104cd565b9063ffffffff610a1b16565b1115610aea576040805162461bcd60e51b815260206004820181905260248201527f546f74616c20737570706c79206f6e206d61696e6e6574206578636565646564604482015290519081900360640190fd5b6105f78282610d0b565b6001600160a01b038216610b395760405162461bcd60e51b8152600401808060200182810382526021815260200180610fbf6021913960400191505060405180910390fd5b600554610b4c908263ffffffff6109be16565b6005556001600160a01b038216600090815260036020526040902054610b78908263ffffffff6109be16565b6001600160a01b0383166000818152600360209081526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b610bd98282610af4565b6001600160a01b0382166000908152600460209081526040808320338085529252909120546105f791849161051b908563ffffffff6109be16565b610c2560068263ffffffff610dfd16565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b610c6d60068263ffffffff610e7e16565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60006001600160a01b038216610ceb5760405162461bcd60e51b8152600401808060200182810382526022815260200180610f9d6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b038216610d66576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600554610d79908263ffffffff610a1b16565b6005556001600160a01b038216600090815260036020526040902054610da5908263ffffffff610a1b16565b6001600160a01b03831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b610e078282610ca4565b15610e59576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610e888282610ca4565b610ec35760405162461bcd60e51b8152600401808060200182810382526021815260200180610f7c6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff1916905556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737343616c6c20646f6573206e6f7420676f2066726f6d2045524332304d6f64756c6545524332303a20617070726f766520746f20746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a72315820665dc9e8d78b1ea70f01b7bfa099587447c4b8f000f186c824d562931ab103aa64736f6c634300050f0032526f6c65733a206163636f756e7420697320746865207a65726f206164647265737360806040523480156200001157600080fd5b506040516200253b3803806200253b833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052508391508290508181620001d97f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03620002be16565b6200020d7f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03620002be16565b620002417f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03620002be16565b81516200025690600990602085019062000509565b5080516200026c90600a90602084019062000509565b50620002a17f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03620002be16565b50505050620002b6336200038d60201b60201c565b5050620005ae565b7fffffffff0000000000000000000000000000000000000000000000000000000080821614156200035057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b620003a881600c620003df60201b620017b71790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b620003f482826001600160e01b036200048616565b156200046157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620004e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620025196022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200054c57805160ff19168380011785556200057c565b828001600101855582156200057c579182015b828111156200057c5782518255916020019190600101906200055f565b506200058a9291506200058e565b5090565b620005ab91905b808211156200058a576000815560010162000595565b90565b611f5b80620005be6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80634f6ccce7116100c3578063986502751161007c578063986502751461052c578063a22cb46514610534578063aa271e1a14610562578063b88d4fde14610588578063c87b56dd1461064e578063e985e9c51461066b5761014d565b80634f6ccce7146103e357806350bb4e7f146104005780636352211e146104bb57806370a08231146104d857806395d89b41146104fe578063983b2d56146105065761014d565b806318160ddd1161011557806318160ddd146102e857806323b872dd146103025780632f745c591461033857806340c10f191461036457806342842e0e1461039057806342966c68146103c65761014d565b806301ffc9a71461015257806306fdde031461018d578063081812fc1461020a578063095ea7b314610243578063162094c414610271575b600080fd5b6101796004803603602081101561016857600080fd5b50356001600160e01b031916610699565b604080519115158252519081900360200190f35b6101956106b8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cf5781810151838201526020016101b7565b50505050905090810190601f1680156101fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102276004803603602081101561022057600080fd5b503561074f565b604080516001600160a01b039092168252519081900360200190f35b61026f6004803603604081101561025957600080fd5b506001600160a01b0381351690602001356107b1565b005b6101796004803603604081101561028757600080fd5b813591908101906040810160208201356401000000008111156102a957600080fd5b8201836020820111156102bb57600080fd5b803590602001918460018302840111640100000000831117156102dd57600080fd5b5090925090506108c2565b6102f06109bb565b60408051918252519081900360200190f35b61026f6004803603606081101561031857600080fd5b506001600160a01b038135811691602081013590911690604001356109c1565b6102f06004803603604081101561034e57600080fd5b506001600160a01b038135169060200135610a16565b6101796004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610a95565b61026f600480360360608110156103a657600080fd5b506001600160a01b03813581169160208101359091169060400135610aee565b61026f600480360360208110156103dc57600080fd5b5035610b09565b6102f0600480360360208110156103f957600080fd5b5035610b5a565b6101796004803603606081101561041657600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561044657600080fd5b82018360208201111561045857600080fd5b8035906020019184600183028401116401000000008311171561047a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bc0945050505050565b610227600480360360208110156104d157600080fd5b5035610c1a565b6102f0600480360360208110156104ee57600080fd5b50356001600160a01b0316610c74565b610195610cdc565b61026f6004803603602081101561051c57600080fd5b50356001600160a01b0316610d3d565b61026f610d8a565b61026f6004803603604081101561054a57600080fd5b506001600160a01b0381351690602001351515610d95565b6101796004803603602081101561057857600080fd5b50356001600160a01b0316610e61565b61026f6004803603608081101561059e57600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156105d957600080fd5b8201836020820111156105eb57600080fd5b8035906020019184600183028401116401000000008311171561060d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e74945050505050565b6101956004803603602081101561066457600080fd5b5035610ecc565b6101796004803603604081101561068157600080fd5b506001600160a01b0381358116916020013516610fb1565b6001600160e01b03191660009081526020819052604090205460ff1690565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107445780601f1061071957610100808354040283529160200191610744565b820191906000526020600020905b81548152906001019060200180831161072757829003601f168201915b505050505090505b90565b600061075a82610fdf565b6107955760405162461bcd60e51b815260040180806020018281038252602c815260200180611d82602c913960400191505060405180910390fd5b506000908152600260205260409020546001600160a01b031690565b60006107bc82610c1a565b9050806001600160a01b0316836001600160a01b0316141561080f5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e546021913960400191505060405180910390fd5b336001600160a01b038216148061082b575061082b8133610fb1565b6108665760405162461bcd60e51b8152600401808060200182810382526038815260200180611ca66038913960400191505060405180910390fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006108cd84610fdf565b610916576040805162461bcd60e51b8152602060048201526015602482015274546f6b656e20646f6573206e6f742065786973747360581b604482015290519081900360640190fd5b6109203385610ffc565b610971576040805162461bcd60e51b815260206004820181905260248201527f5468652073656e6465722063616e206e6f742073657420746f6b656e20555249604482015290519081900360640190fd5b6109b18484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110a092505050565b5060019392505050565b60075490565b6109cb3382610ffc565b610a065760405162461bcd60e51b8152600401808060200182810382526031815260200180611e756031913960400191505060405180910390fd5b610a11838383611103565b505050565b6000610a2183610c74565b8210610a5e5760405162461bcd60e51b815260040180806020018281038252602b815260200180611bf9602b913960400191505060405180910390fd5b6001600160a01b0383166000908152600560205260409020805483908110610a8257fe5b9060005260206000200154905092915050565b6000610aa033610e61565b610adb5760405162461bcd60e51b8152600401808060200182810382526030815260200180611d316030913960400191505060405180910390fd5b610ae58383611122565b50600192915050565b610a1183838360405180602001604052806000815250610e74565b610b133382610ffc565b610b4e5760405162461bcd60e51b8152600401808060200182810382526030815260200180611ef76030913960400191505060405180910390fd5b610b5781611143565b50565b6000610b646109bb565b8210610ba15760405162461bcd60e51b815260040180806020018281038252602c815260200180611ea6602c913960400191505060405180910390fd5b60078281548110610bae57fe5b90600052602060002001549050919050565b6000610bcb33610e61565b610c065760405162461bcd60e51b8152600401808060200182810382526030815260200180611d316030913960400191505060405180910390fd5b610c108484611122565b6109b183836110a0565b6000818152600160205260408120546001600160a01b031680610c6e5760405162461bcd60e51b8152600401808060200182810382526029815260200180611d086029913960400191505060405180910390fd5b92915050565b60006001600160a01b038216610cbb5760405162461bcd60e51b815260040180806020018281038252602a815260200180611cde602a913960400191505060405180910390fd5b6001600160a01b0382166000908152600360205260409020610c6e90611155565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107445780601f1061071957610100808354040283529160200191610744565b610d4633610e61565b610d815760405162461bcd60e51b8152600401808060200182810382526030815260200180611d316030913960400191505060405180910390fd5b610b5781611159565b610d93336111a1565b565b6001600160a01b038216331415610df3576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6000610c6e600c8363ffffffff6111e916565b610e7f8484846109c1565b610e8b84848484611250565b610ec65760405162461bcd60e51b8152600401808060200182810382526032815260200180611c246032913960400191505060405180910390fd5b50505050565b6060610ed782610fdf565b610f125760405162461bcd60e51b815260040180806020018281038252602f815260200180611e25602f913960400191505060405180910390fd5b6000828152600b602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015610fa55780601f10610f7a57610100808354040283529160200191610fa5565b820191906000526020600020905b815481529060010190602001808311610f8857829003601f168201915b50505050509050919050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000908152600160205260409020546001600160a01b0316151590565b600061100782610fdf565b6110425760405162461bcd60e51b815260040180806020018281038252602c815260200180611c7a602c913960400191505060405180910390fd5b600061104d83610c1a565b9050806001600160a01b0316846001600160a01b031614806110885750836001600160a01b031661107d8461074f565b6001600160a01b0316145b8061109857506110988185610fb1565b949350505050565b6110a982610fdf565b6110e45760405162461bcd60e51b815260040180806020018281038252602c815260200180611dae602c913960400191505060405180910390fd5b6000828152600b602090815260409091208251610a1192840190611afc565b61110e838383611383565b61111883826114c7565b610a1182826115bc565b61112c82826115fa565b61113682826115bc565b61113f8161172b565b5050565b610b5761114f82610c1a565b8261176f565b5490565b61116a600c8263ffffffff6117b716565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6111b2600c8263ffffffff61183816565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60006001600160a01b0382166112305760405162461bcd60e51b8152600401808060200182810382526022815260200180611dda6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6000611264846001600160a01b031661189f565b61127057506001611098565b604051630a85bd0160e11b815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b838110156112ea5781810151838201526020016112d2565b50505050905090810190601f1680156113175780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561133957600080fd5b505af115801561134d573d6000803e3d6000fd5b505050506040513d602081101561136357600080fd5b50516001600160e01b031916630a85bd0160e11b14915050949350505050565b826001600160a01b031661139682610c1a565b6001600160a01b0316146113db5760405162461bcd60e51b8152600401808060200182810382526029815260200180611dfc6029913960400191505060405180910390fd5b6001600160a01b0382166114205760405162461bcd60e51b8152600401808060200182810382526024815260200180611c566024913960400191505060405180910390fd5b611429816118a5565b6001600160a01b038316600090815260036020526040902061144a906118e0565b6001600160a01b038216600090815260036020526040902061146b906118f7565b60008181526001602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166000908152600560205260408120546114f190600163ffffffff61190016565b60008381526006602052604090205490915080821461158c576001600160a01b038416600090815260056020526040812080548490811061152e57fe5b906000526020600020015490508060056000876001600160a01b03166001600160a01b03168152602001908152602001600020838154811061156c57fe5b600091825260208083209091019290925591825260069052604090208190555b6001600160a01b03841660009081526005602052604090208054906115b5906000198301611b7a565b5050505050565b6001600160a01b0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b6001600160a01b038216611655576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b61165e81610fdf565b156116b0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b600081815260016020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600390915290206116ef906118f7565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b611779828261195d565b6000818152600b6020526040902054600260001961010060018416150201909116041561113f576000818152600b6020526040812061113f91611b9e565b6117c182826111e9565b15611813576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b61184282826111e9565b61187d5760405162461bcd60e51b8152600401808060200182810382526021815260200180611d616021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b3b151590565b6000818152600260205260409020546001600160a01b031615610b5757600090815260026020526040902080546001600160a01b0319169055565b80546118f390600163ffffffff61190016565b9055565b80546001019055565b600082821115611957576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6119678282611989565b61197182826114c7565b60008181526006602052604081205561113f81611a60565b816001600160a01b031661199c82610c1a565b6001600160a01b0316146119e15760405162461bcd60e51b8152600401808060200182810382526025815260200180611ed26025913960400191505060405180910390fd5b6119ea816118a5565b6001600160a01b0382166000908152600360205260409020611a0b906118e0565b60008181526001602052604080822080546001600160a01b0319169055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600754600090611a7790600163ffffffff61190016565b60008381526008602052604081205460078054939450909284908110611a9957fe5b906000526020600020015490508060078381548110611ab457fe5b60009182526020808320909101929092558281526008909152604090208290556007805490611ae7906000198301611b7a565b50505060009182525060086020526040812055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b3d57805160ff1916838001178555611b6a565b82800160010185558215611b6a579182015b82811115611b6a578251825591602001919060010190611b4f565b50611b76929150611bde565b5090565b815481835581811115610a1157600083815260209020610a11918101908301611bde565b50805460018160011615610100020316600290046000825580601f10611bc45750610b57565b601f016020900490600052602060002090810190610b5791905b61074c91905b80821115611b765760008155600101611be456fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e526f6c65733a206163636f756e7420697320746865207a65726f20616464726573734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e64734552433732313a206275726e206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a265627a7a723158201d882a21880bb99ac3a68d10484e6568fd595119356f485f7e63c341e18fcff064736f6c634300050f0032526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6c6f636b416e644461746141646472657373736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d412e6f776e6572416464726573734f6e6c79206f776e65722063616e20657865637574652074686973206d6574686f64a265627a7a723158206a9316acc5b78f6ad71826d840917eca6146e01f66b9b6f777ebe921f7d4b75164736f6c634300050f0032", + "message_proxy_chain_address": "0x427c74e358eb1f620e71f64afc9b1b5d2309dd01", + "message_proxy_chain_abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "newChainID", + "type": "string" + }, + { + "internalType": "address", + "name": "newContractManager", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "dstChain", + "type": "string" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "dstChainHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "msgCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "srcContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "dstContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "OutgoingMessage", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "connectedChains", + "outputs": [ + { + "internalType": "uint256", + "name": "incomingMessageCounter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "outgoingMessageCounter", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "inited", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ownerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "addAuthorizedCaller", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "removeAuthorizedCaller", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "someChainID", + "type": "string" + } + ], + "name": "isConnectedChain", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "newChainID", + "type": "string" + }, + { + "internalType": "uint256[4]", + "name": "newPublicKey", + "type": "uint256[4]" + } + ], + "name": "addConnectedChain", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "newChainID", + "type": "string" + } + ], + "name": "removeConnectedChain", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "dstChainID", + "type": "string" + }, + { + "internalType": "address", + "name": "dstContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "postOutgoingMessage", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "dstChainID", + "type": "string" + } + ], + "name": "getOutgoingMessagesCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "srcChainID", + "type": "string" + } + ], + "name": "getIncomingMessagesCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "srcChainID", + "type": "string" + }, + { + "internalType": "uint256", + "name": "startingCounter", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "destinationContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct MessageProxyForSchain.Message[]", + "name": "messages", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "blsSignature", + "type": "uint256[2]" + }, + { + "internalType": "uint256", + "name": "hashA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "hashB", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "internalType": "struct MessageProxyForSchain.Signature", + "name": "sign", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "idxLastToPopNotIncluding", + "type": "uint256" + } + ], + "name": "postIncomingMessages", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainName", + "type": "string" + } + ], + "name": "moveIncomingCounter", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "string", + "name": "schainName", + "type": "string" + } + ], + "name": "setCountersToZero", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getChainID", + "outputs": [ + { + "internalType": "string", + "name": "cID", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "ow", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newAddressOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "name": "checkIsAuthorizedCaller", + "outputs": [ + { + "internalType": "bool", + "name": "rv", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "idxMessage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "destinationContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "verifyOutgoingMessageData", + "outputs": [ + { + "internalType": "bool", + "name": "isValidMessage", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "message_proxy_chain_bytecode": "0x60806040526001805460ff60a01b191690556003805460ff191690553480156200002857600080fd5b5060405162002922380380620029228339810160408190526200004b9162000354565b6003805460ff19908116600190811790925581546001600160a01b03191633908117835560009081526002602090815260408220805490931690931790915583516200009a92850190620001f2565b50604051602001620000ac906200042f565b6040516020818303038152906040528051906020012082604051602001620000d591906200041a565b6040516020818303038152906040528051906020012014620001ea57620000fb62000277565b6040518060800160405280600081526020016000815260200160008152602001600081525090506040518060800160405280828152602001600081526020016000815260200160011515815250600460006040516020016200015d906200042f565b60408051601f19818403018152918152815160209283012083529082019290925201600020815162000193908290600462000295565b5060208201516004820155604082015160058201556060909101516006909101805491151560ff19909216919091179055506001805460ff60a01b1916740100000000000000000000000000000000000000001790555b5050620004f3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200023557805160ff191683800117855562000265565b8280016001018555821562000265579182015b828111156200026557825182559160200191906001019062000248565b5062000273929150620002c5565b5090565b60405180608001604052806004906020820280388339509192915050565b82600481019282156200026557916020028201828111156200026557825182559160200191906001019062000248565b620002e291905b80821115620002735760008155600101620002cc565b90565b8051620002f281620004d9565b92915050565b600082601f8301126200030a57600080fd5b8151620003216200031b8262000463565b6200043c565b915080825260208301602083018583830111156200033e57600080fd5b6200034b838284620004a6565b50505092915050565b600080604083850312156200036857600080fd5b82516001600160401b038111156200037f57600080fd5b6200038d85828601620002f8565b9250506020620003a085828601620002e5565b9150509250929050565b6000620003b7826200048b565b620003c381856200048f565b9350620003d5818560208601620004a6565b9290920192915050565b6000620003ee6007836200048f565b7f4d61696e6e657400000000000000000000000000000000000000000000000000815260070192915050565b6000620004288284620003aa565b9392505050565b6000620002f282620003df565b6040518181016001600160401b03811182821017156200045b57600080fd5b604052919050565b60006001600160401b038211156200047a57600080fd5b506020601f91909101601f19160190565b5190565b919050565b60006001600160a01b038216620002f2565b60005b83811015620004c3578181015183820152602001620004a9565b83811115620004d3576000848401525b50505050565b620004e48162000494565b8114620004f057600080fd5b50565b61241f80620005036000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806377fe0f31116100a2578063a3c4786011610071578063a3c4786014610230578063b7aa023114610243578063c640100314610256578063e45b045f14610269578063e6ab84031461027c57610116565b806377fe0f31146101e0578063893d20e8146101f35780638f84aa0914610208578063999ab9aa1461021057610116565b806335892300116100e957806335892300146101695780633cdd2cc31461017c5780634da84ce51461018f578063564b81ef146101a257806367ec6020146101c057610116565b806313a155ea1461011b57806313af40351461013057806314b32bde146101435780632231691e14610156575b600080fd5b61012e61012936600461196d565b61029e565b005b61012e61013e36600461196d565b610303565b61012e610151366004611abe565b610325565b61012e610164366004611a11565b6105a2565b61012e610177366004611b13565b6106f1565b61012e61018a3660046119cf565b610ad3565b61012e61019d3660046119cf565b610c40565b6101aa610d04565b6040516101b791906121a8565b60405180910390f35b6101d36101ce3660046119cf565b610e85565b6040516101b791906122bf565b6101d36101ee3660046119cf565b610f23565b6101fb610fc0565b6040516101b79190612110565b6101fb611072565b61022361021e3660046119cf565b611081565b6040516101b7919061219a565b61022361023e366004611c15565b6110db565b61012e61025136600461196d565b6112fc565b61022361026436600461196d565b611355565b61012e6102773660046119cf565b61142f565b61028f61028a3660046119b1565b6114b1565b6040516101b7939291906122cd565b6102a6610fc0565b6001600160a01b0316336001600160a01b0316146102df5760405162461bcd60e51b81526004016102d69061227f565b60405180910390fd5b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff1661040057604080516101008101825260006080820181815260a0830182905260c0830182905260e0830182905282526020808301829052828401829052600160608401529251919260049261038791016120fa565b60408051601f1981840301815291815281516020928301208352908201929092520160002081516103bb90829060046116c6565b5060208201516004820155604082015160058201556060909101516006909101805491151560ff199092169190911790556001805460ff60a01b1916600160a01b1790555b61040933611355565b6104255760405162461bcd60e51b81526004016102d6906122af565b604051602001610434906120fa565b60405160208183030381529060405280519060200120838360405160200161045d9291906120da565b60405160208183030381529060405280519060200120141561047e5761059d565b6004600084846040516020016104959291906120da565b60408051601f198184030181529181528151602092830120835290820192909252016000206006015460ff16156104de5760405162461bcd60e51b81526004016102d69061222f565b60408051610100810190915280608080820190849060049083908390808284376000920182905250928452505060208083018290526040808401839052600160609094019390935291516004926105399188918891016120da565b60408051601f19818403018152918152815160209283012083529082019290925201600020815161056d90829060046116c6565b5060208201516004820155604082015160058201556060909101516006909101805460ff19169115159190911790555b505050565b600087876040516020016105b79291906120da565b60408051601f1981840301815291815281516020928301206000818152600490935291206006015490915060ff166106015760405162461bcd60e51b81526004016102d69061226f565b600081815260046020908152604091829020600501805460010190558151610140601f8b018390049092028101820190925261012082018981526106e792918291908c908c908190850183828082843760009201829052509385525050506020808301869052858252600481526040918290206005015460001901828401523360608401526001600160a01b038b81166080850152891660a084015260c083018a90528151601f880182900482028101820190925286825260e09092019187908790819084018382808284376000920191909152505050908252506020018490526114da565b5050505050505050565b600154600160a01b900460ff166107cc57604080516101008101825260006080820181815260a0830182905260c0830182905260e0830182905282526020808301829052828401829052600160608401529251919260049261075391016120fa565b60408051601f19818403018152918152815160209283012083529082019290925201600020815161078790829060046116c6565b5060208201516004820155604082015160058201556060909101516006909101805491151560ff199092169190911790556001805460ff60a01b1916600160a01b1790555b6107d533611355565b6107f15760405162461bcd60e51b81526004016102d6906122af565b6004600088886040516020016108089291906120da565b60408051601f198184030181529181528151602092830120835290820192909252016000206006015460ff166108505760405162461bcd60e51b81526004016102d69061228f565b6004600088886040516020016108679291906120da565b6040516020818303038152906040528051906020012081526020019081526020016000206004015485146108ad5760405162461bcd60e51b81526004016102d69061224f565b60005b83811015610a7f578484828181106108c457fe5b602002820190508035609e19368490030181126108e057600080fd5b6108f3920160408101915060200161196d565b6001600160a01b031663a3c690d686868481811061090d57fe5b602002820190508035609e193684900301811261092957600080fd5b610939920160208101915061196d565b8a8a89898781811061094757fe5b602002820190508035609e193684900301811261096357600080fd5b610976920160608101915060400161196d565b8a8a8881811061098257fe5b602002820190508035609e193684900301811261099e57600080fd5b80830192505050606001358b8b898181106109b557fe5b602002820190508035609e19368490030181126109d157600080fd5b919091019050608081018035601e19368490030181126109f057600080fd5b9091016020810191503567ffffffffffffffff811115610a0f57600080fd5b36819003821315610a1f57600080fd5b6040518863ffffffff1660e01b8152600401610a41979695949392919061211e565b600060405180830381600087803b158015610a5b57600080fd5b505af1158015610a6f573d6000803e3d6000fd5b5050600190920191506108b09050565b5083839050600460008989604051602001610a9b9291906120da565b60408051601f19818403018152918152815160209283012083529082019290925201600020600401805490910190556106e781611617565b610adb610fc0565b6001600160a01b0316336001600160a01b031614610b0b5760405162461bcd60e51b81526004016102d69061227f565b604051602001610b1a906120fa565b604051602081830303815290604052805190602001208282604051602001610b439291906120da565b604051602081830303815290604052805190602001201415610b775760405162461bcd60e51b81526004016102d69061225f565b600460008383604051602001610b8e9291906120da565b60408051601f198184030181529181528151602092830120835290820192909252016000206006015460ff16610bd65760405162461bcd60e51b81526004016102d69061228f565b600460008383604051602001610bed9291906120da565b60405160208183030381529060405280519060200120815260200190815260200160002060008082016000610c229190611704565b506000600482018190556005820155600601805460ff191690555050565b610c48610fc0565b6001600160a01b0316336001600160a01b031614610c785760405162461bcd60e51b81526004016102d69061227f565b6000600460008484604051602001610c919291906120da565b604051602081830303815290604052805190602001208152602001908152602001600020600401819055506000600460008484604051602001610cd59291906120da565b604051602081830303815290604052805190602001208152602001908152602001600020600501819055505050565b60035460609060ff16610df457604051602001610d2090612105565b604051602081830303815290604052805190602001206000604051602001610d4891906120e7565b604051602081830303815290604052805190602001201415610df457604051630bbd360b60e21b815273c033b369416c9ecd8e4a07aafa8b06b4107419e290632ef4d82c90610d999060040161223f565b60006040518083038186803b158015610db157600080fd5b505afa158015610dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ded9190810190611bc2565b9050610e82565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e7a5780601f10610e4f57610100808354040283529160200191610e7a565b820191906000526020600020905b815481529060010190602001808311610e5d57829003601f168201915b505050505090505b90565b6000808383604051602001610e9b9291906120da565b60408051601f1981840301815291815281516020928301206000818152600490935291206006015490915060ff16610ee55760405162461bcd60e51b81526004016102d69061226f565b60008181526004602052604090206006015460ff16610f08576000915050610f1d565b60009081526004602052604090206005015490505b92915050565b6000808383604051602001610f399291906120da565b60408051601f1981840301815291815281516020928301206000818152600490935291206006015490915060ff16610f835760405162461bcd60e51b81526004016102d69061229f565b60008181526004602052604090206006015460ff16610fa6576000915050610f1d565b600090815260046020819052604090912001549392505050565b60035460009060ff16611062576001546001600160a01b03166110625760405163a828a18b60e01b815273c033b369416c9ecd8e4a07aafa8b06b4107419e29063a828a18b906110129060040161221f565b60206040518083038186803b15801561102a57600080fd5b505afa15801561103e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ded9190810190611993565b506001546001600160a01b031690565b6001546001600160a01b031681565b600060046000848460405160200161109a9291906120da565b60408051601f198184030181529181528151602092830120835290820192909252016000206006015460ff166110d257506000610f1d565b50600192915050565b60006110e5611720565b6000878152600560209081526040918290208251815460026001821615610100026000190190911604601f8101849004909302810161014090810190945261012081018381529093919284928491908401828280156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b505050918352505060018281015460208084019190915260028085015460408086019190915260038601546001600160a01b03908116606087015260048701548116608087015260058701541660a0860152600686015460c086015260078601805482516101009682161596909602600019011692909204601f810184900484028501840190915280845260e09094019390918301828280156112695780601f1061123e57610100808354040283529160200191611269565b820191906000526020600020905b81548152906001019060200180831161124c57829003601f168201915b505050505081526020016008820154815250509050846001600160a01b031681608001516001600160a01b03161480156112b85750856001600160a01b031681606001516001600160a01b0316145b80156112d95750836001600160a01b03168160a001516001600160a01b0316145b80156112e85750828160c00151145b156112f257600191505b5095945050505050565b611304610fc0565b6001600160a01b0316336001600160a01b0316146113345760405162461bcd60e51b81526004016102d69061227f565b6001600160a01b03166000908152600260205260409020805460ff19169055565b3360009081526002602052604081205460ff16156113755750600161142a565b60035460ff16156113885750600061142a565b60405163d0c4714f60e01b815260009073c033b369416c9ecd8e4a07aafa8b06b4107419e29063d0c4714f906113c290869060040161217b565b60206040518083038186803b1580156113da57600080fd5b505afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114129190810190611bf7565b9050801561142457600191505061142a565b60009150505b919050565b611437610fc0565b6001600160a01b0316336001600160a01b0316146114675760405162461bcd60e51b81526004016102d69061227f565b60046000838360405160200161147e9291906120da565b60408051601f19818403018152918152815160209283012083529082019290925201600020600401805460010190555050565b600460208190526000918252604090912090810154600582015460069092015490919060ff1683565b80606001516001600160a01b0316816040015182602001517fa701ebe76260cb49bb2dc03cf8cf6dacbc4c59a5d615c4db34a7dfdf36e6b6dc846000015185608001518660a001518760c001518860e00151896101000151604051611544969594939291906121b9565b60405180910390a4600754600090815260056020908152604090912082518051849361157492849291019061176b565b5060208281015160018301556040830151600283015560608301516003830180546001600160a01b039283166001600160a01b031991821617909155608085015160048501805491841691831691909117905560a085015160058501805491909316911617905560c0830151600683015560e083015180516115fc926007850192019061176b565b50610100919091015160089091015550600780546001019055565b6006546000905b828110156116b2576007548110611634576116b2565b60008181526005602052604081209061164d82826117d8565b600060018301819055600283018190556003830180546001600160a01b03199081169091556004840180548216905560058401805490911690556006830181905561169c9060078401906117d8565b506000600891909101556001918201910161161e565b50801561142a576006805482019055919050565b82600481019282156116f4579160200282015b828111156116f45782518255916020019190600101906116d9565b5061170092915061181f565b5090565b5060008155600101600081556001016000815560010160009055565b604080516101208101825260608082526000602083018190529282018390528082018390526080820183905260a0820183905260c0820183905260e082015261010081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106117ac57805160ff19168380011785556116f4565b828001600101855582156116f457918201828111156116f45782518255916020019190600101906116d9565b50805460018160011615610100020316600290046000825580601f106117fe575061181c565b601f01602090049060005260206000209081019061181c919061181f565b50565b610e8291905b808211156117005760008155600101611825565b8035610f1d816123bf565b8051610f1d816123bf565b60008083601f84011261186157600080fd5b50813567ffffffffffffffff81111561187957600080fd5b60208301915083602082028301111561189157600080fd5b9250929050565b8060808101831015610f1d57600080fd5b8035610f1d816123d3565b60008083601f8401126118c657600080fd5b50813567ffffffffffffffff8111156118de57600080fd5b60208301915083600182028301111561189157600080fd5b600082601f83011261190757600080fd5b815161191a6119158261231c565b6122f5565b9150808252602083016020830185838301111561193657600080fd5b611941838284612385565b50505092915050565b600060a0828403121561195c57600080fd5b50919050565b8051610f1d816123d3565b60006020828403121561197f57600080fd5b600061198b8484611839565b949350505050565b6000602082840312156119a557600080fd5b600061198b8484611844565b6000602082840312156119c357600080fd5b600061198b84846118a9565b600080602083850312156119e257600080fd5b823567ffffffffffffffff8111156119f957600080fd5b611a05858286016118b4565b92509250509250929050565b600080600080600080600060a0888a031215611a2c57600080fd5b873567ffffffffffffffff811115611a4357600080fd5b611a4f8a828b016118b4565b97509750506020611a628a828b01611839565b9550506040611a738a828b016118a9565b9450506060611a848a828b01611839565b935050608088013567ffffffffffffffff811115611aa157600080fd5b611aad8a828b016118b4565b925092505092959891949750929550565b600080600060a08486031215611ad357600080fd5b833567ffffffffffffffff811115611aea57600080fd5b611af6868287016118b4565b93509350506020611b0986828701611898565b9150509250925092565b6000806000806000806000610120888a031215611b2f57600080fd5b873567ffffffffffffffff811115611b4657600080fd5b611b528a828b016118b4565b97509750506020611b658a828b016118a9565b955050604088013567ffffffffffffffff811115611b8257600080fd5b611b8e8a828b0161184f565b94509450506060611ba18a828b0161194a565b925050610100611bb38a828b016118a9565b91505092959891949750929550565b600060208284031215611bd457600080fd5b815167ffffffffffffffff811115611beb57600080fd5b61198b848285016118f6565b600060208284031215611c0957600080fd5b600061198b8484611962565b600080600080600060a08688031215611c2d57600080fd5b6000611c3988886118a9565b9550506020611c4a88828901611839565b9450506040611c5b88828901611839565b9350506060611c6c88828901611839565b9250506080611c7d888289016118a9565b9150509295509295909350565b611c938161235d565b82525050565b611c9381612368565b6000611cae8385612354565b9350611cbb838584612379565b611cc4836123b5565b9093019392505050565b6000611cd982612350565b611ce38185612354565b9350611cf3818560208601612385565b611cc4816123b5565b6000611d08838561142a565b9350611d15838584612379565b50500190565b600081546001811660008114611d385760018114611d5b57611d9a565b607f6002830416611d49818761142a565b60ff1984168152955085019250611d9a565b60028204611d69818761142a565b9550611d7485612344565b60005b82811015611d9357815488820152600190910190602001611d77565b5050850192505b505092915050565b6000611daf602d83612354565b7f736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d4181526c2e6f776e65724164647265737360981b602082015260400192915050565b6000611dfe601a83612354565b7f436861696e20697320616c726561647920636f6e6e6563746564000000000000815260200192915050565b6000611e37601b83612354565b7f736b616c65436f6e6669672e73436861696e2e73636861696e49440000000000815260200192915050565b6000611e70603883612354565b7f5374617274696e6720636f756e746572206973206e6f74207175616c20746f2081527f696e636f6d696e67206d65737361676520636f756e7465720000000000000000602082015260400192915050565b6000611ecf602583612354565b7f4e657720636861696e2069642063616e206e6f7420626520657175616c204d618152641a5b9b995d60da1b602082015260400192915050565b6000611f1660078361142a565b6613585a5b9b995d60ca1b815260070192915050565b6000611f39602483612354565b7f44657374696e6174696f6e20636861696e206973206e6f7420696e697469616c8152631a5e995960e21b602082015260400192915050565b6000611f7f601683612354565b7529b2b73232b91034b9903737ba1030b71037bbb732b960511b815260200192915050565b6000611fb1601883612354565b7f436861696e206973206e6f7420696e697469616c697a65640000000000000000815260200192915050565b6000610f1d60008361142a565b6000611ff7601f83612354565b7f536f7572636520636861696e206973206e6f7420696e697469616c697a656400815260200192915050565b6000612030601583612354565b742737ba1030baba3437b934bd32b21031b0b63632b960591b815260200192915050565b6000612061605583612354565b7f736b616c65436f6e6669672e636f6e747261637453657474696e67732e494d4181527f2e7661726961626c65732e4d65737361676550726f7879466f7253636861696e6020820152742e6d6170417574686f72697a656443616c6c65727360581b604082015260600192915050565b611c9381610e82565b600061198b828486611cfc565b60006120f38284611d1b565b9392505050565b6000610f1d82611f09565b6000610f1d82611fdd565b60208101610f1d8284611c8a565b60a0810161212c828a611c8a565b818103602083015261213f81888a611ca2565b905061214e6040830187611c8a565b61215b60608301866120d1565b818103608083015261216e818486611ca2565b9998505050505050505050565b604081016121898284611c8a565b81810360208301526120f381612054565b60208101610f1d8284611c99565b602080825281016120f38184611cce565b60c080825281016121ca8189611cce565b90506121d96020830188611c8a565b6121e66040830187611c8a565b6121f360608301866120d1565b81810360808301526122058185611cce565b905061221460a08301846120d1565b979650505050505050565b60208082528101610f1d81611da2565b60208082528101610f1d81611df1565b60208082528101610f1d81611e2a565b60208082528101610f1d81611e63565b60208082528101610f1d81611ec2565b60208082528101610f1d81611f2c565b60208082528101610f1d81611f72565b60208082528101610f1d81611fa4565b60208082528101610f1d81611fea565b60208082528101610f1d81612023565b60208101610f1d82846120d1565b606081016122db82866120d1565b6122e860208301856120d1565b61198b6040830184611c99565b60405181810167ffffffffffffffff8111828210171561231457600080fd5b604052919050565b600067ffffffffffffffff82111561233357600080fd5b506020601f91909101601f19160190565b60009081526020902090565b5190565b90815260200190565b6000610f1d8261236d565b151590565b6001600160a01b031690565b82818337506000910152565b60005b838110156123a0578181015183820152602001612388565b838111156123af576000848401525b50505050565b601f01601f191690565b6123c88161235d565b811461181c57600080fd5b6123c881610e8256fea365627a7a72315820266709bed09d5c7c4e24b766cc918e9d7a2333231220c3c5218e62e78856e8da6c6578706572696d656e74616cf564736f6c634300050f0040" +} \ No newline at end of file diff --git a/tests/schain_config/generator_test.py b/tests/schain_config/generator_test.py index 6e467b45..eef6730f 100644 --- a/tests/schain_config/generator_test.py +++ b/tests/schain_config/generator_test.py @@ -1,3 +1,4 @@ +import json import skale.contracts.data.nodes_data as nodes_data from skale.dataclasses import CurrentNodeInfo from skale.schain_config.generator import get_nodes_for_schain @@ -5,7 +6,7 @@ generate_skale_schain_config) from skale.utils.helper import ip_from_bytes from tests.constants import (DEFAULT_NODE_NAME, ZERO_ADDRESS, DEFAULT_SCHAIN_NAME, TEST_URL, - MIN_NODES_IN_SCHAIN) + MIN_NODES_IN_SCHAIN, IMA_DATA_FILEPATH) TEST_NODE_IP_BYTES = b'\x8aD\xf6V' @@ -13,6 +14,7 @@ NODE_INFO_LEN = 15 SCHAIN_INFO_LEN = 4 TEST_ACCOUNTS_LEN = 2 # because we're creating everything from one account +TEST_ACCOUNTS_LEN_WITH_IMA = 12 # 10 precompiled IMA contracts TEST_BASE_CONFIG = { @@ -21,6 +23,11 @@ } +def read_ima_data_sample(): + with open(IMA_DATA_FILEPATH) as f: + return json.load(f) + + def test_generate_node_info(): node_info = CurrentNodeInfo( node_name=DEFAULT_NODE_NAME, @@ -109,3 +116,23 @@ def test_generate_skale_schain_config(skale): assert len(config['skaleConfig']['sChain']['nodes']) == 2 assert isinstance(config['skaleConfig']['sChain']['schainOwner'], str) + + +def test_generate_skale_schain_config_with_ima_data(skale): + node_index = skale.nodes_data.node_name_to_index(DEFAULT_NODE_NAME) + config = generate_skale_schain_config( + skale=skale, + schain_name=DEFAULT_SCHAIN_NAME, + node_id=node_index, + base_config=TEST_BASE_CONFIG, + ima_mainnet=TEST_URL, + ima_mp_schain=ZERO_ADDRESS, + ima_mp_mainnet=ZERO_ADDRESS, + ima_data=read_ima_data_sample(), + wallets={} + ) + assert len(config['accounts'].keys()) == TEST_ACCOUNTS_LEN_WITH_IMA + + print(json.dumps(config, indent=2)) + assert False + # todo: improve test From e2cce9a8d5267fb49321b0ec4efa7bb8ab9f5125 Mon Sep 17 00:00:00 2001 From: Dmytro Tkachuk Date: Wed, 13 May 2020 14:59:24 +0300 Subject: [PATCH 2/2] SKALE-1242 Add node and schain owners to permitted mp addresses --- skale/schain_config/generator.py | 18 ++++++++++++++---- tests/schain_config/generator_test.py | 3 --- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/skale/schain_config/generator.py b/skale/schain_config/generator.py index 318e930c..30e9cc7e 100644 --- a/skale/schain_config/generator.py +++ b/skale/schain_config/generator.py @@ -17,6 +17,8 @@ # You should have received a copy of the GNU Affero General Public License # along with SKALE.py. If not, see . +from web3 import Web3 + from skale.dataclasses import CurrentNodeInfo, SchainNodeInfo from skale.schain_config.ports_allocation import get_schain_base_port_on_node from skale.schain_config import PRECOMPILED_IMA_CONTRACTS @@ -80,11 +82,18 @@ def generate_permitted_ima_contracts_info(ima_data): return permitted_contracts -def generate_mp_authorized_callers(ima_data): +def generate_mp_authorized_callers(ima_data, schain_owner, schain_nodes): mp_authorized_callers = {} for name in PRECOMPILED_IMA_CONTRACTS: address = get_contract_address_from_ima_data(ima_data, name) mp_authorized_callers[address] = 1 + for node in schain_nodes: + acc_fx = Web3.toChecksumAddress(node['owner']) + if not mp_authorized_callers.get(acc_fx, None): + mp_authorized_callers[acc_fx] = 1 + schain_owner_fx = Web3.toChecksumAddress(schain_owner) + if not mp_authorized_callers.get(schain_owner_fx, None): + mp_authorized_callers[schain_owner_fx] = 1 return mp_authorized_callers @@ -97,10 +106,10 @@ def generate_ima_contracts_addresses(ima_data): return ima_contracts_addresses -def generate_schain_contract_settings(ima_data, schain_owner): +def generate_schain_contract_settings(ima_data, schain_owner, schain_nodes): # todo: refactor permitted_contracts = generate_permitted_ima_contracts_info(ima_data) - mp_authorized_callers = generate_mp_authorized_callers(ima_data) + mp_authorized_callers = generate_mp_authorized_callers(ima_data, schain_owner, schain_nodes) ima_contracts_addresses = generate_ima_contracts_addresses(ima_data) return { 'common': { @@ -164,7 +173,8 @@ def generate_skale_schain_config(skale, schain_name, node_id, base_config=None, else: base_config = {} if ima_data: - schain_contract_settings = generate_schain_contract_settings(ima_data, schain['owner']) + schain_contract_settings = generate_schain_contract_settings(ima_data, schain['owner'], + schain_nodes) else: schain_contract_settings = {} return generate_schain_config( diff --git a/tests/schain_config/generator_test.py b/tests/schain_config/generator_test.py index eef6730f..728b3b81 100644 --- a/tests/schain_config/generator_test.py +++ b/tests/schain_config/generator_test.py @@ -132,7 +132,4 @@ def test_generate_skale_schain_config_with_ima_data(skale): wallets={} ) assert len(config['accounts'].keys()) == TEST_ACCOUNTS_LEN_WITH_IMA - - print(json.dumps(config, indent=2)) - assert False # todo: improve test