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
示例#2
0
 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)
示例#3
0
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
示例#4
0
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
示例#6
0
        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,
示例#7
0
 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)
示例#8
0
 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)
示例#10
0
    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()