UNPKG

@levelk/token-price-oracles

Version:

tools for creating token price data feeds and oracles that integrate with on-chain dex's

327 lines 164 kB
{ "contractName": "TokenPriceDataFeedFactory", "abi": [ { "constant": true, "inputs": [ { "name": "", "type": "address" }, { "name": "", "type": "address" } ], "name": "tokenPairToDataFeed", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "exchangeAdapter", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "inputs": [ { "name": "_exchangeAdapter", "type": "address" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "tokenPriceDataFeed", "type": "address" }, { "indexed": false, "name": "token1", "type": "address" }, { "indexed": false, "name": "token2", "type": "address" } ], "name": "TokenPriceDataFeedCreated", "type": "event" }, { "constant": false, "inputs": [ { "name": "token1", "type": "address" }, { "name": "token2", "type": "address" } ], "name": "createTokenPriceDataFeed", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "token1", "type": "address" }, { "name": "token2", "type": "address" } ], "name": "getTokenPriceDataFeed", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "token1", "type": "address" }, { "name": "token2", "type": "address" } ], "name": "tokenPriceDataFeedExists", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b5060405160208061255583398101806040528101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506124d2806100836000396000f30060806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631a3eeea5146100725780632cbcda251461011557806334c106511461016c578063b06725bc146101cf578063cd8a877d1461024a575b600080fd5b34801561007e57600080fd5b506100d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102ed565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561012157600080fd5b5061012a61032f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017857600080fd5b506101cd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610354565b005b3480156101db57600080fd5b50610230600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106e9565b604051808215151515815260200191505060405180910390f35b34801561025657600080fd5b506102ab600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061072c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60016020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061036083836106e9565b1515156103fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f63616e6e6f7420616464206475706c696361746520746f6b656e20707269636581526020017f206461746120666565640000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6104036107d3565b604051809103906000f08015801561041f573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663c0c53b8b84846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561054657600080fd5b505af115801561055a573d6000803e3d6000fd5b5050505080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8c67dba325dc55d3fa0b9c6c22893c34f4ba8922df64095f16ffb19cef347791818484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661070c848461072c565b73ffffffffffffffffffffffffffffffffffffffff161415905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b604051611cc3806107e4833901905600608060405234801561001057600080fd5b50611ca3806100206000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307acc14b146101015780631a0ba4f2146101545780631b076edc1461019957806325be124e146101f05780632cbcda251461024757806330adb55d1461029e5780636a2ea57e146102ee5780636e4aa4d0146103215780636f1e84981461034c57806371a1c0ae1461037f57806392549bf214610396578063a25fa35c146103e5578063c0a6ab7914610435578063c0c53b8b14610460578063c2605a64146104e3578063c4d66de814610536578063d21220a714610579578063dab21b63146105d0575b600080fd5b34801561010d57600080fd5b506101366004803603810190808035906020019092919080359060200190929190505050610615565b60405180826000191660001916815260200191505060405180910390f35b34801561016057600080fd5b5061017f60048036038101908080359060200190929190505050610780565b604051808215151515815260200191505060405180910390f35b3480156101a557600080fd5b506101ae61079f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101fc57600080fd5b506102056107c5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025357600080fd5b5061025c6107eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102aa57600080fd5b506102c960048036038101908080359060200190929190505050610811565b6040518083600019166000191681526020018281526020019250505060405180910390f35b3480156102fa57600080fd5b506103036108e1565b60405180826000191660001916815260200191505060405180910390f35b34801561032d57600080fd5b5061033661091c565b6040518082815260200191505060405180910390f35b34801561035857600080fd5b50610361610944565b60405180826000191660001916815260200191505060405180910390f35b34801561038b57600080fd5b50610394610abe565b005b3480156103a257600080fd5b506103cf600480360381019080803560001916906020019092919080359060200190929190505050610cf3565b6040518082815260200191505060405180910390f35b3480156103f157600080fd5b5061041060048036038101908080359060200190929190505050610eb1565b6040518083600019166000191681526020018281526020019250505060405180910390f35b34801561044157600080fd5b5061044a610f62565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b506104e1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f72565b005b3480156104ef57600080fd5b5061051860048036038101908080359060200190929190803590602001909291905050506111c1565b60405180826000191660001916815260200191505060405180910390f35b34801561054257600080fd5b50610577600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611476565b005b34801561058557600080fd5b5061058e6116ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105dc57600080fd5b506105fb600480360381019080803590602001909291905050506116f4565b604051808215151515815260200191505060405180910390f35b60006060808385111515156106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f7374617274496e646578206d757374206265206c657373207468616e206f722081526020017f657175616c20746f20656e64496e64657800000000000000000000000000000081525060400191505060405180910390fd5b600085111515610756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f7374617274496e646578206d7573742062652067726561746572207468616e2081526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610760858561177c565b915061076b82611828565b905061077681611a70565b9250505092915050565b6000806035600084815260200190815260200160002054119050919050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061081d836116f4565b1515610891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f20726573756c742073657420666f72205f696e646578000000000000000081525060200191505060405180910390fd5b603460006033858154811015156108a457fe5b90600052602060002001548152602001908152602001600020546033848154811015156108cd57fe5b906000526020600020015491509150915091565b60006034600060336108f1610f62565b8154811015156108fd57fe5b9060005260206000200154815260200190815260200160002054905090565b60006033610928610f62565b81548110151561093457fe5b9060005260206000200154905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b505050506040513d6020811015610aa557600080fd5b8101908080519060200190929190505050600102905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b810190808051906020019092919050505090503073ffffffffffffffffffffffffffffffffffffffff166392549bf282600102426040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b81019080805190602001909291905050505050565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5468652063616c6c6572206973206e6f7420746865206461746120736f75726381526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81428111151515610e59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f446174652063616e6e6f7420626520696e20746865206675747572650000000081525060200191505060405180910390fd5b60006033805490501115610e96576033610e71610f62565b815481101515610e7d57fe5b906000526020600020015483111515610e9557600080fd5b5b610ea08484611abc565b610ea8610f62565b91505092915050565b600080610ebd83610780565b1515610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f20726573756c742073657420666f72205f6461746500000000000000000081525060200191505060405180910390fd5b6034600084815260200190815260200160002054603560008581526020019081526020016000205491509150915091565b6000600160338054905003905090565b8073ffffffffffffffffffffffffffffffffffffffff1663d6e7444d84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b810190808051906020019092919050505015156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f6b656e207061697220646f6573206e6f742065786973740000000000000081525060200191505060405180910390fd5b82603760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111bc30611476565b505050565b60008060008060008587101515611266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f737461727444617465206d757374206265206c657373207468616e20656e644481526020017f617465000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016033805490500391505b6000821180156112825750600084145b156112bb578560338381548110151561129757fe5b90600052602060002001541115156112ad578193505b818060019003925050611272565b600084111515611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8660338581548110151561136957fe5b906000526020600020015410151515611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8390505b600081101580156114255750600083145b15611460578660338281548110151561143a57fe5b90600052602060002001541015611452576001810192505b808060019003915050611414565b61146a8385610615565b94505050505092915050565b60008060019054906101000a900460ff16806114965750611495611bbb565b5b806114ad57506000809054906101000a900460ff16155b1515611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff161590508015611596576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5f64617461536f757263652063616e6e6f74206265206164647265737328302981525060200191505060405180910390fd5b81603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060336000908060018154018082558091505090600182039060005260206000200160009091929091909150555080156116ca5760008060016101000a81548160ff0219169083151502179055505b5050565b603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808211151561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5f696e646578206d7573742062652067726561746572207468616e203000000081525060200191505060405180910390fd5b81603380549050119050919050565b6060600060606000806001878703019350836040519080825280602002602001820160405280156117bc5781602001602082028038833980820191505090505b509250600091508690505b858111151561181b576033818154811015156117df57fe5b906000526020600020015483838151811015156117f857fe5b9060200190602002018181525050818060010192505080806001019150506117c7565b8294505050505092915050565b6060600080600080600080600061184a60028a51611bcc90919063ffffffff16565b96506000955061186560018a51611bf690919063ffffffff16565b94505b84861015611a615761189660026118888789611c1790919063ffffffff16565b611bcc90919063ffffffff16565b935088848151811015156118a657fe5b90602001906020020151925088858151811015156118c057fe5b9060200190602002015189858151811015156118d857fe5b906020019060200201518a868151811015156118f057fe5b9060200190602002018b8881518110151561190757fe5b906020019060200201828152508281525050508591508590505b848110156119cd5761194a898281518110151561193a57fe5b9060200190602002015184611c38565b156119c057888181518110151561195d57fe5b90602001906020020151898381518110151561197557fe5b906020019060200201518a8481518110151561198d57fe5b9060200190602002018b848151811015156119a457fe5b9060200190602002018281525082815250505081806001019250505b8080600101915050611921565b88858151811015156119db57fe5b9060200190602002015189838151811015156119f357fe5b906020019060200201518a84815181101515611a0b57fe5b9060200190602002018b88815181101515611a2257fe5b9060200190602002018281525082815250505086821015611a5857611a51600183611c1790919063ffffffff16565b9550611a5c565b8194505b611868565b88975050505050505050919050565b600080600060028451811515611a8257fe5b0491508382815181101515611a9357fe5b906020019060200201519050603460008281526020019081526020016000205492505050919050565b816034600083815260200190815260200160002081600019169055506033819080600181540180825580915050906001820390600052602060002001600090919290919091505550611b0c610f62565b6035600083815260200190815260200160002081905550611b2d8282611c73565b7f441cd35745cc95136f39641bf16b52089bd7e481d97d7db059792befa3caec198282611b58610f62565b336040518085600019166000191681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050565b600080303b90506000811491505090565b600080600083111515611bde57600080fd5b8284811515611be957fe5b0490508091505092915050565b600080838311151515611c0857600080fd5b82840390508091505092915050565b6000808284019050838110151515611c2e57600080fd5b8091505092915050565b600060346000838152602001908152602001600020546001900460346000858152602001908152602001600020546001900410905092915050565b50505600a165627a7a72305820229d59cff97483188e4f5407c14d921953d2d030adeb5e4dedef366296c037e50029a165627a7a7230582073db6e5aa54cd39c15d69a2392f41e503a52897648eced8cbae04b6861f41d390029", "deployedBytecode": "0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631a3eeea5146100725780632cbcda251461011557806334c106511461016c578063b06725bc146101cf578063cd8a877d1461024a575b600080fd5b34801561007e57600080fd5b506100d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102ed565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561012157600080fd5b5061012a61032f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017857600080fd5b506101cd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610354565b005b3480156101db57600080fd5b50610230600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106e9565b604051808215151515815260200191505060405180910390f35b34801561025657600080fd5b506102ab600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061072c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60016020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061036083836106e9565b1515156103fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f63616e6e6f7420616464206475706c696361746520746f6b656e20707269636581526020017f206461746120666565640000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6104036107d3565b604051809103906000f08015801561041f573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663c0c53b8b84846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561054657600080fd5b505af115801561055a573d6000803e3d6000fd5b5050505080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8c67dba325dc55d3fa0b9c6c22893c34f4ba8922df64095f16ffb19cef347791818484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661070c848461072c565b73ffffffffffffffffffffffffffffffffffffffff161415905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b604051611cc3806107e4833901905600608060405234801561001057600080fd5b50611ca3806100206000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307acc14b146101015780631a0ba4f2146101545780631b076edc1461019957806325be124e146101f05780632cbcda251461024757806330adb55d1461029e5780636a2ea57e146102ee5780636e4aa4d0146103215780636f1e84981461034c57806371a1c0ae1461037f57806392549bf214610396578063a25fa35c146103e5578063c0a6ab7914610435578063c0c53b8b14610460578063c2605a64146104e3578063c4d66de814610536578063d21220a714610579578063dab21b63146105d0575b600080fd5b34801561010d57600080fd5b506101366004803603810190808035906020019092919080359060200190929190505050610615565b60405180826000191660001916815260200191505060405180910390f35b34801561016057600080fd5b5061017f60048036038101908080359060200190929190505050610780565b604051808215151515815260200191505060405180910390f35b3480156101a557600080fd5b506101ae61079f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101fc57600080fd5b506102056107c5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025357600080fd5b5061025c6107eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102aa57600080fd5b506102c960048036038101908080359060200190929190505050610811565b6040518083600019166000191681526020018281526020019250505060405180910390f35b3480156102fa57600080fd5b506103036108e1565b60405180826000191660001916815260200191505060405180910390f35b34801561032d57600080fd5b5061033661091c565b6040518082815260200191505060405180910390f35b34801561035857600080fd5b50610361610944565b60405180826000191660001916815260200191505060405180910390f35b34801561038b57600080fd5b50610394610abe565b005b3480156103a257600080fd5b506103cf600480360381019080803560001916906020019092919080359060200190929190505050610cf3565b6040518082815260200191505060405180910390f35b3480156103f157600080fd5b5061041060048036038101908080359060200190929190505050610eb1565b6040518083600019166000191681526020018281526020019250505060405180910390f35b34801561044157600080fd5b5061044a610f62565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b506104e1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f72565b005b3480156104ef57600080fd5b5061051860048036038101908080359060200190929190803590602001909291905050506111c1565b60405180826000191660001916815260200191505060405180910390f35b34801561054257600080fd5b50610577600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611476565b005b34801561058557600080fd5b5061058e6116ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105dc57600080fd5b506105fb600480360381019080803590602001909291905050506116f4565b604051808215151515815260200191505060405180910390f35b60006060808385111515156106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f7374617274496e646578206d757374206265206c657373207468616e206f722081526020017f657175616c20746f20656e64496e64657800000000000000000000000000000081525060400191505060405180910390fd5b600085111515610756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f7374617274496e646578206d7573742062652067726561746572207468616e2081526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610760858561177c565b915061076b82611828565b905061077681611a70565b9250505092915050565b6000806035600084815260200190815260200160002054119050919050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061081d836116f4565b1515610891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f20726573756c742073657420666f72205f696e646578000000000000000081525060200191505060405180910390fd5b603460006033858154811015156108a457fe5b90600052602060002001548152602001908152602001600020546033848154811015156108cd57fe5b906000526020600020015491509150915091565b60006034600060336108f1610f62565b8154811015156108fd57fe5b9060005260206000200154815260200190815260200160002054905090565b60006033610928610f62565b81548110151561093457fe5b9060005260206000200154905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b505050506040513d6020811015610aa557600080fd5b8101908080519060200190929190505050600102905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b810190808051906020019092919050505090503073ffffffffffffffffffffffffffffffffffffffff166392549bf282600102426040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b81019080805190602001909291905050505050565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5468652063616c6c6572206973206e6f7420746865206461746120736f75726381526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81428111151515610e59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f446174652063616e6e6f7420626520696e20746865206675747572650000000081525060200191505060405180910390fd5b60006033805490501115610e96576033610e71610f62565b815481101515610e7d57fe5b906000526020600020015483111515610e9557600080fd5b5b610ea08484611abc565b610ea8610f62565b91505092915050565b600080610ebd83610780565b1515610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f20726573756c742073657420666f72205f6461746500000000000000000081525060200191505060405180910390fd5b6034600084815260200190815260200160002054603560008581526020019081526020016000205491509150915091565b6000600160338054905003905090565b8073ffffffffffffffffffffffffffffffffffffffff1663d6e7444d84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b810190808051906020019092919050505015156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f6b656e207061697220646f6573206e6f742065786973740000000000000081525060200191505060405180910390fd5b82603760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111bc30611476565b505050565b60008060008060008587101515611266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f737461727444617465206d757374206265206c657373207468616e20656e644481526020017f617465000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016033805490500391505b6000821180156112825750600084145b156112bb578560338381548110151561129757fe5b90600052602060002001541115156112ad578193505b818060019003925050611272565b600084111515611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8660338581548110151561136957fe5b906000526020600020015410151515611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8390505b600081101580156114255750600083145b15611460578660338281548110151561143a57fe5b90600052602060002001541015611452576001810192505b808060019003915050611414565b61146a8385610615565b94505050505092915050565b60008060019054906101000a900460ff16806114965750611495611bbb565b5b806114ad57506000809054906101000a900460ff16155b1515611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff161590508015611596576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5f64617461536f757263652063616e6e6f74206265206164647265737328302981525060200191505060405180910390fd5b81603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060336000908060018154018082558091505090600182039060005260206000200160009091929091909150555080156116ca5760008060016101000a81548160ff0219169083151502179055505b5050565b603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808211151561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5f696e646578206d7573742062652067726561746572207468616e203000000081525060200191505060405180910390fd5b81603380549050119050919050565b6060600060606000806001878703019350836040519080825280602002602001820160405280156117bc5781602001602082028038833980820191505090505b509250600091508690505b858111151561181b576033818154811015156117df57fe5b906000526020600020015483838151811015156117f857fe5b9060200190602002018181525050818060010192505080806001019150506117c7565b8294505050505092915050565b6060600080600080600080600061184a60028a51611bcc90919063ffffffff16565b96506000955061186560018a51611bf690919063ffffffff16565b94505b84861015611a615761189660026118888789611c1790919063ffffffff16565b611bcc90919063ffffffff16565b935088848151811015156118a657fe5b90602001906020020151925088858151811015156118c057fe5b9060200190602002015189858151811015156118d857fe5b906020019060200201518a868151811015156118f057fe5b9060200190602002018b8881518110151561190757fe5b906020019060200201828152508281525050508591508590505b848110156119cd5761194a898281518110151561193a57fe5b9060200190602002015184611c38565b156119c057888181518110151561195d57fe5b90602001906020020151898381518110151561197557fe5b906020019060200201518a8481518110151561198d57fe5b9060200190602002018b848151811015156119a457fe5b9060200190602002018281525082815250505081806001019250505b8080600101915050611921565b88858151811015156119db57fe5b9060200190602002015189838151811015156119f357fe5b906020019060200201518a84815181101515611a0b57fe5b9060200190602002018b88815181101515611a2257fe5b9060200190602002018281525082815250505086821015611a5857611a51600183611c1790919063ffffffff16565b9550611a5c565b8194505b611868565b88975050505050505050919050565b600080600060028451811515611a8257fe5b0491508382815181101515611a9357fe5b906020019060200201519050603460008281526020019081526020016000205492505050919050565b816034600083815260200190815260200160002081600019169055506033819080600181540180825580915050906001820390600052602060002001600090919290919091505550611b0c610f62565b6035600083815260200190815260200160002081905550611b2d8282611c73565b7f441cd35745cc95136f39641bf16b52089bd7e481d97d7db059792befa3caec198282611b58610f62565b336040518085600019166000191681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050565b600080303b90506000811491505090565b600080600083111515611bde57600080fd5b8284811515611be957fe5b0490508091505092915050565b600080838311151515611c0857600080fd5b82840390508091505092915050565b6000808284019050838110151515611c2e57600080fd5b8091505092915050565b600060346000838152602001908152602001600020546001900460346000858152602001908152602001600020546001900410905092915050565b50505600a165627a7a72305820229d59cff97483188e4f5407c14d921953d2d030adeb5e4dedef366296c037e50029a165627a7a7230582073db6e5aa54cd39c15d69a2392f41e503a52897648eced8cbae04b6861f41d390029", "sourceMap": "63:1260:2:-;;;377:99;8:9:-1;5:2;;;30:1;27;20:12;5:2;377:99:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;455:16;437:15;;:34;;;;;;;;;;;;;;;;;;377:99;63:1260;;;;;;", "deployedSourceMap": "63:1260:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;287:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:85:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;199:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;199:39:2;;;;;;;;;;;;;;;;;;;;;;;;;;;480:476;;8:9:-1;5:2;;;30:1;27;20:12;5:2;480:476:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1135:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1135:185:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;960:171;;8:9:-1;5:2;;;30:1;27;20:12;5:2;960:171:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;287:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;199:39::-;;;;;;;;;;;;;:::o;480:476::-;674:37;580:40;605:6;613;580:24;:40::i;:::-;579:41;571:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;714:24;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;714:24:2;674:64;;744:18;:29;;;774:6;782;790:15;;;;;;;;;;;744:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;744:62:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;744:62:2;;;;851:18;813:19;:27;833:6;813:27;;;;;;;;;;;;;;;:35;841:6;813:35;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;881:70;915:18;936:6;944;881:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;480:476;;;:::o;1135:185::-;1234:4;1313:1;1255:60;;1263:37;1285:6;1293;1263:21;:37::i;:::-;1255:60;;;;1248:67;;1135:185;;;;:::o;960:171::-;1056:18;1091:19;:27;1111:6;1091:27;;;;;;;;;;;;;;;:35;1119:6;1091:35;;;;;;;;;;;;;;;;;;;;;;;;;1084:42;;960:171;;;;:::o;63:1260::-;;;;;;;;;;:::o", "source": "pragma solidity >=0.4.24;\n\nimport \"./TokenPriceDataFeed.sol\";\n\ncontract TokenPriceDataFeedFactory {\n\n event TokenPriceDataFeedCreated(address tokenPriceDataFeed, address token1, address token2);\n\n IExchangeAdapter public exchangeAdapter;\n\n // token1 => token2 => TokenPriceDataFeed\n mapping(address => mapping(address => TokenPriceDataFeed)) public tokenPairToDataFeed;\n\n constructor(IExchangeAdapter _exchangeAdapter) public {\n exchangeAdapter = _exchangeAdapter;\n }\n\n function createTokenPriceDataFeed(\n address token1,\n address token2\n ) public {\n require(!tokenPriceDataFeedExists(token1, token2), 'cannot add duplicate token price data feed');\n\n TokenPriceDataFeed tokenPriceDataFeed = new TokenPriceDataFeed();\n tokenPriceDataFeed.initialize(token1, token2, exchangeAdapter);\n\n tokenPairToDataFeed[token1][token2] = tokenPriceDataFeed;\n\n emit TokenPriceDataFeedCreated(address(tokenPriceDataFeed), token1, token2);\n }\n\n function getTokenPriceDataFeed(address token1, address token2)\n public\n view\n returns (TokenPriceDataFeed)\n {\n return tokenPairToDataFeed[token1][token2];\n }\n\n function tokenPriceDataFeedExists(address token1, address token2)\n public\n view\n returns (bool)\n {\n return address(getTokenPriceDataFeed(token1, token2)) != address(0);\n }\n\n}\n", "sourcePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TokenPriceDataFeedFactory.sol", "ast": { "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TokenPriceDataFeedFactory.sol", "exportedSymbols": { "TokenPriceDataFeedFactory": [ 619 ] }, "id": 620, "nodeType": "SourceUnit", "nodes": [ { "id": 507, "literals": [ "solidity", ">=", "0.4", ".24" ], "nodeType": "PragmaDirective", "src": "0:25:2" }, { "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TokenPriceDataFeed.sol", "file": "./TokenPriceDataFeed.sol", "id": 508, "nodeType": "ImportDirective", "scope": 620, "sourceUnit": 506, "src": "27:34:2", "symbolAliases": [], "unitAlias": "" }, { "baseContracts": [], "contractDependencies": [ 505 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, "id": 619, "linearizedBaseContracts": [ 619 ], "name": "TokenPriceDataFeedFactory", "nodeType": "ContractDefinition", "nodes": [ { "anonymous": false, "documentation": null, "id": 516, "name": "TokenPriceDataFeedCreated", "nodeType": "EventDefinition", "parameters": { "id": 515, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 510, "indexed": false, "name": "tokenPriceDataFeed", "nodeType": "VariableDeclaration", "scope": 516, "src": "135:26:2", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 509, "name": "address", "nodeType": "ElementaryTypeName", "src": "135:7:2", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 512, "indexed": false, "name": "token1", "nodeType": "VariableDeclaration", "scope": 516, "src": "163:14:2", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 511, "name": "address", "nodeType": "ElementaryTypeName", "src": "163:7:2", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 514, "indexed": false, "name": "token2", "nodeType": "VariableDeclaration", "scope": 516, "src": "179:14:2", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 513, "name": "address", "nodeType": "ElementaryTypeName", "src": "179:7:2", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "src": "134:60:2" }, "src": "103:92:2" }, { "constant": false, "id": 518, "name": "exchangeAdapter", "nodeType": "VariableDeclaration", "scope": 619, "src": "199:39:2", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_contract$_IExchangeAdapter_$640", "typeString": "contract IExchangeAdapter" }, "typeName": { "contractScope": null, "id": 517, "name": "IExchangeAdapter", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 640, "src": "199:16:2", "typeDescriptions": { "typeIdentifier": "t_contract$_IExchangeAdapter_$640", "typeString": "contract IExchangeAdapter" } }, "value": null, "visibility": "public" }, { "constant": false, "id": 524, "name": "tokenPairToDataFeed", "nodeType": "VariableDeclaration", "scope": 619, "src": "287:85:2", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_TokenPriceDataFeed_$505_$_$", "typeString": "mapping(