async def uniswap_buy_input(input_token, output_token, input_quantity, max_slippage, max_gas, account, ethereum_provider): # set web3 with gas price global gas_in_gwei gas_in_gwei = max_gas w3 = Web3(Web3.HTTPProvider(ethereum_provider)) w3.eth.setGasPriceStrategy(gas_price_strategy) # set uniswap with w3 and slippage uniswap_wrapper = Uniswap(account['address'], account['pkey'], web3=w3, version=2, max_slippage=max_slippage) # trade exact input_quantity of input_token for output_token if input_token == ETH_ADDRESS: req = uniswap_wrapper._eth_to_token_swap_input( Web3.toChecksumAddress(output_token), input_quantity, None) else: req = uniswap_wrapper.make_trade(Web3.toChecksumAddress(input_token), Web3.toChecksumAddress(output_token), input_quantity) tx = w3.eth.waitForTransactionReceipt(req) # reformat output tx_dict = to_dict(tx) return tx_dict
def client(request, web3: Web3, ganache: GanacheInstance): uniswap = Uniswap(ganache.eth_address, ganache.eth_privkey, web3=web3, version=request.param) uniswap._buy_test_assets() return uniswap
def test_assets(client: Uniswap): """ Buy some DAI and USDC to test with. """ tokens = client._get_token_addresses() for token_name, amount in [("DAI", 100 * 10 ** 18), ("USDC", 100 * 10 ** 6)]: token_addr = tokens[token_name] price = client.get_eth_token_output_price(token_addr, amount) logger.info(f"Cost of {amount} {token_name}: {price}") logger.info("Buying...") tx = client.make_trade_output(tokens["ETH"], token_addr, amount) client.w3.eth.waitForTransactionReceipt(tx)
def __init__(self, currency_symbol): super().__init__() try: # self._exchange_addresses = getExchangeAddressesForToken(currency_symbol) self._decimals = Token().from_symbol(currency_symbol).decimals except IndexError: raise RuntimeError( "Unknown currency_symbol {}, need to add address to token_class.py" .format(currency_symbol)) self.currency_symbol = currency_symbol self.exchange_name = "Uniswap v3" self.command_names = ["uniswap"] self.short_url = "https://bit.ly/35nae4n" # main uniswap pre-selected to 0xbtc self.volume_eth = 0 self.show_yield = True self.hourly_volume_tokens = [ ] # list of volume for each of the last N hours self._time_volume_last_updated = 0 self._w3 = Web3(Web3.HTTPProvider(ETHEREUM_NODE_URL)) self._uniswap_api = Uniswap(address=None, private_key=None, version=3, web3=self._w3)
def test_remove_liquidity( self, client: Uniswap, web3: Web3, token, max_token, expectation ): with expectation: r = client.remove_liquidity(token, max_token) tx = web3.eth.waitForTransactionReceipt(r) assert tx.status # type: ignore
def test_get_ex_token_balance( self, client: Uniswap, token, ): if not client.version == 1: pytest.skip("Tested method only supported on Uniswap v1") r = client.get_ex_token_balance(token) assert r
def get_exchange_rate( self, client: Uniswap, token, ): r = client.get_exchange_rate(token) assert r
def buy(front_runner_data: FrontRunnerData, trade_amount: int, uniswap_wrapper: Uniswap, w3: Web3): print("buying ", trade_amount, " of ", front_runner_data.input_decoded[1]['path'][1]) tx = uniswap_wrapper.make_trade( DefaultConfig.eth, front_runner_data.input_decoded[1]['path'][1], trade_amount) print("https://etherscan.io/tx/" + json.loads(w3.toJSON(tx)))
def test_make_trade( self, client: Uniswap, web3: Web3, input_token, output_token, qty: int, recipient, expectation, ): with expectation(): bal_in_before = client.get_token_balance(input_token) r = client.make_trade(input_token, output_token, qty, recipient) tx = web3.eth.waitForTransactionReceipt(r) assert tx.status # type: ignore # TODO: Checks for ETH, taking gas into account bal_in_after = client.get_token_balance(input_token) if input_token != self.eth: assert bal_in_before - qty == bal_in_after
def get_slippage_percentage(front_runner_data: FrontRunnerData, w3: Web3, uniswap_wrapper: Uniswap): value_villain_tx = int(w3.toJSON(front_runner_data.tx['value'])) coin_villain = front_runner_data.input_decoded[1]['path'][1] front_runner_data.public_amount_min = uniswap_wrapper.get_eth_token_input_price( coin_villain, value_villain_tx) front_runner_data.amount_min = front_runner_data.input_decoded[1][ 'amountOutMin'] front_runner_data.trade_amount = front_runner_data.public_amount_min - front_runner_data.amount_min print_debug_info(front_runner_data, w3) return (front_runner_data.public_amount_min - front_runner_data.amount_min) / front_runner_data.amount_min * 100
def sell(front_runner_data: FrontRunnerData, trade_amount: int, uniswap_wrapper: Uniswap, w3: Web3): coin = Web3.toChecksumAddress( front_runner_data.input_decoded[1]['path'][1]) for i in range(1000): try: trade_amount = get_balance_by_token(coin) print("selling ", trade_amount, " of ", coin) tx = uniswap_wrapper.make_trade(coin, DefaultConfig.eth, int(trade_amount)) print("https://etherscan.io/tx/" + str(json.loads(w3.toJSON(tx)))) except Exception as e: print(e) time.sleep(1) else: sys.exit() break
block_number = 0 def get_price(cfg): return cfg['SAI'] / cfg['0'] def bootstrapped_data(f, cfg, rows): f.write("Uniswap in 0 gets {:.0f};\n".format(cfg['0'])) f.write("Uniswap in SAI gets {:.0f};\n".format(cfg['SAI'])) f.write("GetPrice SAI 0;\n") for row in rows: f.write(row) uniswap = Uniswap() line_num = 0 for line in fin.readlines(): line_num += 1 if 'block' in line: words = line.split() block_number = int(words[-1]) if block_number > int(sys.argv[3]): break uniswap.process(line) if block_number < int(sys.argv[2]): config = deepcopy(uniswap.config()) #arghhhhh! elif block_number <= int(sys.argv[3]):
infura_key = secrets["INFURA_KEY"] wallet_name = secrets["WALLET_NAME"] wallet_address = secrets["WALLET_ADDRESS"] private_key = secrets["PRIVATE_KEY"] print(f"Using {wallet_name}, with a public address of {wallet_address}") ##############################---WEB3---####################################### infura_url = f"https://mainnet.infura.io/v3/{infura_key}" web3 = Web3(Web3.HTTPProvider(infura_url)) assert web3.isConnected(), "Not connected to ETH node in INFURA" #############################---UNISWAP---##################################### uniswap_v1 = Uniswap( address=wallet_address, private_key=private_key, web3=web3, version=1, ) uniswap_v2 = Uniswap( address=wallet_address, private_key=private_key, web3=web3, version=2, ) #############################---TOKENS---###################################### tokens = utils.getJSONinfo("Tokens.json") blacklist = ["ETH", "WETH", "BZRX", "BAL"] # Note that ETH and WETH are == ETH # These tokens give different problems.
def test_get_fee_taker(self, client: Uniswap): r = client.get_fee_taker() assert r == 0.003
miner.print_block_state() for _ in range(10): miner.block_update() miner.print_block_state() """test rewarding system""" balances_Gwei = [] balances_GAS = [] miner.print_balance_state() balances_Gwei.append(miner.balance_Gwei) balances_GAS.append(miner.balance_GAS) # case 1: pool from uniswap import Uniswap us = Uniswap('-1', 100000, 20000000, 1000000) # 1:200 print(miner.reward(pool=us)) miner.print_balance_state() balances_Gwei.append(miner.balance_Gwei) balances_GAS.append(miner.balance_GAS) # case 2: oracle miner.reward_mode = "oracle" print(miner.reward(oracle_ratio=400.)) miner.print_balance_state() balances_Gwei.append(miner.balance_Gwei) balances_GAS.append(miner.balance_GAS) """Plot""" rounds = [0, 1, 2]
from web3 import Web3, middleware from web3.gas_strategies.time_based import construct_time_based_gas_price_strategy def value_based_gas_price_strategy(web3, transaction_params=None): # todo base on villain gas and value of transfer return Web3.toWei(150, 'gwei') w3 = Web3(Web3.IPCProvider(DefaultConfig.ipc_provider)) w3.eth.setGasPriceStrategy(value_based_gas_price_strategy) uniswap_wrapper = Uniswap(DefaultConfig.address, DefaultConfig.private_key, version=2, web3=w3, max_slippage=10.0) uni_contract = w3.eth.contract(address=DefaultConfig.uniswap_router_address, abi=json.loads(DefaultConfig.abi)) coin = Web3.toChecksumAddress("0xb1fda21901afbded910af72588c8dfd6020aced1") trade_amount = 200 * 10**9 def buy(): for i in range(10000): try: print("buying ", trade_amount, " of ", coin)
from uniswap import Uniswap address = "0x0000000000000000000000000000000000000001" private_key = None PROVIDER = "https://mainnet.infura.io/v3/PRIVATE-KEY" uniswap_wrapper = Uniswap(address, private_key, provider=PROVIDER, version=2) eth_c = "0x0000000000000000000000000000000000000000" bat = "0x0D8775F648430679A709E98d2b0Cb6250d2887EF" dai = "0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359" usdt = "0xdAC17F958D2ee523a2206206994597C13D831ec7" uni = "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984" dai_rate = uniswap_wrapper.get_eth_token_input_price(dai, 5 * 10**18) bat_rate = uniswap_wrapper.get_eth_token_input_price(bat, 1 * 10**18) print(dai_rate) print(bat_rate) conversion = ((1 / bat_rate) * (dai_rate / 10**6)) * (10**18) print(conversion) print('${:,.2f}'.format(conversion))
import requests from uniswap import Uniswap from config import PROVIDER address = "0x0000000000000000000000000000000000000000" private_key = None uniswap_wrapper = Uniswap( address, private_key, version=2, provider=PROVIDER) # pass version=2 to use Uniswap v2 eth = "0x0000000000000000000000000000000000000000" gol = "0xF4ecdBa8ba4144Ff3a2d8792Cad9051431Aa4F64" ETH_GGOL_PRICE = uniswap_wrapper.get_eth_token_output_price(gol, 1) / (1 * 10**18) GGOL_SUPPLY = 14_406_844_988_437 / 10**9 def get_data(): return requests.get( 'https://api.coingecko.com/api/v3/coins/ethereum').json() def get_gol_market_data(): resp = get_data() current_price = get_current_price(resp)['current_price'] market_cap = get_market_cap(current_price)['market_cap'] return { "market_data": { "current_price": current_price, "market_cap": market_cap,
import os os.environ['PROVIDER'] = 'https://goerli.prylabs.net/' #os.environ['PROVIDER'] = 'https://main-rpc.linkpool.io' import time from uniswap import Uniswap address = "0xFe594E862c3ce76E192997EABFC41Afd7C975b52" private_key = "3a8bb854c7a86d950c0d3e0b5b1bbcd3912389a95fa530e46c911fe1de099808" # or None, if you're not going to make transactions uniswap_wrapper = Uniswap(address, private_key, version=2) # pass version=2 to use Uniswap v2 eth = "0x0000000000000000000000000000000000000000" weth = uniswap_wrapper.w3.toChecksumAddress( "0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6") kwh = uniswap_wrapper.w3.toChecksumAddress( "0x78B57C213a18DF1DAbC647149902ea1966E0119C") amount = 1 * 10**18 # Recursive function to get the price to the plus minus 2 percent range within price def bump_price(target_price_cents): eth_bal = uniswap_wrapper.get_eth_balance() kwh_bal = uniswap_wrapper.get_token_balance(kwh) # current price ETH per one unit of KWH current_price = uniswap_wrapper.get_token_token_input_price( kwh, weth, amount) / 10**18 current_price_cents = current_price * 400 * 100
return self._buy_ETH(pool) if __name__ == "__main__": from uniswap import Uniswap import random import matplotlib.pyplot as plt random.seed(12345) # Arbitrager arbitrager = Arbitrager(1000000000, 200.) balances = [] """init""" us = Uniswap('-1', 100000, 20000000, 1000000) # 1:200 us.print_pool_state(bool_LT=True) """Providing Liquidity""" us.join('0', 2000, 400001) us.print_pool_state(bool_LT=True) """Txs""" for _ in range(1000): if random.random() < 0.5: us.ETH_to_ERC20(1000) else: us.ERC20_to_ETH_exact(1000) # print(us.ETH, '\t', us.ERC20, '\t', float(us.ERC20 / us.ETH), '\t', arbitrager.balance_ERC20) arbitrager.arbitrage(us) # print(us.ETH, '\t', us.ERC20, '\t', float(us.ERC20 / us.ETH), '\t', arbitrager.balance_ERC20) # print()
figure = plt.gcf() # get current figure figure.set_size_inches(8, 6) plt.savefig(get_PATH(args.path) + 'ETHNERC20_Curve.png', format='png', dpi=300) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=950327) parser.add_argument('--path') # location of log files parser.add_argument('--no-save', action='store_true') args = parser.parse_args() print(args) random.seed(args.seed) """init""" us = Uniswap( address='-1', amount_ETH=1000000, amount_ERC20=200000000, # ETH:ERC20 = 1:200 init_LT=1000000, fee=0.003) arbitrager = Arbitrager(1000000000, 200.) # [ERC20] """Simulation) # ETH <-> ERC20 & Arbitraging Timing # k & Arbitraging Timing # Arbitrager's Gain """ Arbitraging_Curve(args, us, arbitrager, display=args.no_save)
return self._buy_Gwei(pool) if __name__ == "__main__": from uniswap import Uniswap import random import matplotlib.pyplot as plt random.seed(12345) # Arbitrager arbitrager = Arbitrager(1000000000, 200.) balances = [] """init""" us = Uniswap('-1', 100000, 20000000, 1000000) # 1:200 us.print_pool_state(bool_LT=True) """Providing Liquidity""" us.join('0', 2000, 400001) us.print_pool_state(bool_LT=True) """Txs""" for _ in range(1000): if random.random() < 0.5: us.Gwei_to_GAS(1000) else: us.GAS_to_Gwei_exact(1000) # print(us.Gwei, '\t', us.GAS, '\t', float(us.GAS / us.Gwei), '\t', arbitrager.balance_GAS) arbitrager.arbitrage(us) # print(us.Gwei, '\t', us.GAS, '\t', float(us.GAS / us.Gwei), '\t', arbitrager.balance_GAS) # print()
else: figure = plt.gcf() # get current figure figure.set_size_inches(8, 6) plt.savefig(get_PATH(args.path) + 'GweiNGAS_Curve.png', format='png', dpi=300) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=950327) parser.add_argument('--path') # location of log files parser.add_argument('--no-save', action='store_true') args = parser.parse_args() print(args) random.seed(args.seed) """init""" us = Uniswap(address='-1', amount_Gwei=1000000, amount_GAS=200000000, # Gwei:GAS = 1:200 init_LT=1000000, fee=0.003) arbitrager = Arbitrager(1000000000, 200.) # [GAS] """Simulation) # Gwei <-> GAS & Arbitraging Timing # k & Arbitraging Timing # Arbitrager's Gain """ Arbitraging_Curve(args, us, arbitrager, display=args.no_save)
def test_get_fee_taker(self, client: Uniswap): if client.version not in [1, 2]: pytest.skip("Tested method not supported in this Uniswap version") r = client.get_fee_taker() assert r == 0.003
def client(request, web3: Web3, ganache: GanacheInstance): return Uniswap( ganache.eth_address, ganache.eth_privkey, web3=web3, version=request.param )
if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=950327) parser.add_argument('--path') # location of log files parser.add_argument('--no-save', action='store_true') args = parser.parse_args() print(args) random.seed(args.seed) """init""" us = Uniswap(address='-1', amount_ETH=1000000, amount_ERC20=200000000, # ETH:ERC20 = 1:200 init_LT=1000000, fee=0.003) print(">>> init pool.") us.print_pool_state(bool_LT=True) """Simulation 1-1) Swap & k""" Swap_k_Curve(args, us, display=args.no_save) """Simulation 1-2) ETH -> ERC20 Swap Curve""" ETH2ERC20_Swap_Curve(args, us, display=args.no_save) """Simulation 1-3) ERC20 -> ETH Swap Curve""" ERC202ETH_Swap_Curve(args, us, display=args.no_save)
def test_add_liquidity(self, client: Uniswap, web3: Web3, token, max_eth): r = client.add_liquidity(token, max_eth) tx = web3.eth.waitForTransactionReceipt(r, timeout=6000) assert tx.status # type: ignore
import os from web3 import Web3 from uniswap import Uniswap from decimal import Decimal w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/')) address = "0x0000000000000000000000000000000000000000" private_key = None uniswap_wrapper = Uniswap( address, private_key, version=2, provider='https://mainnet.infura.io/v3/0948dcdb150c41efb91e1e9e35aee742' ) # pass version=2 to use Uniswap v2 bond_address = '0x64C29aAc69d3122f6e5531CecA1B753F95350AF4' bond_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":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","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":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]' sum = Web3.toChecksumAddress(bond_address) bond_contract = w3.eth.contract(address=bond_address, abi=bond_abi) reserve = bond_contract.functions.getReserves().call() print(reserve) print(w3.fromWei(reserve[1], 'ether')) print(uniswap_wrapper.get_fee_maker(), uniswap_wrapper.get_fee_taker()) print(Decimal(reserve[0] * 10**-8) / w3.fromWei(reserve[1], 'ether')) def buying_amount(qty, token, abi): token_contract = w3.eth.contract(address=token, abi=abi) reserve = token_contract.functions.getReserves().call()
parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=950327) parser.add_argument('--path') # location of log files parser.add_argument('--no-save', action='store_true') args = parser.parse_args() print(args) random.seed(args.seed) current_block_number = 0 current_block_gas_limit = 12000000 """init""" us = Uniswap(address='-1', amount_Gwei=1000000, amount_GAS=200000000, # Gwei:GAS = 1:200 init_LT=1000000, fee=0.003) miner = Miner(current_block_number, current_block_gas_limit) print(">>> init pool.") us.print_pool_state(bool_LT=True) """Simulation) # Test rewarding system # Simulate one at a time. """ # """Simulation 1-1) pool"""