Skip to content

kmd.sign_transaction() fails when signing_address is specified #436

@oysterpack

Description

@oysterpack

algosdk.kmd.sign_transaction() fails when signing_address arg is specified

Expected behaviour

Transaction should be signed using the private key corresponding to the specified signing_address

Actual behaviour

Exception is raised:

algosdk.error.KMDHTTPError: {
  "error": true,
  "message": "could not decode request body"

Steps to reproduce issue

  1. start sandbox environment
  2. Run the below code to reproduce
from pprint import pprint
from typing import cast

from algosdk import kmd
from algosdk.transaction import PaymentTxn
from algosdk.v2client.algod import AlgodClient

token = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
kmd_client = kmd.KMDClient(kmd_token=token, kmd_address='http://127.0.0.1:4002')
algod_client = AlgodClient(algod_token=token, algod_address='http://127.0.0.1:4001')

suggested_params = algod_client.suggested_params()
address = 'XDOV35UGGYEQHHN2UJSW4NQKS3IAFK2PYTGLK2CSUTDTXZ4EVRXTMEONEQ'
txn = PaymentTxn(sender=address, receiver=address, amt=0, sp=suggested_params)


def unencrypted_default_wallet_id() -> str:
    wallets = cast(list[dict[str, str]], kmd_client.list_wallets())
    for wallet in wallets:
        if wallet['name'] == 'unencrypted-default-wallet':
            return wallet['id']
    raise Exception('not found')


wallet_handle = kmd_client.init_wallet_handle(id=unencrypted_default_wallet_id(), password='')
# works when `signing_address` is None
signed_txn = kmd_client.sign_transaction(handle=wallet_handle, password='', txn=txn)
print('*** SUCCESSFULLY SIGNED TRANSACTION ***')
pprint(signed_txn.dictify())

print('*** Signing transaction with a `signing_address` arg fails')
# fails when `signing_address` is specified
signed_txn = kmd_client.sign_transaction(handle=wallet_handle, password='', txn=txn, signing_address=address) # raises exception

Your environment

py-algorand-sdk==2.0.0

./sandbox version

algod version
12885032963
3.2.3.stable [rel/stable] (commit #d2289a52)
go-algorand is licensed with AGPLv3.0
source code available at https://github.com/algorand/go-algorand

Indexer version
2.8.0-dev.unknown compiled at 2022-01-21T13:24:39+0000 from git hash cf2a3873600a95c5740f0a854ecd3e5636bb4afb (modified)

Postgres version
postgres (PostgreSQL) 13.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions