def test_should_create_offers_on_startup(self, sai: SaiDeployment): # given keeper = self.setup_keeper(sai) keeper.max_weth_amount = Wad.from_number(10) keeper.min_weth_amount = Wad.from_number(5) keeper.max_sai_amount = Wad.from_number(100) keeper.min_sai_amount = Wad.from_number(50) keeper.sai_dust_cutoff = Wad.from_number(0) keeper.weth_dust_cutoff = Wad.from_number(0) keeper.min_margin_buy = 0.01 keeper.avg_margin_buy = 0.02 keeper.max_margin_buy = 0.03 keeper.min_margin_sell = 0.02 keeper.avg_margin_sell = 0.03 keeper.max_margin_sell = 0.04 keeper.round_places = 2 keeper.gas_price = DefaultGasPrice() # and DSToken(web3=sai.web3, address=sai.tub.gem()).mint(Wad.from_number(1000)).transact() DSToken(web3=sai.web3, address=sai.tub.sai()).mint(Wad.from_number(1000)).transact() # and print(sai.tub.pip()) DSValue(web3=sai.web3, address=sai.tub.pip()).poke_with_int( Wad.from_number(250).value).transact() # when keeper.approve() keeper.synchronize_offers() # then assert len(keeper.otc.active_offers()) == 2
def setup_method(self): self.web3 = Web3(EthereumTesterProvider()) self.web3.eth.defaultAccount = self.web3.eth.accounts[0] self.our_address = Address(self.web3.eth.defaultAccount) self.otc = SimpleMarket.deploy(self.web3) self.token1 = DSToken.deploy(self.web3, 'AAA') self.token1.mint(Wad.from_number(100)).transact() self.token2 = DSToken.deploy(self.web3, 'BBB') self.token2.mint(Wad.from_number(100)).transact()
def setup_method(self): self.web3 = Web3(EthereumTesterProvider()) self.web3.eth.defaultAccount = self.web3.eth.accounts[0] self.our_address = Address(self.web3.eth.defaultAccount) self.other_address = Address(self.web3.eth.accounts[1]) self.tx = TxManager.deploy(self.web3) self.token1 = DSToken.deploy(self.web3, 'ABC') self.token1.mint(Wad.from_number(1000000)).transact() self.token2 = DSToken.deploy(self.web3, 'DEF')
def test_equals(self): # given token1 = DSToken.deploy(self.web3, 'ABC') token2 = DSToken.deploy(self.web3, 'DEF') token2b = ERC20Token(web3=self.web3, address=token2.address) # expect assert token1 == token1 assert token2 == token2b assert not token1 == token2 assert not token1 == token2b
def setup_method(self): self.web3 = Web3(EthereumTesterProvider()) self.web3.eth.defaultAccount = self.web3.eth.accounts[0] self.our_address = Address(self.web3.eth.defaultAccount) self.second_address = Address(self.web3.eth.accounts[1]) self.token = DSToken.deploy(self.web3, 'ABC') self.token.mint(Wad(1000000)).transact()
def setup_method(self): self.web3 = Web3(EthereumTesterProvider()) self.web3.eth.defaultAccount = self.web3.eth.accounts[0] self.our_address = Address(self.web3.eth.defaultAccount) self.etherdelta = EtherDelta.deploy(self.web3, admin=Address('0x1111100000999998888877777666665555544444'), fee_account=Address('0x8888877777666665555544444111110000099999'), account_levels_addr=Address('0x6666655555444441111188888777770000099999'), fee_make=Wad.from_number(0.01), fee_take=Wad.from_number(0.02), fee_rebate=Wad.from_number(0.03), api_server=None) self.token1 = DSToken.deploy(self.web3, 'AAA') self.token1.mint(Wad.from_number(100)).transact() self.token2 = DSToken.deploy(self.web3, 'BBB') self.token2.mint(Wad.from_number(100)).transact()
def new_sai() -> SaiDeployment: def deploy(web3, contract_name, args=None): contract_factory = web3.eth.contract( abi=json.loads( pkg_resources.resource_string('keeper.api.feed', f'abi/{contract_name}.abi')), bytecode=pkg_resources.resource_string('keeper.api.feed', f'abi/{contract_name}.bin')) tx_hash = contract_factory.deploy(args=args) receipt = web3.eth.getTransactionReceipt(tx_hash) return receipt['contractAddress'] web3 = Web3(EthereumTesterProvider()) web3.eth.defaultAccount = web3.eth.accounts[0] our_address = Address(web3.eth.defaultAccount) sai = DSToken.deploy(web3, 'SAI') sin = DSToken.deploy(web3, 'SIN') gem = DSToken.deploy(web3, 'ETH') pip = DSValue.deploy(web3) skr = DSToken.deploy(web3, 'SKR') pot = DSVault.deploy(web3) pit = DSVault.deploy(web3) tip = deploy(web3, 'Tip') dad = DSGuard.deploy(web3) jug = deploy(web3, 'SaiJug', [sai.address.address, sin.address.address]) jar = deploy( web3, 'SaiJar', [skr.address.address, gem.address.address, pip.address.address]) tub = Tub.deploy(web3, Address(jar), Address(jug), pot.address, pit.address, Address(tip)) tap = Tap.deploy(web3, tub.address, pit.address) top = Top.deploy(web3, tub.address, tap.address) # set permissions dad.permit(DSGuard.ANY, DSGuard.ANY, DSGuard.ANY).transact() tub.set_authority(dad.address) for auth in [sai, sin, skr, pot, pit, tap, top]: auth.set_authority(dad.address).transact() # approve, mint some GEMs tub.approve(directly()) gem.mint(Wad.from_number(1000000)).transact() web3.currentProvider.rpc_methods.evm_snapshot() return SaiDeployment(web3, our_address, gem, sai, sin, skr, tub, tap, top)
def setup_method(self): self.web3 = Web3(EthereumTesterProvider()) self.web3.eth.defaultAccount = self.web3.eth.accounts[0] self.our_address = Address(self.web3.eth.defaultAccount) self.etherdelta = EtherDelta.deploy( self.web3, admin=self.our_address, fee_account=self.our_address, account_levels_addr=self.our_address, fee_make=Wad(0), fee_take=Wad(0), fee_rebate=Wad(0), api_server='http://none.invalid') self.token1 = DSToken.deploy(self.web3, 'AAA') self.token1.mint(Wad.from_number(100)).transact()
def setup_method(self): self.web3 = Web3(EthereumTesterProvider()) self.web3.eth.defaultAccount = self.web3.eth.accounts[0] self.our_address = Address(self.web3.eth.defaultAccount) self.dstoken = DSToken.deploy(self.web3, 'ABC')
def setup_function(): global token token = DSToken.deploy(web3, 'ABC')
from keeper import Config from keeper.api.token import DSToken from keeper.api.token import ERC20Token parser = argparse.ArgumentParser(description='Dai Buy&Burn keeper. Buys DAI for MKR on forward auctions.') parser.add_argument("--rpc-host", help="JSON-RPC host (default: `localhost')", default="localhost", type=str) parser.add_argument("--rpc-port", help="JSON-RPC port (default: `8545')", default=8545, type=int) parser.add_argument("--eth-from", help="Ethereum account from which to send transactions", required=True, type=str) parser.add_argument("--frequency", help="Frequency of periodical checking of existing auctions (in seconds) (default: 60)", default=60, type=int) parser.add_argument("--mkr-dai-rate", help="Target MKR/DAI rate", required=True, type=float) parser.add_argument("--minimal-mkr-bid", help="Minimal amount of MKR you want to bid", required=True, type=float) parser.add_argument("--step", help="Incremental step towards the maximum price (value between 0 and 1)", required=True, type=float) args = parser.parse_args() web3 = Web3(HTTPProvider(endpoint_uri=f"http://{args.rpc_host}:{args.rpc_port}")) web3.eth.defaultAccount = args.eth_from config = Config(web3) auction_manager_address = Address(config.get_contract_address("auctionManager")) auction_manager = AuctionManager(web3=web3, address=auction_manager_address, is_splitting=True) trader_address = Address(args.eth_from) dai_address = ERC20Token.token_address_by_name("DAI") dai_token = ERC20Token(web3=web3, address=dai_address) mkr_address = ERC20Token.token_address_by_name("MKR") mkr_token = DSToken(web3=web3, address=mkr_address) strategy = BasicForwardAuctionStrategy(dai_token, mkr_token, args.mkr_dai_rate, args.step, Wad(args.minimal_mkr_bid * 1000000000000000000)) engine = AuctionEngine(auction_manager, trader_address, strategy, args.frequency) engine.start()