def test_contract_2(): priv_key = 'a5870fbc55861c6e02012be5bb9695be0074d0064022e6be7b28d1f834bba963' s = {'id': 273, 'state': 1, 'active': False, 'tableid': '13', 'walletid': '-6097185355090423139', 'tokenid': '1', 'address': '1234-9558-7186-1912-8477', 'fields': [{'name': 'Id', 'type': 'int', 'optional': False}, {'name': 'Value', 'type': 'string', 'optional': True}, {'name': 'Menu', 'type': 'string', 'optional': True}, {'name': 'Conditions', 'type': 'string', 'optional': True}, {'name': 'ValidateCount', 'type': 'int', 'optional': True}, {'name': 'ValidateMode', 'type': 'string', 'optional': True}], 'name': '@1EditPage'} c = Contract(schema=s, private_key=priv_key, params={'Id': 2, 'Value': 'notifications'}) assert c.id == s['id'] assert c.fields == s['fields'] assert c.public_key == bytes.fromhex(get_public_key(priv_key)) unknown_param_error_caught = False try: c = Contract(schema=s, private_key=priv_key, params={'Id': 2, 'Value': 'notifications', 'Some': 'shit'}) except UnknownParamError: unknown_param_error_caught = True assert unknown_param_error_caught c = Contract(schema=s, private_key=priv_key, params={'Id': 2, 'Value': 'notifications'}) assert c.public_key == bytes.fromhex(get_public_key(priv_key)) assert type(c.get_struct()) == dict assert type(c.serialize()) == bytes assert msgpack.unpackb(c.serialize(), raw=False) assert type(c.calc_hash()) == bytes assert type(c.sign()) == bytes assert type(c.concat()) == bytes
def test_money_transfer(self): balanceNodeOwnerB = utils.get_balance_from_db(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], conf["2"]["keyID"]) commisionWallet = utils.get_commission_wallet(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], 1) balanceCommisionB = utils.get_balance_from_db(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], commisionWallet) tokenRunner, uid = utils.get_uid(conf["2"]["url"]) signature = sign(keys["key2"], uid) pubRunner = get_public_key(keys["key2"]) balanceRunnerB = utils.get_balance_from_db_by_pub( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], pubRunner) dataRunner = utils.login(conf["2"]["url"], keys["key2"], 0) tokenRunner = dataRunner["jwtToken"] data = {"Recipient": "0005-2070-2000-0006-0200", "Amount": "1000"} res = utils.call_contract(conf["2"]["url"], keys["key2"], "MoneyTransfer", data, tokenRunner) hash = res["hash"] result = utils.txstatus(conf["2"]["url"], conf["2"]["time_wait_tx_in_block"], hash, tokenRunner) balanceRunnerMust = balanceRunnerB - 1000 balanceRunnerB = utils.get_balance_from_db_by_pub( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], pubRunner)
def main(argv=None): try: if __name__ != '__main__': # pragma: no cover sys.modules['__main__'] = sys.modules[__name__] parser = argparse.ArgumentParser() parser.add_argument('-f', '--fmt') parser.add_argument('-k', '--key-id', type=int) parser.add_argument('-a', '--address') parser.add_argument('-s', '--private-key') parser.add_argument('-p', '--public-key') args = parser.parse_args() if args.key_id: print(key_id_to_address(args.key_id)) elif args.address: print(address_to_key_id(args.address)) elif args.public_key: if args.fmt: fmt = args.fmt else: fmt = '04' if len(args.public_key) == 130 and args.public_key[0:2] == '04': public_key = args.public_key[2:] else: public_key = args.public_key public_key = bytes.fromhex(public_key) key_id = public_key_to_key_id(public_key) address = key_id_to_address(key_id) print("Key ID: %s " % key_id) print("Address: %s " % address) elif args.private_key: if args.fmt: fmt = args.fmt else: fmt = '04' public_key = get_public_key(args.private_key, fmt=fmt) public_key_b = bytes.fromhex(public_key) key_id = public_key_to_key_id(public_key_b) address = key_id_to_address(key_id) print("Key ID: %s" % key_id) print("Address: %s" % address) print("Public Key: %s" % public_key) else: parser.print_help(sys.stderr) sys.exit(0) except KeyboardInterrupt: pass
def login(url, prKey, role=0, ecosystem=1): token, uid = get_uid(url) signature = sign(prKey, "LOGIN" + uid) pubkey = get_public_key(prKey) fullToken = 'Bearer ' + token data = { 'pubkey': pubkey, 'signature': signature, "role_id": role, "ecosystem": ecosystem } head = {'Authorization': fullToken} resp = requests.post(url + '/login', params=data, headers=head) res = resp.json() print(res) result = {} result["uid"] = uid result["jwtToken"] = 'Bearer ' + res["token"] result["pubkey"] = pubkey result["address"] = res["address"] result["key_id"] = res["key_id"] return result
def test_contract_1(): priv_key = 'a5870fbc55861c6e02012be5bb9695be0074d0064022e6be7b28d1f834bba963' s = {'id': 261, 'state': 1, 'active': False, 'tableid': '1', 'walletid': '-6097185355090423139', 'tokenid': '1', 'address': '1234-9558-7186-1912-8477', 'fields': [], 'name': '@1MainCondition'} c = Contract(schema=s, private_key=priv_key) assert c.id == s['id'] assert c.fields == s['fields'] assert c.public_key == bytes.fromhex(get_public_key(priv_key)) s = c.get_struct() assert 'Header' in s assert s['Header'] assert type(s['Header']) == dict for k in ('ID', 'Time', 'Nonce', 'EcosystemID', 'KeyID', 'NetworkID'): assert k in s['Header'] assert s['Header'][k] assert is_number(s['Header'][k]) for k in ('PublicKey',): assert k in s['Header'] assert s['Header'][k] assert is_bytes(s['Header'][k]) assert 'Params' in s
httpPort1 = sys.argv[3] id = sys.argv[4] pub = sys.argv[5] amount = sys.argv[6] baseUrl = "http://" + host1 + ":" + httpPort1 + "/api/v2" respUid = requests.get(baseUrl + '/getuid') resultGetuid = respUid.json() signature = sign(prKey1, "LOGIN" + resultGetuid['uid']) print("sign----", signature, "prKey---", prKey1, "data---", "LOGIN" + resultGetuid['uid']) fullToken = 'Bearer ' + resultGetuid['token'] respLogin = requests.post(baseUrl + '/login', params={ 'pubkey': get_public_key(prKey1), 'signature': signature }, headers={'Authorization': fullToken}) resultLogin = respLogin.json() address = resultLogin["address"] timeToken = resultLogin["refresh"] jvtToken = 'Bearer ' + resultLogin["token"] contName = 'con_' + ''.join(choice(ascii_uppercase) for i in range(12)) code = '{data {}conditions {} action {$result=DBInsert(\"keys\", \"id,pub,amount\", \"' + id + '\", \"' + pub + '\", \"' + amount + '\") }}' updateKeysCode = 'contract ' + contName + code dataContKeys = { 'ApplicationId': 1, 'Wallet': '', 'Value': updateKeysCode,
def test_deactive_contract_with_err(self): if funcs.is_contract_activated(conf["2"]["url"], "CostContract", self.token) == True: self.deactivateContract() walletId = funcs.get_activated_wallet(conf["2"]["url"], "CostContract", self.token) balanceContractOwnerB = utils.get_balance_from_db( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], walletId) balanceNodeOwnerB = utils.get_balance_from_db(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], conf["2"]["keyID"]) commisionWallet = utils.get_commission_wallet(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], 1) balanceCommisionB = utils.get_balance_from_db(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], commisionWallet) commission = utils.get_system_parameter(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], "commission_size") tokenRunner, uid = utils.get_uid(conf["2"]["url"]) signature = sign(keys["key2"], uid) pubRunner = get_public_key(keys["key2"]) balanceRunnerB = utils.get_balance_from_db_by_pub( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], pubRunner) dataRunner = utils.login(conf["2"]["url"], keys["key2"], 0) tokenRunner = dataRunner["jwtToken"] res = utils.call_contract(conf["2"]["url"], keys["key2"], "CostContract", {"State": 0}, tokenRunner) time.sleep(10) hash = res["hash"] result = utils.txstatus(conf["2"]["url"], conf["2"]["time_wait_tx_in_block"], hash, tokenRunner) balanceContractOwnerA = utils.get_balance_from_db( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], walletId) balanceNodeOwnerA = utils.get_balance_from_db(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], conf["2"]["keyID"]) balanceCommisionA = utils.get_balance_from_db(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], commisionWallet) balanceRunnerA = utils.get_balance_from_db_by_pub( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], pubRunner) dictValid = dict(balanceContractOwner=balanceContractOwnerA, balanceNodeOwner=balanceNodeOwnerA, balanceCommision=balanceCommisionA, balanceRunner=balanceRunnerA) dictExpect = dict(balanceContractOwner=balanceContractOwnerB, balanceNodeOwner=balanceNodeOwnerB, balanceCommision=balanceCommisionB, balanceRunner=balanceRunnerB) msg = "balanceContractOwnerA:" + str(balanceContractOwnerA) + "\n" +\ "balanceContractOwnerE:" + str(balanceContractOwnerB) + "\n" +\ "balanceNodeOwnerA:" + str(balanceNodeOwnerA) + "\n" +\ "balanceNodeOwnerE:" + str(balanceNodeOwnerB) + "\n" +\ "balanceCommisionA:" + str(balanceCommisionA) + "\n" +\ "balanceCommisionE:" + str(balanceCommisionB) + "\n" +\ "balanceRunnerA:" + str(balanceRunnerA) + "\n" +\ "balanceRunnerE:" + str(balanceRunnerB) + "\n" self.assertDictEqual(dictValid, dictExpect, msg)
def test_deactive_contract(self): if funcs.is_contract_activated(conf["2"]["url"], "CostContract", self.token) == True: self.deactivateContract() walletId = funcs.get_activated_wallet(conf["2"]["url"], "CostContract", self.token) sumsBefore = utils.getUserTokenAmounts(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"]) summBefore = sum(summ[0] for summ in sumsBefore) bNodeBalance = self.getNodeBalances() tokenRunner, uid = utils.get_uid(conf["2"]["url"]) signature = sign(keys["key2"], uid) pubRunner = get_public_key(keys["key2"]) balanceRunnerB = utils.get_balance_from_db_by_pub( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], pubRunner) dataRunner = utils.login(conf["2"]["url"], keys["key2"], 0) tokenRunner = dataRunner["jwtToken"] res = utils.call_contract(conf["2"]["url"], keys["key2"], "CostContract", {"State": 1}, tokenRunner) result = utils.txstatus(conf["2"]["url"], conf["2"]["time_wait_tx_in_block"], res["hash"], tokenRunner) time.sleep(10) node = utils.get_block_gen_node(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], result["blockid"]) sumsAfter = utils.getUserTokenAmounts(conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"]) summAfter = sum(summ[0] for summ in sumsAfter) aNodeBalance = self.getNodeBalances() nodeCommission = 141620000000000000 platformaCommission = 4380000000000000 commission = nodeCommission + platformaCommission balanceRunnerA = utils.get_balance_from_db_by_pub( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], pubRunner) balanceContractOwnerA = utils.get_balance_from_db( conf["1"]["dbHost"], conf["1"]["dbName"], conf["1"]["login"], conf["1"]["pass"], walletId) inHistory = self.isCommissionsInHistory(nodeCommission, dataRunner["key_id"], platformaCommission, node) if node == 0: dictValid = dict(balanceRunner=balanceRunnerA, platformBalance=aNodeBalance[0], summ=summBefore, history=inHistory) dictExpect = dict(balanceRunner=balanceRunnerB - commission, platformBalance=bNodeBalance[0] + commission, summ=summAfter, history=True) else: dictValid = dict(balanceRunner=balanceRunnerA, platformBalance=aNodeBalance[0], nodeBalance=aNodeBalance[node], summ=summBefore, history=inHistory) dictExpect = dict(balanceRunner=balanceRunnerB - commission, platformBalance=bNodeBalance[0] + platformaCommission, nodeBalance=bNodeBalance[node] + nodeCommission, summ=summAfter, history=True) self.assertDictEqual(dictValid, dictExpect, "Error in comissions run deactivated contract")
def test_priv_pub_keys(): priv_key = 'a5870fbc55861c6e02012be5bb9695be0074d0064022e6be7b28d1f834bba963' assert get_public_key(priv_key)
parser.add_argument('-httpHost', default='127.0.0.1') parser.add_argument('-httpPort', default='7079') args = parser.parse_args() baseUrl = "http://" + args.httpHost + ":" + args.httpPort + "/api/v2" respUid = requests.get(baseUrl + '/getuid') resultGetuid = respUid.json() signature = sign(args.privKey, "LOGIN" + resultGetuid['uid']) print("signature------------", signature) fullToken = 'Bearer ' + resultGetuid['token'] respLogin = requests.post(baseUrl + '/login', params={ 'pubkey': get_public_key(args.privKey), 'signature': signature }, headers={'Authorization': fullToken}) resultLogin = respLogin.json() address = resultLogin["address"] timeToken = resultLogin["refresh"] jvtToken = 'Bearer ' + resultLogin["token"] print(args.name) print(args.value) dataCont = {"Name": args.name, "Value": args.value} resPrepareCall = requests.post(baseUrl + '/prepare/UpdateSysParam', data=dataCont, headers={'Authorization': jvtToken}) jsPrepareCall = resPrepareCall.json()