def finish_deploy(ctx, _acct): if 'mintforuser' in ctx['deployedcontracts'][_acct.address].keys(): mintforuser_txhash = ctx['deployedcontracts'][_acct.address]['mintforuser'] Printer.ppln(DEPLOY_SUCCESS_CELEBRATION) return bytes.fromhex(mintforuser_txhash.split("0x")[1]) else: exit(0)
def run(ctx): token = input("[-]input your token: ") token = token.strip() try: data = validate_then_decrypt(token, AES_KEY, HMAC_KEY) except Exception as err: print("[!]bad token") sys.exit(0) if len(data) != 74: #print(Printer.in_fg_color("[-]wrong token", r.red4)) print("[!]wrong token") sys.exit(0) acct = validate_game_account(ctx, data) if not balancecheck(ctx, acct): print( "[!]game account balance not enough, should >={} ETH, please send more..." .format(est_gas / 10**18)) sys.exit(0) montagy_address = deployer.run(ctx, acct) # generate new token data = acct.address.encode() + acct.key + montagy_address.encode() new_token = encrypt_then_mac(data, AES_KEY, HMAC_KEY) Printer.ppln( Printer.in_fg_color("[+]new token: {}".format(new_token), r.white1)) Printer.ppln( "[+]Your goal is to empty the Montagy contract's ETH balance.")
def run(ctx): token = input("[-]input your token: ") token = token.strip() data = validate_then_decrypt(token, AES_KEY, HMAC_KEY) if len(data) != 74: print(Printer.in_fg_color("[+]wrong token", r.red4)) sys.exit(0) acct = validate_game_account(ctx, data) if not is_account_exist(ctx, acct.address): print(Printer.in_fg_color("[+]wrong token", r.red4)) sys.exit(0) transfer_txhash = input( "[-]input your transaction hash of transfer enough ETH to deployer: ") if not transfercheck(ctx, acct, transfer_txhash): print(Printer.in_fg_color("[+]wrong transaction hash", r.red4)) sys.exit(0) tx_hash = deployer.run(ctx, acct) # generate new token data = acct.address.encode() + acct.key + tx_hash new_token = encrypt_then_mac(data, AES_KEY, HMAC_KEY) Printer.ppln( Printer.in_fg_color("[+]new token: {}".format(new_token), r.white1)) Printer.ppln("[+]Your goal is to convert 1wei Chaitin into 80 Flag")
def newPuzzle2(ctx, _contract, _p2bytes, _acct, _acc_nonce): #p.ppln("[*] calling newPuzzle2...") err, txhash = setNewPuzzle2(ctx, _contract, _p2bytes, _acct, _acc_nonce) if err: p.ppln(p.in_fg_color(("[!] " + str(err)), r.red5)) exit(0) else: return None, txhash.hex()
def register2(ctx, _contract, _bytecode, _acct, _acc_nonce): #p.ppln("[*] calling registerCode2...") err, txhash = registerCode2(ctx, _contract, _bytecode, _acct, _acc_nonce) if err: p.ppln(p.in_fg_color(("[!] " + str(err)), r.red5)) exit(0) else: return None, txhash.hex()
def run(ctx): new_token = input("[-]input your new token: ") new_token = new_token.strip() try: data = validate_then_decrypt(new_token, AES_KEY, HMAC_KEY) except Exception as err: print("[!]bad token") sys.exit(0) if len(data) != 114: print("[!]wrong token") sys.exit(0) data, msg = data[:-40], data[-40:] acct = validate_game_account(ctx, data) res = check_if_has_topic(ctx, acct, "0x" + msg.decode()) if res: flag = getflag() p.ppln(p.in_fg_color("[+] Congratulation! Here's the flag:", white1)) p.ppln(p.in_fg_color(flag, red1)) else: p.ppln( p.in_fg_color("[!] It seems that you didn't solve the puzzle.", white1)) p.ppln( p.in_fg_color( "[!] Note that it may take time for ethereum to update, so please try 1 min latter if you feel necessary.", white1)) #mov2(PANIC_INFO, SORRY_INFO, sz_col, sz_row)
def register2_review(ctx, _acct, _txhash): w3 = ctx['web3instance'] #p.ppln("[*] Checking for registerCode2 status... ") try: tx_receipt = w3.eth.waitForTransactionReceipt(_txhash, timeout=720) except Exception as err: p.ppln(str(err)) exit(0) addr = tx_receipt['transactionHash'].hex() if not addr: p.pln(p.in_fg_color("[!] registerCode Broken down", r.red5)) else: p.ppln("[+] registerCode " + p.in_fg_color("success", r.green1) + ", transaction hash: " + p.in_fg_color(addr, r.blue1))
def deploy(ctx, _acct, _acc_nonce): if 'chaitintoken' not in ctx['deployedcontracts'][_acct.address].keys(): p.ppln("[-] try to deploy chaitintoken contracts...") abi = ctx['compiledcontracts']['chaitintoken']['abi'] bin = ctx['compiledcontracts']['chaitintoken']['bin'] w3 = ctx['web3instance'] err, txhash = chaitintoken(w3, abi, bin, _acct, _acc_nonce) if err: p.ppln(p.in_fg_color(("[!] " + str(err)), r.red5)) exit(0) else: return None, txhash else: txhash = ctx['deployedcontracts'][_acct.address]['chaitintoken'] return None, txhash
def mint(ctx, _contract, _to_address, _amount, _acct, _acc_nonce): if 'mintflagtoken' not in ctx['deployedcontracts'][_acct.address].keys(): p.ppln("[-] try to mintflagtoken to deployer...") err, txhash = mintflagtoken(ctx, _contract, _to_address, _amount, _acct, _acc_nonce) if err: p.ppln(p.in_fg_color(("[!] " + str(err)), r.red5)) exit(0) else: update_user_deploy_contracts(ctx, _acct.address, 'mintflagtoken', txhash.hex()) return None, txhash.hex() else: txhash = ctx['deployedcontracts'][_acct.address]['mintflagtoken'] return None, txhash
def deploy(ctx, _acct, _acc_nonce): #p.ppln("[*] trying to deploy montagy contracts...") abi = ctx['compiledcontracts']['montagy']['abi'] bin = ctx['compiledcontracts']['montagy']['bin'] w3 = ctx['web3instance'] bin = re.sub('a265627a7a72315820.{64}64736f6c634300050b0032', 'a265627a7a72315820' + randhex(64) + '64736f6c634300050b0032', bin) #bin.repalce("627a7a72315820f044b77d8376499313d5239e6881baadb3dec8e7f36eca97638fed329186930964736f6c634300050b0032","627a7a" + ''.join(random.sample(string.hexdigits, 10)).lower()*9 + "0032") err, txhash = montagy(w3, abi, bin, _acct, _acc_nonce) if err: p.ppln(p.in_fg_color(("[!] " + str(err)), r.red5)) exit(0) else: return None, txhash
def review(ctx, _acct, _txhash): w3 = ctx['web3instance'] #p.ppln("[*] checking deployment statue... ") try: tx_receipt = w3.eth.waitForTransactionReceipt(_txhash, timeout=720) except Exception as err: p.p(str(err)) exit(0) addr = tx_receipt['contractAddress'] if not addr: p.pln(p.in_fg_color("[!] contract montagy deploy Broken down", r.red5)) exit(0) else: p.ppln("[+] contract Montagy deploy " + p.in_fg_color("success", r.green1) + ", address: " + p.in_fg_color(addr, r.blue1)) return addr
def addliquidity(ctx, _contract, _tokenA, _tokenB, _amountA, _amountB, _to_address, _acct, _acc_nonce): if 'addliquiditychaitinrouter' not in ctx['deployedcontracts'][ _acct.address].keys(): p.ppln("[-] try to addliquiditychaitinrouter to deployer...") err, txhash = addliquiditychaitinrouter(ctx, _contract, _to_address, _tokenA, _tokenB, _amountA, _amountB, _acct, _acc_nonce) if err: p.ppln(p.in_fg_color(("[!] " + str(err)), r.red5)) exit(0) else: update_user_deploy_contracts(ctx, _acct.address, 'addliquiditychaitinrouter', txhash.hex()) return None, txhash.hex() else: txhash = ctx['deployedcontracts'][ _acct.address]['addliquiditychaitinrouter'] return None, txhash
def allpairs(ctx, _contract, _acct): if 'allpairschaitinfactory' not in ctx['deployedcontracts'][ _acct.address].keys(): p.ppln("[-] try to allpairschaitinfactory...") err, pair_addr = allpairschaitinfactory(ctx, _contract, _acct) if err: p.ppln(p.in_fg_color(("[!] " + str(err)), r.red5)) exit(0) else: update_user_deploy_contracts(ctx, _acct.address, 'allpairschaitinfactory', pair_addr) p.ppln("[+] allpairschaitinfactory " + p.in_fg_color("success", r.green1)) p.ppln("[!] chaitinToken-feiToken pair address is: " + p.in_fg_color(pair_addr, r.blue1)) return None, pair_addr else: pair_addr = ctx['deployedcontracts'][ _acct.address]['allpairschaitinfactory'] p.ppln("[!] chaitinToken-feiToken pair address is: " + p.in_fg_color(pair_addr, r.blue1)) return None, pair_addr
def mint_review(ctx, _acct, _txhash): w3 = ctx['web3instance'] p.ppln("[-] Check for mintflagtoken successful... ") try: tx_receipt = w3.eth.waitForTransactionReceipt(_txhash, timeout=720) except Exception as err: p.ppln(str(err)) exit(0) addr = tx_receipt['transactionHash'].hex() if not addr: p.pln(p.in_fg_color("[!] mintflagtoken Broken down", r.red5)) else: p.ppln("[+] mintflagtoken " + p.in_fg_color("success", r.green1)) p.ppln("[!] mintflagtoken transaction hash is " + p.in_fg_color(addr, r.blue1))
def review(ctx, _acct, _txhash): w3 = ctx['web3instance'] p.ppln("[-] Check for feitoken contract successful deployment... ") if 'feitoken' not in ctx['deployedcontracts'][_acct.address].keys(): try: tx_receipt = w3.eth.waitForTransactionReceipt(_txhash, timeout=720) except Exception as err: p.p(str(err)) exit(0) addr = tx_receipt['contractAddress'] update_user_deploy_contracts(ctx, _acct.address, 'feitoken', addr) else: addr = ctx['deployedcontracts'][_acct.address]['feitoken'] if not addr: p.pln(p.in_fg_color("[!] contract feitoken deploy Broken down", r.red5)) else: p.ppln("[+] contract feitoken deploy " + p.in_fg_color("success", r.green1)) p.ppln("[!] feitoken contract address is " + p.in_fg_color(addr, r.blue1))
def approveflagtoken(ctx, _contract, _to, _amount, _from, _acc_nonce): w3 = ctx['web3instance'] store_var_contract = w3.eth.contract( address=_contract, abi=ctx['compiledcontracts']['flagtoken']['abi']) p.ppln(" approve transaction init success") construct_tx = store_var_contract.functions.approve( _to, _amount).buildTransaction({ 'chainId': 3, 'from': _from.address, 'nonce': _acc_nonce[0], 'gasPrice': 60000000000, 'gas': 3000000 #'value': w3.toWei(value, 'ether'), }) p.ppln(" approve transaction build success") try: signed_tx = _from.signTransaction(construct_tx) tx_hash = w3.eth.sendRawTransaction(signed_tx.rawTransaction) _acc_nonce[0] += 1 p.ppln(" approve transaction send success") except Exception as err: return err, None return None, tx_hash
def finish_deploy(montage_address): Printer.ppln(DEPLOY_SUCCESS_CELEBRATION) #return bytes.fromhex(montage_address.split("0x")[1]) return montage_address.split("0x")[1]
def run(ctx, _acct): p = Printer() processor = Processor(150) formator = Formator() p.ppln(formator.in_all_left("[-] loading deploy cache...")) ctx = comp(ctx) processor.update(3) acc_nonce = get_acc_nonce(ctx, _acct) processor.update(2) # 1 stage contracts deploy err, chaitintoken_deploy_txhash = ChaitinToken.deploy(ctx, _acct, acc_nonce) processor.update(5) err, feitoken_deploy_txhash = FeiToken.deploy(ctx, _acct, acc_nonce) processor.update(5) err, flagtoken_deploy_txhash = FlagToken.deploy(ctx, _acct, acc_nonce) processor.update(5) err, weth9_deploy_txhash = WETH9.deploy(ctx, _acct, acc_nonce) processor.update(5) err, factory_deploy_txhash = Factory.deploy(ctx, _acct, acc_nonce) processor.update(5) ChaitinToken.review(ctx, _acct, chaitintoken_deploy_txhash) processor.update(5) FeiToken.review(ctx, _acct, feitoken_deploy_txhash) processor.update(5) FlagToken.review(ctx, _acct, flagtoken_deploy_txhash) processor.update(5) WETH9.review(ctx, _acct, weth9_deploy_txhash) processor.update(5) Factory.review(ctx, _acct, factory_deploy_txhash) processor.update(5) # 2 stage contracts deploy factory_addr = ctx['deployedcontracts'][_acct.address]['chaitinfactory'] weth9_addr = ctx['deployedcontracts'][_acct.address]['weth9'] chaitintoken_addr = ctx['deployedcontracts'][_acct.address]['chaitintoken'] err, router_deploy_txhash = Router.deploy(ctx, _acct, acc_nonce, factory_addr, weth9_addr, chaitintoken_addr) processor.update(5) Router.review(ctx, _acct, router_deploy_txhash) processor.update(5) # 3 stage mint approve and add liquidity chaitinrouter_addr = ctx['deployedcontracts'][_acct.address]['chaitinrouter'] err, chaitintoken_mint_txhash = IChaitinToken.mint(ctx, chaitintoken_addr, _acct.address, ONEHUNDRED, _acct, acc_nonce) processor.update(5) err, chaitintoken_approve_txhash = IChaitinToken.approve(ctx, chaitintoken_addr, chaitinrouter_addr, ONEHUNDRED, _acct, acc_nonce) processor.update(5) IChaitinToken.mint_review(ctx, _acct, chaitintoken_mint_txhash) processor.update(5) IChaitinToken.approve_review(ctx, _acct, chaitintoken_approve_txhash) processor.update(5) feitoken_addr = ctx['deployedcontracts'][_acct.address]['feitoken'] err, feitoken_mint_txhash = IFeiToken.mint(ctx, feitoken_addr, _acct.address, ONEHUNDRED, _acct, acc_nonce) processor.update(5) err, feitoken_approve_txhash = IFeiToken.approve(ctx, feitoken_addr, chaitinrouter_addr, ONEHUNDRED, _acct, acc_nonce) processor.update(5) IFeiToken.mint_review(ctx, _acct, feitoken_mint_txhash) processor.update(5) IFeiToken.approve_review(ctx, _acct, feitoken_approve_txhash) processor.update(5) err, chaitinrouter_addliquidity_txhash = IChaitinRouter.addliquidity(ctx, chaitinrouter_addr, chaitintoken_addr, feitoken_addr, ONEHUNDRED, ONEHUNDRED, _acct.address, _acct, acc_nonce) processor.update(5) IChaitinRouter.addliquidity_review(ctx, _acct, chaitinrouter_addliquidity_txhash) processor.update(5) # 4 stage get pair and deploy bank flagtoken_addr = ctx['deployedcontracts'][_acct.address]['flagtoken'] err, pair_addr = IChaitinFactory.allpairs(ctx, factory_addr, _acct) processor.update(5) err, bank_deploy_txhash = ChaitinBank.deploy(ctx, feitoken_addr, _acct.address, flagtoken_addr, pair_addr, chaitinrouter_addr, _acct, acc_nonce) processor.update(5) ChaitinBank.review(ctx, _acct, bank_deploy_txhash) processor.update(5) # 5 stage Mint Flag to ChaitinBank chaitinbank_addr = ctx['deployedcontracts'][_acct.address]['chaitinbank'] err, flagtoken_mint_txhash = IFlagToken.mint(ctx, flagtoken_addr, chaitinbank_addr, ONEHUNDRED, _acct, acc_nonce) processor.update(5) IFlagToken.mint_review(ctx, _acct, flagtoken_mint_txhash) processor.update(5) # 6 stage get Gamer address and Mint ChaitinToken to him gamer_address = ctx['deployedcontracts'][_acct.address]['transfercheck'] err, gamer_mint_txhash = IChaitinToken.mintforuser(ctx, chaitintoken_addr, gamer_address, 1, _acct, acc_nonce) processor.update(5) IChaitinToken.mintforuser_review(ctx, _acct, gamer_mint_txhash) processor.update(5) # finish deployer return finish_deploy(ctx, _acct)