Ejemplo n.º 1
0
def create_account():
    password = request.json.get('password')
    label = request.json.get('label')
    hex_private_key = util.get_random_bytes(32).hex()
    app.config['WALLET_MANAGER'].create_account_from_private_key(label, password, hex_private_key)
    app.config['WALLET_MANAGER'].save()
    return json.jsonify({'hex_private_key': hex_private_key})
 def test_new_add_recovery_transaction(self):
     ont_id = sdk.native_vm().ont_id()
     gas_limit = 20000
     gas_price = 500
     private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf'
     acct = Account(private_key, SignatureScheme.SHA256withECDSA)
     b58_address = acct.get_address_base58()
     acct_did = "did:ont:" + b58_address
     hex_public_key = acct.get_public_key_hex()
     rand_private_key = util.get_random_bytes(32).hex()
     recovery = Account(rand_private_key, SignatureScheme.SHA256withECDSA)
     b58_recovery_address = recovery.get_address_base58()
     tx = ont_id.new_add_recovery_transaction(acct_did, hex_public_key,
                                              b58_recovery_address,
                                              b58_address, gas_limit,
                                              gas_price)
     tx = sdk.sign_transaction(tx, acct)
     try:
         sdk.rpc.send_raw_transaction(tx)
     except SDKException as e:
         msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute ' \
               'error!: [Invoke] Native serivce function execute error!: add recovery failed: already ' \
               'set recovery'
         self.assertEqual(59000, e.args[0])
         self.assertEqual(msg, e.args[1])
def create_account():
    password = request.json.get('password')
    label = request.json.get('label')
    hex_private_key = util.get_random_bytes(32).hex()
    wallet_manager.create_account_from_private_key(label, password,
                                                   hex_private_key)
    wallet_manager.save()
    return json.jsonify({'hex_private_key': hex_private_key})
 def test_b58decode(self):
     length = 20
     rand_code = util.get_random_bytes(length)
     address = Address(rand_code)
     b58_address = address.b58encode()
     zero = Address.b58decode(b58_address).to_array()
     self.assertEqual(rand_code, zero)
     decode_address = Address.b58decode(b58_address).to_array()
     self.assertEqual(rand_code, decode_address)
Ejemplo n.º 5
0
 def create_account_from_prikey(self, label: str, pwd: str,
                                private_key: bytes):
     salt = get_random_bytes(16)
     info = self.create_account_info(label, pwd, salt, private_key)
     for index in range(len(self.wallet_in_mem.accounts)):
         if info.address_base58 == self.wallet_in_mem.accounts[
                 index].address:
             return self.wallet_in_mem.accounts[index]
     return None
 def test_import_identity(self):
     wm = WalletManager()
     wm.open_wallet("./test.json")
     salt = get_random_bytes(16)
     privete_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf'
     acct = Account(a2b_hex(privete_key.encode()))
     enpri = acct.export_gcm_encrypted_private_key("1", salt, 16384)
     wm.import_identity("label2", enpri, "1", salt,
                        acct.get_address_base58())
Ejemplo n.º 7
0
 def test_b58decode(self):
     length = 20
     rand_code = util.get_random_bytes(length)
     address = Address(rand_code)
     b58_address = address.b58encode()
     zero = Address.b58decode(b58_address)
     self.assertEqual(rand_code, zero)
     decode_address = Address.b58decode(b58_address, is_bytes=False)
     self.assertTrue(isinstance(decode_address, Address))
     self.assertEqual(rand_code, decode_address.to_array())
Ejemplo n.º 8
0
 def test_export_gcm_encrypted_private_key(self):
     private_key = util.get_random_bytes(32).hex()
     account = Account(private_key, SignatureScheme.SHA256withECDSA)
     b58_address = account.get_address_base58()
     salt = util.get_random_hex_str(16)
     password = '******'
     enc_private_key = account.export_gcm_encrypted_private_key(password, salt, 16384)
     decoded_private_key = account.get_gcm_decoded_private_key(enc_private_key, password, b58_address, salt, 16384,
                                                               SignatureScheme.SHA256withECDSA)
     self.assertEqual(private_key, decoded_private_key)
Ejemplo n.º 9
0
def create_identity():
    label = request.json.get('label')
    password = request.json.get('password')
    hex_private_key = util.get_random_bytes(32).hex()
    try:
        new_identity = app.config['WALLET_MANAGER'].create_identity_from_private_key(label, password,
                                                                                     hex_private_key)
    except SDKException as e:
        return json.jsonify({'result': e}), 500
    app.config['WALLET_MANAGER'].save()
    return json.jsonify({'hex_private_key': hex_private_key, 'ont_id': new_identity.ont_id}), 200
Ejemplo n.º 10
0
 def test_export_gcm_encrypted_private_key(self):
     private_key = "75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf"
     account = Account(util.hex_to_bytes(private_key),
                       SignatureScheme.SHA256withECDSA)
     salt = util.get_random_bytes(16)
     enc_private_key = account.export_gcm_encrypted_private_key("1", salt, 16384)
     import_private_key = account.get_gcm_decoded_private_key(enc_private_key, "1", account.get_address_base58(),
                                                              salt,
                                                              16384,
                                                              SignatureScheme.SHA256withECDSA)
     self.assertEqual(import_private_key.hex(), private_key)
 def test_send_raw_transaction(self):
     private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf'
     acct = Account(a2b_hex(private_key.encode()))
     private_key2 = get_random_bytes(32)
     acct2 = Account(private_key2)
     tx = Asset.new_transfer_transaction("ont", acct.get_address_base58(),
                                         acct2.get_address_base58(), 2,
                                         acct.get_address_base58(), 20000,
                                         500)
     tx = sdk.sign_transaction(tx, acct)
     res = sdk.rpc.send_raw_transaction(tx)
     self.assertEqual(len(res), 64)
    def test_new_add_remove_public_key_transaction(self):
        ont_id = sdk.native_vm().ont_id()
        private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf'
        acct = Account(private_key, SignatureScheme.SHA256withECDSA)
        hex_public_key = acct.get_public_key_hex()
        rand_private_key = util.get_random_bytes(32).hex()
        rand_acct = Account(rand_private_key, SignatureScheme.SHA256withECDSA)
        hex_new_public_key = rand_acct.get_public_key_hex()
        b58_address = acct.get_address_base58()
        acct_did = "did:ont:" + b58_address
        gas_limit = 20000
        gas_price = 500
        tx = ont_id.new_add_public_key_transaction(acct_did, hex_public_key,
                                                   hex_new_public_key,
                                                   b58_address, gas_limit,
                                                   gas_price)
        tx = sdk.sign_transaction(tx, acct)
        tx_hash = sdk.rpc.send_raw_transaction(tx)
        time.sleep(6)
        notify = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)['Notify']
        self.assertEqual('PublicKey', notify[0]['States'][0])
        self.assertEqual('add', notify[0]['States'][1])
        self.assertEqual(acct_did, notify[0]['States'][2])
        self.assertEqual(hex_new_public_key, notify[0]['States'][4])
        try:
            sdk.rpc.send_raw_transaction(tx)
        except SDKException as e:
            msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute error!:' \
                  ' [Invoke] Native serivce function execute error!: add key failed: already exists'
            self.assertEqual(59000, e.args[0])
            self.assertEqual(msg, e.args[1])

        tx = ont_id.new_remove_public_key_transaction(acct_did, hex_public_key,
                                                      hex_new_public_key,
                                                      b58_address, gas_limit,
                                                      gas_price)
        tx = sdk.sign_transaction(tx, acct)
        tx_hash = sdk.rpc.send_raw_transaction(tx)
        time.sleep(6)
        notify = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)['Notify']
        self.assertEqual('PublicKey', notify[0]['States'][0])
        self.assertEqual('remove', notify[0]['States'][1])
        self.assertEqual(acct_did, notify[0]['States'][2])
        self.assertEqual(hex_new_public_key, notify[0]['States'][4])
        try:
            sdk.rpc.send_raw_transaction(tx)
        except SDKException as e:
            msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute ' \
                  'error!: [Invoke] Native serivce function execute error!: remove key failed: ' \
                  'public key has already been revoked'
            self.assertEqual(59000, e.args[0])
            self.assertEqual(msg, e.args[1])
    def test_send_add_remove_public_key_transaction(self):
        ont_id = sdk.native_vm().ont_id()
        label = 'label'
        password = '******'
        private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf'
        acct = Account(private_key, SignatureScheme.SHA256withECDSA)
        identity = sdk.wallet_manager.create_identity_from_private_key(
            label, password, private_key)
        rand_private_key = util.get_random_bytes(32).hex()
        rand_acct = Account(rand_private_key, SignatureScheme.SHA256withECDSA)
        hex_new_public_key = rand_acct.get_public_key_hex()
        password = '******'
        gas_limit = 20000
        gas_price = 500
        tx_hash = ont_id.send_add_public_key_transaction(
            identity, password, hex_new_public_key, acct, gas_limit, gas_price)
        time.sleep(6)
        notify = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)['Notify']
        self.assertEqual('PublicKey', notify[0]['States'][0])
        self.assertEqual('add', notify[0]['States'][1])
        self.assertEqual(identity.ont_id, notify[0]['States'][2])
        self.assertEqual(hex_new_public_key, notify[0]['States'][4])
        try:
            ont_id.send_add_public_key_transaction(identity, password,
                                                   hex_new_public_key, acct,
                                                   gas_limit, gas_price)
        except SDKException as e:
            msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute' \
                  ' error!: [Invoke] Native serivce function execute error!: add key failed: already exists'
            self.assertEqual(59000, e.args[0])
            self.assertEqual(msg, e.args[1])

        tx_hash = ont_id.send_remove_public_key_transaction(
            identity, password, hex_new_public_key, acct, gas_limit, gas_price)
        time.sleep(6)
        notify = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)['Notify']
        self.assertEqual('PublicKey', notify[0]['States'][0])
        self.assertEqual('remove', notify[0]['States'][1])
        self.assertEqual(identity.ont_id, notify[0]['States'][2])
        self.assertEqual(hex_new_public_key, notify[0]['States'][4])
        try:
            ont_id.send_remove_public_key_transaction(identity, password,
                                                      hex_new_public_key, acct,
                                                      gas_limit, gas_price)
        except SDKException as e:
            msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute ' \
                  'error!: [Invoke] Native serivce function execute error!: remove key failed: ' \
                  'public key has already been revoked'
            self.assertEqual(59000, e.args[0])
            self.assertEqual(msg, e.args[1])
Ejemplo n.º 14
0
 def test_get_random_bytes(self):
     try:
         length = -1
         util.get_random_bytes(length)
     except ValueError:
         raised = True
         self.assertTrue(raised, 'Exception raised')
     length = 0
     self.assertEqual(len(util.get_random_bytes(length)), length)
     length = 1
     self.assertEqual(len(util.get_random_bytes(length)), length)
     length = 64
     self.assertEqual(len(util.get_random_bytes(length)), length)
     length = 256
     self.assertEqual(len(util.get_random_bytes(length)), length)
     length = 1024
     self.assertEqual(len(util.get_random_bytes(length)), length)
     length = 2048
     self.assertEqual(len(util.get_random_bytes(length)), length)
 def test_send_add_recovery_transaction(self):
     ont_id = sdk.native_vm().ont_id()
     label = 'label'
     password = '******'
     private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf'
     acct = Account(private_key, SignatureScheme.SHA256withECDSA)
     identity = sdk.wallet_manager.create_identity_from_private_key(label, password, private_key)
     rand_private_key = util.get_random_bytes(32).hex()
     recovery = Account(rand_private_key, SignatureScheme.SHA256withECDSA)
     b58_recovery_address = recovery.get_address_base58()
     password = '******'
     gas_limit = 20000
     gas_price = 500
     try:
         ont_id.send_add_recovery_transaction(identity, password, b58_recovery_address, acct, gas_limit, gas_price)
     except SDKException as e:
         msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] ' \
               'service execute error!: [Invoke] Native serivce function execute error!: ' \
               'add recovery failed: already set recovery'
         self.assertEqual(59000, e.args[0])
         self.assertEqual(msg, e.args[1])
Ejemplo n.º 16
0
 def create_account(self, label: str, pwd: str) -> AccountData:
     priv_key = get_random_bytes(32)
     salt = get_random_bytes(16)
     account = self.__create_account(label, pwd, salt, priv_key, True)
     return self.wallet_file.get_account_by_address(
         account.get_address_base58())
Ejemplo n.º 17
0
 def create_identity_from_prikey(self, label: str, pwd: str,
                                 private_key: bytes):
     salt = get_random_bytes(16)
     identity = self.__create_identity(label, pwd, salt, private_key)
     private_key = None
     return identity
Ejemplo n.º 18
0
 def create_identity(self, label: str, pwd: str):
     priv_key = get_random_bytes(32)
     salt = get_random_bytes(16)
     return self.__create_identity(label, pwd, salt, priv_key)
Ejemplo n.º 19
0
                    self.wallet_in_mem.identities[index].controls[0].salt)
                private_key = Account.get_gcm_decoded_private_key(
                    key, pwd, addr, salt,
                    Scrypt().get_n(), self.scheme)
                return Account(private_key, self.scheme)
        return None


if __name__ == '__main__':
    # test wallet load and save
    private_key = '99bbd375c745088b372c6fc2ab38e2fb6626bc552a9da47fc3d76baa21537a1c'
    private_key = a2b_hex(private_key.encode())
    scheme = SignatureScheme.SHA256withECDSA
    acct0 = Account(private_key, scheme)
    encrypted_key = 'T3uep1USsEqiJbP4O+CKsl2AWfpGjvuVSKxpoKeGdEUa0nfLHHjIq3G4xOz7a4PC'
    wallet_path = 'test.json'
    w = WalletManager()
    w.open_wallet(wallet_path)
    salt = get_random_bytes(16)
    # w.import_account("123", encrypted_key, '234', acct0.get_address_base58(), salt)
    if False:
        w.create_random_account("label", "1")
        w.create_random_identity("label-ontid", "1")
        w.create_account_from_prikey("label123", "1", private_key)
        w.create_identity_from_prikey("label123-ontid", "1", private_key)
    if True:
        acctTmp = w.get_account("AMJYVc3vHK7vZ3XfFXsBP9r9sGN1cYYeQN", "1")
        print(acctTmp.get_address_base58())
    print(w.wallet_in_mem.accounts[0].__dict__)
    w.save(wallet_path)